Zelfstudie: Implementeren van GitHub naar Azure Kubernetes Service met behulp van Jenkins
Belangrijk
Veel Azure-services hebben Jenkins-in plug-ins. Sommige van deze in plug-ins worden vanaf 29 februari 2024 niet meer ondersteund. Azure CLI is de momenteel aanbevolen manier om Jenkins te integreren met Azure-services. Raadpleeg het artikel Jenkins-in plug-ins voor Azure voor meer informatie.
In deze zelfstudie wordt een voorbeeld-app geïmplementeerd van GitHub naar een AKS-cluster (Azure Kubernetes Service) door continue integratie (CI) en continue implementatie (CD) in Jenkins in te stellen.
In deze zelfstudie voert u de volgende taken uit:
- Een Azure Vote-voorbeeld-app implementeren in een AKS-cluster.
- Maak een jenkins-basisproject.
- Referenties instellen voor Jenkins om te communiceren met ACR.
- Maak een Jenkins-build-taak en GitHub webhook voor geautomatiseerde builds.
- Test de CI/CD-pijplijn om een toepassing in AKS bij te werken op basis van GitHub code-commits.
Vereisten
Voor het voltooien van deze zelfstudie hebt u de volgende items nodig:
Basiskennis van Kubernetes-, Git-, CI/CD- en containerafbeeldingen
Een AKS-cluster en geconfigureerd met de AKS-clusterreferenties.
Een Azure Container Registry register (ACR),de naam van de ACR-aanmeldingsserver en het AKS-cluster dat is geconfigureerd voor verificatie met het ACR-register.
Een Jenkins-controller die is geïmplementeerd op een virtuele Azure-machine.
De Azure CLI versie 2.0.46 of hoger is geïnstalleerd en geconfigureerd. Voer
az --versionuit om de versie te bekijken. Zie Azure CLI installeren als u de CLI wilt installeren of een upgrade wilt uitvoeren.Docker geïnstalleerd op uw ontwikkelsysteem
Een GitHub-account, GitHub persoonlijk toegangskenen een Git-client geïnstalleerd op uw ontwikkelsysteem
Als u uw eigen Jenkins-exemplaar levert in plaats van deze voorbeeldmanuscript om Jenkins te implementeren, moet Docker zijn geïnstalleerd en geconfigureerd en kubectl.
Uw app voorbereiden
In dit artikel gebruikt u een Azure Vote-voorbeeldtoepassing die een webinterface en Redis bevat voor tijdelijke gegevensopslag.
Voordat u Jenkins en AKS integreert voor geautomatiseerde implementaties, moet u eerst de Azure Vote-toepassing handmatig voorbereiden en implementeren in uw AKS-cluster. Met deze handmatige implementatie kunt u de toepassing in actie zien.
Notitie
De Azure Vote-voorbeeldtoepassing maakt gebruik van een Linux-pod die is gepland om te worden uitgevoerd op een Linux-knooppunt. De stroom die in dit artikel wordt beschreven, werkt ook voor een Windows Server-pod die is gepland op een Windows Server-knooppunt.
Fork de volgende GitHub opslagplaats voor de voorbeeldtoepassing - https://github.com/Azure-Samples/azure-voting-app-redis . Om de opslagplaats naar uw eigen GitHub-account te vertakken, selecteert u de knop Fork in de rechterbovenhoek.
Kloon de fork naar uw ontwikkelsysteem. Zorg ervoor dat u de URL van uw fork gebruikt bij het klonen van deze repo:
git clone https://github.com/<your-github-account>/azure-voting-app-redis.git
Wijzig in de map van de gekloonde fork:
cd azure-voting-app-redis
Als u de container-afbeeldingen wilt maken die nodig zijn voor de voorbeeldtoepassing, gebruikt u het bestand docker-compose.yaml met :
docker-compose up -d
De vereiste basisafbeeldingen worden getrokken en de toepassingscontainers worden gebouwd. U kunt vervolgens de opdracht docker images gebruiken om de gemaakte afbeelding te bekijken. Er zijn drie installatiekopieën gedownload of gemaakt. De azure-vote-front-installatiekopie bevat de toepassing en gebruikt de nginx-flask-installatiekopie als basis. De redis afbeelding wordt gebruikt om een Redis-exemplaar te starten:
$ 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
Meld u aan bij uw Azure-containerregister.
az acr login -n <acrLoginServer>
Vervang <acrLoginServer> door uw ACR-aanmeldingsserver.
Gebruik de opdracht docker tag om de afbeelding te taggen met de naam van de ACR-aanmeldingsserver en een versienummer van . Gebruik uw eigen <acrLoginServer> naam die u in de vorige stap hebt verkregen:
docker tag azure-vote-front <acrLoginServer>/azure-vote-front:v1
Push ten slotte de azure-vote-front-afbeelding naar uw ACR-register. Vervang opnieuw <acrLoginServer> door de naam van de aanmeldingsserver van uw eigen ACR-register, zoals myacrregistry.azurecr.io :
docker push <acrLoginServer>/azure-vote-front:v1
De voorbeeldtoepassing implementeren in AKS
Als u de voorbeeldtoepassing wilt implementeren in uw AKS-cluster, kunt u het Kubernetes-manifestbestand gebruiken in de hoofdmap van de Opslagplaats voor Azure Vote. Open het azure-vote-all-in-one-redis.yaml manifestbestand met een editor zoals vi . Vervang microsoft door de naam van de ACR-aanmeldingsserver. Deze waarde vindt u op regel 60 van het manifestbestand:
containers:
- name: azure-vote-front
image: azuredocs/azure-vote-front
Gebruik vervolgens de opdracht kubectl apply om de toepassing te implementeren in uw AKS-cluster:
kubectl apply -f azure-vote-all-in-one-redis.yaml
Er wordt een Kubernetes load balancer-service gemaakt om de toepassing op internet weer te geven. Dit proces kan enkele minuten duren. Als u de voortgang van de implementatie load balancer, gebruikt u de opdracht kubectl get service met het argument . Zodra het EXTERNAL-IP-adres is gewijzigd van In behandeling in een IP-adres,gebruikt u om het kubectl-watchproces te stoppen.
$ 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
Als u de toepassing in actie wilt zien, opent u een webbrowser naar het externe IP-adres van uw service. De Azure Vote-toepassing wordt weergegeven, zoals wordt weergegeven in het volgende voorbeeld:

Jenkins Controller configureren
Pas de volgende wijzigingen toe om AKS-implementaties vanuit de Jenkins-controller in teschakelen:
Open poort 80 voor binnenkomende poort.
az vm open-port \
--resource-group <Resource_Group_name> \
--name <Jenkins_Controller_VM> \
--port 80 --priority 1020
Vervang <Resource_Group_name> en door de juiste <Jenkins_Controller_VM> waarden.
SSH in de Jenkins-controller
ssh azureuser@<PublicIPAddres>
Vervang <PublicIPAddress> door het IP-adres van de Jenkins-controller.
Aanmelden & bij AzCLI installeren
curl -L https://aka.ms/InstallAzureCli | bash
az login
Notitie
Volg deze instructies om AzCLI handmatig te installeren.
Docker installeren
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;
Kubectl installeren en Verbinding maken naar AKS
sudo az aks install-cli
sudo az aks get-credentials --resource-group <Resource_Group> --name <AKS_Name>
Vervang <Resource_Group> en door de juiste <AKS_Name> waarden.
Toegang configureren
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
Een Jenkins-omgevingsvariabele maken
Een Jenkins-omgevingsvariabele wordt gebruikt om de naam van de ACR-aanmeldingsserver op te geven. Er wordt naar deze variabele verwezen tijdens de Jenkins-build-taak. Voltooi de volgende stappen om deze omgevingsvariabele te maken:
Selecteer aan de linkerkant van de Jenkins-portal De Jenkins-configuratiesysteembeheren
Selecteer onder Globale eigenschappende optie Omgevingsvariabelen. Voeg een variabele toe met de naam
ACR_LOGINSERVERen de waarde van uw ACR-aanmeldingsserver.
Wanneer u klaar is, selecteert u Opslaan onderaan de pagina.
Een Jenkins-referentie voor ACR maken
Tijdens het CI/CD-proces bouwt Jenkins nieuwe containerafbeeldingen op basis van toepassingsupdates en moet deze vervolgens naar het ACR-register pushen.
Als u wilt dat Jenkins bijgewerkte containerafbeeldingen naar ACR pusht, moet u referenties voor ACR opgeven.
Voor scheiding van rollen en machtigingen configureert u een service-principal voor Jenkins met inzendermachtigingen voor uw ACR-register.
Een service-principal maken voor Jenkins om ACR te gebruiken
Maak eerst een service-principal met behulp van de opdracht az ad sp create-for-rbac:
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"
}
Noteer de appId en wachtwoord. Deze waarden worden in de volgende stappen gebruikt om de referentieresource in Jenkins te configureren.
Haal de resource-id van uw ACR-register op met de opdracht az acr show en sla deze op als een variabele.
ACR_ID=$(az acr show --resource-group <Resource_Group> --name <acrLoginServer> --query "id" --output tsv)
Vervang <Resource_Group> en door de juiste <acrLoginServer> waarden.
Maak een roltoewijzing om de inzendersrechten van de service-principal toe te wijzen aan het ACR-register.
az role assignment create --assignee <appID> --role Contributor --scope $ACR_ID
Vervang <appId> door de waarde die is opgegeven in de uitvoer van de pervious-opdracht om de service-principal te maken.
Een referentieresource maken in Jenkins voor de ACR-service-principal
Nu de roltoewijzing is gemaakt in Azure, moet u uw ACR-referenties opslaan in een Jenkins-referentieobject. Er wordt naar deze referenties verwezen tijdens de Jenkins-build-taak.
Terug aan de linkerkant van de Jenkins-portal selecteert u JenkinsBeheren Referenties beheren Globale referenties voor Jenkins Store(onbeperkt)Referenties toevoegen
Zorg ervoor dat het referentie-type Gebruikersnaam met wachtwoord is en voer de volgende items in:
- Gebruikersnaam: de appId van de service-principal die is gemaakt voor verificatie met uw ACR-register.
- Wachtwoord: het wachtwoord van de service-principal die is gemaakt voor verificatie met uw ACR-register.
- Id: referentie-id, zoals acr-credentials
Wanneer u klaar is, ziet het aanmeldingsformulier eruit zoals in het volgende voorbeeld:

Selecteer OK en ga terug naar de Jenkins-portal.
Een Jenkins-project maken
Selecteer op de startpagina van de Jenkins-portal Nieuw item aan de linkerkant:
Voer azure-vote in als taaknaam. Kies Freestyle-projecten selecteer vervolgens OK
Selecteer in de sectie Algemeen GitHub project en voer de URL van uw gevorkte opslagplaats in, zoals uw-github-account /azure-voting-app-redis
Selecteer in de sectie Broncodebeheer de optie Git,voer de URL van uw gevorkte opslagplaats in, zoals uw-github-account /azure-voting-app-redis.git
Selecteer in de sectie Triggers bouwen de optie GitHub voor GITscm-polling
Selecteer onder Build Environmentde optie Geheime teksten of bestanden gebruiken
Selecteer onder Bindingende optie Gebruikersnaamen wachtwoord toevoegen (gescheiden)
Voer
ACR_IDin voor deACR_IDenACR_PASSWORDvoor deACR_PASSWORD
Kies ervoor om een buildstap van het type Execute shell toe te voegen en gebruik de volgende tekst. Met dit script wordt een nieuwe containerafbeelding gemaakt en naar het ACR-register pusht.
# 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_NAMEVoeg nog een buildstap van het type Shell uitvoeren toe en gebruik de volgende tekst. Met dit script wordt de implementatie van de toepassing in AKS bijgewerkt met de nieuwe containerafbeelding van 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_NAMEKlik na het voltooide menu op Opslaan.
De Jenkins-build testen
Voordat u de taak automatiseert op basis van GitHub commits, moet u de Jenkins-build handmatig testen.
Deze build controleert of de taak correct is geconfigureerd. Het bevestigt dat het juiste Kubernetes-verificatiebestand is gemaakt en dat de verificatie voor ACR werkt.
Selecteer in het menu aan de linkerkant van het project de optie Nu bouwen.

De eerste build is langer omdat de Docker-afbeeldingslagen naar de Jenkins-server worden gehaald.
De builds voeren de volgende taken uit:
- Kloont de GitHub opslagplaats
- Een nieuwe containerafbeelding maken
- Pusht de container-afbeelding naar het ACR-register
- Werkt de installatie afbeelding bij die wordt gebruikt door de AKS-implementatie
Omdat er geen wijzigingen zijn aangebracht in de toepassingscode, blijft de webinterface ongewijzigd.
Zodra de build-taak is voltooid, selecteert u build 1 onder buildgeschiedenis. Selecteer Console-uitvoer en bekijk de uitvoer van het buildproces. De laatste regel moet een geslaagde build aangeven.
Een webhook GitHub maken
Nu de handmatige build is voltooid, integreert u GitHub in de Jenkins-build. Gebruik een webhook om de Jenkins-build-taak uit te voeren telkens als code wordt GitHub.
Voltooi de volgende GitHub om de webhook te maken:
Blader naar uw gevorkte GitHub in een webbrowser.
Selecteer Instellingen, selecteer daarna Webhooks aan de linkerkant.
Kies Webhook toevoegen. Voer bij Payload URLin, waarbij het
<publicIp>IP-adres van de Jenkins-server is. Zorg ervoor dat u de aan het volgende/bevat. Laat de andere standaardwaarden staan voor inhoudstype en om te activeren bij pushgebeurtenissen.Selecteer Webhook toevoegen.

De volledige CI/CD-pijplijn testen
U kunt nu de hele CI/CD-pijplijn testen. Wanneer u een code-commit naar GitHub pusht, vinden de volgende stappen uit:
- De GitHub webhook waarschuwt Jenkins.
- Jenkins start de build-taak en haalt de meest recente code-commit op uit GitHub.
- Een Docker-build wordt gestart met behulp van de bijgewerkte code en de nieuwe containerafbeelding wordt getagd met het meest recente buildnummer.
- Deze nieuwe containerafbeelding wordt naar de Azure Container Registry.
- Uw toepassing die wordt uitgevoerd op Azure Kubernetes Service updates met de nieuwste afbeelding van Azure Container Registry.
Open de gekloonde toepassing op uw ontwikkelmachine met een code-editor. Open onder de map /azure-vote/azure-vote het bestand met de naam config_file.cfg. Werk de stemwaarden in dit bestand bij naar iets anders dan katten en honden, zoals wordt weergegeven in het volgende voorbeeld:
# UI Configurations
TITLE = 'Azure Voting App'
VOTE1VALUE = 'Blue'
VOTE2VALUE = 'Purple'
SHOWHOST = 'false'
Wanneer het bestand is bijgewerkt, moet u het bestand opslaan, de wijzigingen doorgevoerd en naar uw fork van de GitHub pushen. De GitHub webhook activeert een nieuwe build-taak in Jenkins. Controleer het bouwproces in het Jenkins-webdashboard. Het duurt een paar seconden om de meest recente code op te halen, de bijgewerkte afbeelding te maken en te pushen en de bijgewerkte toepassing in AKS te implementeren.
Nadat de build is voltooid, vernieuwt u de webbrowser van de Azure Vote-voorbeeldtoepassing. Uw wijzigingen worden weergegeven, zoals wordt weergegeven in het volgende voorbeeld:
