Kurz: Nasazení z GitHubu do služby Azure Kubernetes Service pomocí Jenkinse

Důležité

Mnoho služeb Azure má moduly plug-in Jenkinse. Některé z těchto modulů plug-in budou od 29. února 2024 mimo podporu. Azure CLI je aktuálně doporučený způsob integrace Jenkinse se službami Azure. Další informace najdete v článku Moduly plug-in Jenkins pro Azure.

Tento kurz nasadí ukázkovou aplikaci z GitHubu do clusteru Azure Kubernetes Service (AKS) nastavením kontinuální integrace (CI) a průběžného nasazování (CD) v Jenkinse.

V tomto kurzu dokončíte tyto úlohy:

  • Nasaďte ukázkovou aplikaci Azure Vote do clusteru AKS.
  • Vytvořte základní projekt Jenkinse.
  • Nastavte přihlašovací údaje pro Jenkinse pro interakci s ACR.
  • Vytvořte úlohu sestavení Jenkinse a webhook GitHubu pro automatizované sestavení.
  • Otestujte kanál CI/CD a aktualizujte aplikaci v AKS na základě potvrzení kódu GitHubu.

Požadavky

K dokončení tohoto kurzu potřebujete tyto položky:

  • Základní znalost imagí Kubernetes, Gitu, CI/CD a kontejnerů

  • Cluster AKS a kubectl nakonfigurovaný s přihlašovacími údaji clusteru AKS.

  • Registr služby Azure Container Registry (ACR), název přihlašovacího serveru ACR a cluster AKS nakonfigurované pro ověření v registru ACR.

  • Kontroler Jenkins nasazený na virtuální počítač Azure.

  • Nainstalované a nakonfigurované rozhraní příkazového řádku Azure CLI verze 2.0.46 nebo novější. Verzi zjistíte spuštěním příkazu az --version. Pokud potřebujete instalaci nebo upgrade, přečtěte si téma Instalace Azure CLI.

  • Docker nainstalovaný ve vývojovém systému

  • Účet GitHubu, osobní přístupový token GitHubu a klient Git nainstalovaný ve vašem vývojovém systému

  • Pokud místo této ukázkové skriptované instance zadáte vlastní instanci Jenkinse, vaše instance Jenkinse potřebuje nainstalovaný a nakonfigurovaný Docker a kubectl.

Příprava aplikace

V tomto článku použijete ukázkovou aplikaci Azure Vote, která obsahuje webové rozhraní a Redis pro dočasné úložiště dat.

Před integrací Jenkinse a AKS pro automatizovaná nasazení nejprve ručně připravte a nasaďte aplikaci Azure Vote do clusteru AKS. Toto ruční nasazení umožňuje zobrazit aplikaci v akci.

Poznámka:

Ukázková aplikace Azure Vote používá pod Linux, který je naplánovaný tak, aby běžel na uzlu Linuxu. Tok popsaný v tomto článku funguje také pro pod Windows Serveru naplánovaný na uzlu Windows Serveru.

Fork následující úložiště GitHub pro ukázkovou aplikaci - https://github.com/Azure-Samples/azure-voting-app-redis. Pokud chcete vytvořit fork úložiště do svého vlastního účtu GitHub, vyberte tlačítko Fork (Vytvořit fork) v pravém horním rohu.

Naklonujte fork do vývojového systému. Při klonování tohoto úložiště nezapomeňte použít adresu URL forku:

git clone https://github.com/<your-github-account>/azure-voting-app-redis.git

Přejděte do adresáře klonovaného forku:

cd azure-voting-app-redis

K vytvoření imagí kontejneru potřebných pro ukázkovou aplikaci použijte soubor docker-compose.yaml s docker-compose:

docker-compose up -d

Požadované základní image se natáhnou a sestaví se kontejnery aplikací. Potom můžete k zobrazení vytvořené image použít příkaz docker images . Stáhly se nebo se vytvořily tři image. Image azure-vote-front obsahuje aplikaci a jako základ využívá image nginx-flask. Image redis se používá ke spuštění instance Redis:

$ docker images

REPOSITORY                   TAG        IMAGE ID            CREATED             SIZE
azure-vote-front             latest     9cc914e25834        40 seconds ago      694MB
redis                        latest     a1b99da73d05        7 days ago          106MB
tiangolo/uwsgi-nginx-flask   flask      788ca94b2313        9 months ago        694MB

Přihlaste se ke svému registru kontejneru Azure.

az acr login -n <acrLoginServer>

Nahraďte <acrLoginServer> přihlašovacím serverem ACR.

Pomocí příkazu značky Dockeru označte image názvem přihlašovacího serveru ACR a číslem v1verze . Použijte vlastní <acrLoginServer> název získaný v předchozím kroku:

docker tag azure-vote-front <acrLoginServer>/azure-vote-front:v1

Nakonec nasdílejte image azure-vote-front do registru ACR. Znovu nahraďte <acrLoginServer> názvem přihlašovacího serveru vlastního registru ACR, například myacrregistry.azurecr.io:

docker push <acrLoginServer>/azure-vote-front:v1

Nasazení ukázkové aplikace do AKS

K nasazení ukázkové aplikace do clusteru AKS můžete použít soubor manifestu Kubernetes v kořenovém adresáři úložiště Azure Vote. Otevřete soubor manifestu pomocí editoru azure-vote-all-in-one-redis.yaml , například vi. Nahraďte microsoft názvem přihlašovacího serveru ACR. Tato hodnota se nachází na řádku 60 souboru manifestu:

containers:
- name: azure-vote-front
  image: azuredocs/azure-vote-front

Pak pomocí příkazu kubectl apply nasaďte aplikaci do clusteru AKS:

kubectl apply -f azure-vote-all-in-one-redis.yaml

Vytvoří se služba nástroje pro vyrovnávání zatížení Kubernetes, která aplikaci zveřejní na internetu. Tento proces může trvat několik minut. Pokud chcete monitorovat průběh nasazení nástroje pro vyrovnávání zatížení, použijte příkaz kubectl get service s argumentem --watch . Jakmile se stav adresy EXTERNAL-IP změní ze stavu Probíhá na hodnotu IP adresa, pomocí klávesové zkratky Control + C zastavte sledovací proces kubectl.

$ kubectl get service azure-vote-front --watch

NAME               TYPE           CLUSTER-IP    EXTERNAL-IP   PORT(S)        AGE
azure-vote-front   LoadBalancer   10.0.215.27   <pending>     80:30747/TCP   22s
azure-vote-front   LoadBalancer   10.0.215.27   40.117.57.239   80:30747/TCP   2m

Pokud chcete zobrazit aplikaci v akci, otevřete webový prohlížeč na externí IP adresu vaší služby. Zobrazí se aplikace Azure Vote, jak je znázorněno v následujícím příkladu:

Azure sample vote application running in AKS

Konfigurace kontroleru Jenkinse

Pokud chcete povolit nasazení AKS z kontroleru Jenkinse, použijte následující změny:

Otevřete příchozí port 80 .

az vm open-port \
--resource-group <Resource_Group_name> \
--name <Jenkins_Controller_VM>  \
--port 80 --priority 1020

Nahraďte a <Jenkins_Controller_VM> nahraďte <Resource_Group_name> odpovídajícími hodnotami.

SSH do kontroleru Jenkinse

ssh azureuser@<PublicIPAddres>

Nahraďte <PublicIPAddress> IP adresou kontroleru Jenkinse.

Instalace a přihlášení k AzCLI

curl -L https://aka.ms/InstallAzureCli | bash
az login

Poznámka:

Pokud chcete azCLI nainstalovat ručně, postupujte podle těchto pokynů.

Instalace Dockeru

sudo apt-get install apt-transport-https ca-certificates curl software-properties-common -y;
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -;
sudo apt-key fingerprint 0EBFCD88;
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable";
sudo apt-get update;
sudo apt-get install docker-ce -y;

Instalace Kubectl a Připojení do AKS

sudo az aks install-cli
sudo az aks get-credentials --resource-group <Resource_Group> --name <AKS_Name>

Nahraďte a <AKS_Name> nahraďte <Resource_Group> odpovídajícími hodnotami.

Konfigurace přístupu

sudo usermod -aG docker jenkins;
sudo usermod -aG docker azureuser;
sudo touch /var/lib/jenkins/jenkins.install.InstallUtil.lastExecVersion;
sudo service jenkins restart;
sudo cp ~/.kube/config /var/lib/jenkins/.kube/
sudo chmod 777 /var/lib/jenkins/
sudo chmod 777 /var/lib/jenkins/config

Vytvoření proměnné prostředí Jenkinse

Proměnná prostředí Jenkinse se používá k uložení názvu přihlašovacího serveru ACR. Tato proměnná se odkazuje během úlohy sestavení Jenkinse. Pokud chcete vytvořit tuto proměnnou prostředí, proveďte následující kroky:

  • Na levé straně portálu Jenkinse vyberte Spravovat Systém konfigurace Jenkinse>.

  • V části Globální vlastnosti vyberte Proměnné prostředí. Přidejte proměnnou s názvem ACR_LOGINSERVER a hodnotou přihlašovacího serveru ACR.

    Jenkins environment variables

  • Po dokončení vyberte Uložit v dolní části stránky.

