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 v1
verze . 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
.
$ kubectl get service azure-vote-front --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.
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:
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@<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 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.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
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 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éno – ID 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:
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 :
Jako název úlohy zadejte azure-vote . Zvolte Projekt Freestyle a pak vyberte OK.
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.
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.V části Triggery sestavení vyberte trigger háku GitHubu pro dotazování GITscm.
V části Prostředí sestavení vyberte Použít tajné texty nebo soubory.
V části Vazby vyberte Přidat>uživatelské jméno a heslo (oddělené).
Zadejte
ACR_ID
proměnnou uživatelského jména aACR_PASSWORD
proměnnou hesla.
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
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
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.
První sestavení je delší, protože vrstvy image Dockeru se přetáhnou na server Jenkinse.
Sestavení dělají následující úlohy:
- Klonuje úložiště GitHub.
- Vytvoří novou image kontejneru.
- Nasdílí image kontejneru do registru ACR.
- Aktualizuje 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:
Ve webovém prohlížeči přejděte do rozvětvovaného úložiště GitHub.
Vyberte Nastavení a pak vyberte Webhooky na levé straně.
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í.Vyberte Přidat webhook.
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:
- Webhook GitHubu upozorní Jenkinse.
- Jenkins spustí úlohu sestavení a stáhne nejnovější potvrzení kódu z GitHubu.
- Sestavení Dockeru se začne používat aktualizovaný kód a nová image kontejneru je označená číslem nejnovějšího buildu.
- Tato nová image kontejneru se odešle do služby Azure Container Registry.
- 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: