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

Důležité

Zatímco mnoho služeb Azure má plug-iny pro Jenkins, většina z nich ukončí podporu k 29. únoru 2024. 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 pipeline CI/CD a aktualizujte aplikaci v AKS na základě commitů kódu na GitHubu.

Požadavky

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

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á Linuxový pod, který je určen k běhu na uzlu Linux. Tok popsaný v tomto článku funguje také pro pod na Windows Serveru, který je naplánovaný na uzlu Windows Server.

Vytvořte fork uvedeného ú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ě na vlastní účet GitHubu, vyberte tlačítko 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í obrazy jsou staženy a kontejnery aplikací jsou postaveny. Potom můžete k zobrazení vytvořené image použít příkaz docker images . Byly staženy nebo vytvořeny tři image. Image azure-vote-front obsahuje aplikaci a používá nginx-flask image jako základ. 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> vaším 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 odeslat image azure-vote-front do vašeho 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 .

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

Jakmile se adresa EXTERNÍ IP změní z čekající na IP adresu, použijte Control + C k zastavení procesu sledování kubectl.

NAME               TYPE           CLUSTER-IP    EXTERNAL-IP   PORT(S)        AGE

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:

Ukázková hlasovací aplikace Azure spuštěná v 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 <Resource_Group_name> a <Jenkins_Controller_VM> příslušnými hodnotami.

SSH do kontroleru Jenkinse

ssh azureuser@<PublicIPAddress>

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í k AKS

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

Nahraďte <Resource_Group> a <AKS_Name> příslušný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

V proměnné prostředí v Jenkinsu je uložen název přihlašovacího serveru ACR. Tato proměnná je používána během úlohy sestavení Jenkins. 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.

    Proměnné prostředí Jenkinse

  • 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 Jenkinsovi povolit posílání aktualizovaných obrazů kontejnerů 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í služebního principálu pro využití ACR s Jenkinsi

Nejprve pomocí příkazu az ad sp create-for-rbac vytvořte principál služby:

az ad sp create-for-rbac

Tento příkaz vytvoří výstup podobný následujícímu příkladu:

{
  "appId": "<app-ID>",
  "displayName": "azure-cli-2018-09-28-22-19-34",
  "name": "http://azure-cli-2018-09-28-22-19-34",
  "password": "<password>",
  "tenant": "<tenant-ID>"
}

Poznamenejte si ID aplikace a heslo. 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 zdroje registru ACR pomocí příkazu az acr show a uložte jej do proměnné.

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

Nahraďte <Resource_Group> a <acrLoginServer> příslušnými hodnotami.

Vytvořte přiřazení role, které přiřadí oprávnění principálu služby přispěvatele k registru ACR.

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

Nahraďte <appId> hodnotou zadanou ve výstupu předchozího příkazu použitého k vytvoření principálu služby.

Vytvořte prostředek přihlašovacích údajů v Jenkins pro hlavní službu 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.

Na levé straně portálu Jenkins vyberte Spravovat Jenkins>Spravovat přihlašovací údaje>Úložiště Jenkins>Globální přihlašovací údaje (neomezené)>Přidat přihlašovací údaje

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énoIdentifikátor aplikace servisního principála vytvořeného pro ověřování pomocí vašeho registru ACR.
  • Hesloheslo identifikačního prvku služby 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:

Vytvoření objektu přihlašovacích údajů Jenkinse s informacemi o instančním objektu

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 spouštěč webhooku GitHub 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_PASSWORDproměnnou hesla.

      Jenkins integrace

  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 s novou image 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.

Testovací sestavení Jenkinse

První sestavení trvá déle, protože vrstvy image Dockeru jsou staženy na server Jenkins.

Sestavení provádějí následující úlohy:

  1. Klonuje úložiště GitHub.
  2. Vytvoří novou image kontejneru.
  3. Přenese obraz kontejneru do registru ACR.
  4. Aktualizuje obraz využívaný při nasazení 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í Jenkins při každém potvrzení kódu na GitHub.

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 vyberte Webhooky na levé straně.

  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 / na konci. Ponechte ostatní výchozí hodnoty pro typ obsahu a aktivujte je u push událostí.

  4. Vyberte Přidat webhook.

    Vytvoření webhooku GitHubu pro Jenkinse

Otestování kompletního potrubí CI/CD

Nyní můžete otestovat celé CI/CD pipeline. 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. Proces sestavení Dockeru se spustí s aktualizovaným kódem a nový obraz kontejneru je oštítkován nejnovějším číslem 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:

Ukázkové hlasování Azure v AKS aktualizované pomocí úlohy sestavení ve službě Jenkins

Další kroky