Vytvoření přihlašovacích údajů Jenkinse pro ACR

Během procesu CI/CD jenkins sestaví nové image kontejneru na základě aktualizací aplikací a potřebuje tyto image odeslat do registru ACR.

Pokud chcete Jenkinsi povolit nabízení aktualizovaných imagí kontejneru do služby ACR, musíte zadat přihlašovací údaje pro ACR.

Pro oddělení rolí a oprávnění nakonfigurujte instanční objekt jenkinse s oprávněními přispěvatele k vašemu registru ACR.

Vytvoření instančního objektu pro Jenkinse pro použití ACR

Nejprve pomocí příkazu az ad sp create-for-rbac vytvořte instanční objekt:

az ad sp create-for-rbac
{
  "appId": "626dd8ea-042d-4043-a8df-4ef56273670f",
  "displayName": "azure-cli-2018-09-28-22-19-34",
  "name": "http://azure-cli-2018-09-28-22-19-34",
  "password": "1ceb4df3-c567-4fb6-955e-f95ac9460297",
  "tenant": "72f988bf-86f1-41af-91ab-2d7cd011db48"
}

Poznamenejte si appId a password. Tyto hodnoty se používají v následujících krocích ke konfiguraci prostředku přihlašovacích údajů v Jenkinsi.

Získejte ID prostředku registru ACR pomocí příkazu az acr show a uložte ho jako proměnnou.

ACR_ID=$(az acr show --resource-group <Resource_Group> --name <acrLoginServer> --query "id" --output tsv)

Nahraďte a <acrLoginServer> nahraďte <Resource_Group> odpovídajícími hodnotami.

Vytvořte přiřazení role pro přiřazení práv přispěvatele instančního objektu k registru ACR.

az role assignment create --assignee <appID> --role Contributor --scope $ACR_ID

Nahraďte <appId> hodnotou zadanou ve výstupu příkazu, který se používá k vytvoření instančního objektu.

Vytvoření prostředku přihlašovacích údajů v Jenkinsi pro instanční objekt ACR

S přiřazením role vytvořeným v Azure teď uložte přihlašovací údaje ACR do objektu přihlašovacích údajů Jenkinse. Na tyto přihlašovací údaje se odkazuje během úlohy sestavení Jenkinse.

Zpět na levé straně portálu Jenkins vyberte Spravovat přihlašovací údaje Jenkinse Spravovat přihlašovací údaje>jenkinse>>Globální přihlašovací údaje úložiště Jenkinse (neomezené)>Přidání přihlašovacích údajů

Ujistěte se, že je druh přihlašovacích údajů uživatelské jméno s heslem , a zadejte následující položky:

  • Uživatelské jménoID aplikace instančního objektu vytvořeného pro ověřování pomocí vašeho registru ACR.
  • Heslo – heslo instančního objektu vytvořeného pro ověřování pomocí vašeho registru ACR.
  • ID – identifikátor přihlašovacích údajů, jako je acr-credentials

Po dokončení vypadá formulář přihlašovacích údajů jako v následujícím příkladu:

Create a Jenkins credential object with the service principal information

Vyberte OK a vraťte se na portál Jenkins.

Vytvoření projektu Jenkinse

Na domovské stránce portálu Jenkins vyberte na levé straně novou položku :

  1. Jako název úlohy zadejte azure-vote . Zvolte Projekt Freestyle a pak vyberte OK.

  2. V části Obecné vyberte projekt GitHub a zadejte adresu URL rozvětvovaného úložiště, například https://github.com/<váš-github-account>/azure-voting-app-redis.

  3. V části Správa zdrojového kódu vyberte Git, zadejte adresu URL rozvětvovaného úložiště.git, například https://github.com/<váš-github-account>/azure-voting-app-redis.git.

  4. V části Triggery sestavení vyberte trigger háku GitHubu pro dotazování GITscm.

  5. V části Prostředí sestavení vyberte Použít tajné texty nebo soubory.

  6. V části Vazby vyberte Přidat>uživatelské jméno a heslo (oddělené).

    • Zadejte ACR_ID proměnnou uživatelského jména a ACR_PASSWORD proměnnou hesla.

      Jenkins bindings

  7. Zvolte přidání kroku sestavení typu Execute shell a použijte následující text. Tento skript sestaví novou image kontejneru a nasdílí ji do registru ACR.

    # Build new image and push to ACR.
    WEB_IMAGE_NAME="${ACR_LOGINSERVER}/azure-vote-front:kube${BUILD_NUMBER}"
    docker build -t $WEB_IMAGE_NAME ./azure-vote
    docker login ${ACR_LOGINSERVER} -u ${ACR_ID} -p ${ACR_PASSWORD}
    docker push $WEB_IMAGE_NAME
    
  8. Přidejte další krok sestavení typu Execute shell a použijte následující text. Tento skript aktualizuje nasazení aplikace v AKS novou imagí kontejneru z ACR.

    # Update kubernetes deployment with new image.
    WEB_IMAGE_NAME="${ACR_LOGINSERVER}/azure-vote-front:kube${BUILD_NUMBER}"
    kubectl set image deployment/azure-vote-front azure-vote-front=$WEB_IMAGE_NAME
    
  9. Po dokončení klikněte na Uložit.

Otestování sestavení Jenkinse

Před automatizací úlohy na základě potvrzení GitHubu ručně otestujte sestavení Jenkinse.

Tento build ověří, jestli je úloha správně nakonfigurovaná. Potvrdí, že je zaveden správný ověřovací soubor Kubernetes a že ověřování pro ACR funguje.

V levé nabídce projektu vyberte Sestavit hned.

Jenkins test build

První sestavení je delší, protože vrstvy image Dockeru se přetáhnou na server Jenkinse.

Sestavení dělají následující úlohy:

  1. Klonuje úložiště GitHub.
  2. Vytvoří novou image kontejneru.
  3. Nasdílí image kontejneru do registru ACR.
  4. Aktualizace image používanou nasazením AKS

Vzhledem k tomu, že v kódu aplikace nebyly provedeny žádné změny, webové uživatelské rozhraní se nezmění.

Po dokončení úlohy sestavení vyberte sestavení č. 1 v historii sestavení. Vyberte Výstup konzoly a zobrazte výstup z procesu sestavení. Poslední řádek by měl indikovat úspěšné sestavení.

Vytvoření webhooku GitHubu

Po úspěšném ručním sestavení se teď gitHub integruje do sestavení Jenkinse. Pomocí webhooku spusťte úlohu sestavení Jenkinse pokaždé, když se kód potvrdí do GitHubu.

Pokud chcete vytvořit webhook GitHubu, proveďte následující kroky:

  1. Ve webovém prohlížeči přejděte do rozvětvovaného úložiště GitHub.

  2. Vyberte Nastavení a pak na levé straně vyberte Webhooky.

  3. Zvolte přidat webhook. Jako adresu URL datové části zadejte http://<publicIp:8080>/github-webhook/, kde <publicIp> je IP adresa serveru Jenkins. Nezapomeňte uvést koncové /údaje . U typu obsahu ponechte výchozí hodnoty a aktivujte je u nabízených událostí.

  4. Vyberte Přidat webhook.

    Create a GitHub webhook for Jenkins

Otestování kompletního kanálu CI/CD

Teď můžete otestovat celý kanál CI/CD. Když nasdílíte potvrzení kódu do GitHubu, dojde k následujícím krokům:

  1. Webhook GitHubu upozorní Jenkinse.
  2. Jenkins spustí úlohu sestavení a stáhne nejnovější potvrzení kódu z GitHubu.
  3. Sestavení Dockeru se začne používat aktualizovaný kód a nová image kontejneru je označená číslem nejnovějšího buildu.
  4. Tato nová image kontejneru se odešle do služby Azure Container Registry.
  5. Vaše aplikace spuštěná ve službě Azure Kubernetes Service aktualizuje nejnovější image ze služby Azure Container Registry.

Na vývojovém počítači otevřete klonovanou aplikaci pomocí editoru kódu. V adresáři /azure-vote/azure-vote otevřete soubor s názvem config_file.cfg. Aktualizujte hodnoty hlasů v tomto souboru na něco jiného než kočky a psy, jak je znázorněno v následujícím příkladu:

# UI Configurations
TITLE = 'Azure Voting App'
VOTE1VALUE = 'Blue'
VOTE2VALUE = 'Purple'
SHOWHOST = 'false'

Po aktualizaci uložte soubor, potvrďte změny a nasdílejte je do forku úložiště GitHub. Webhook GitHubu aktivuje novou úlohu sestavení v Jenkinsi. Na webovém řídicím panelu Jenkinse monitorujte proces sestavení. Načtení nejnovějšího kódu, vytvoření a nasdílení aktualizované image a nasazení aktualizované aplikace v AKS trvá několik sekund.

Po dokončení sestavení aktualizujte webový prohlížeč ukázkové aplikace Azure Vote. Zobrazí se změny, jak je znázorněno v následujícím příkladu:

Sample Azure vote in AKS updated by the Jenkins build job

Další kroky