Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Viktigt!
Många Azure-tjänster har Jenkins-plugin-program, men de flesta av dessa plugin-program avslutade supporten från och med den 29 februari 2024. Azure CLI är det för närvarande rekommenderade sättet att integrera Jenkins med Azure-tjänster. Mer information finns i artikeln Jenkins-plugin-program för Azure.
Om du vill automatisera bygg- och testfasen för programutveckling kan du använda en CI/CD-pipeline (continuous integration and deployment). I den här självstudien skapar du en CI/CD-pipeline på en virtuell Azure-dator, inklusive hur du:
- Skapa en virtuell Jenkins-dator
- Installera och konfigurera Jenkins
- Skapa webhook-integrering mellan GitHub och Jenkins
- Skapa och utlösa Jenkins-byggjobb från GitHub-incheckningar
- Skapa en Docker-avbildning för din app
- Kontrollera att GitHub-commits skapar en ny Docker-avbildning och uppdaterar den körande appen.
I den här självstudien används CLI i Azure Cloud Shell, som ständigt uppdateras till den senaste versionen. Öppna Cloud Shell genom att välja Prova längst upp i alla kodblock.
Om du väljer att installera och använda CLI:t lokalt för den här självstudien måste du köra Azure CLI version 2.0.30 eller senare. Kör az --version
för att hitta versionen. Om du behöver installera eller uppgradera, se Installera Azure CLI.
Skapa Jenkins-instans
I en tidigare självstudie om Hur du anpassar en virtuell Linux-dator vid första starten har du lärt dig hur du automatiserar anpassningen av virtuella datorer med cloud-init. I den här självstudien används en cloud-init-fil för att installera Jenkins och Docker på en virtuell dator. Jenkins är en populär automationsserver med öppen källkod som integreras sömlöst med Azure för att möjliggöra kontinuerlig integrering (CI) och kontinuerlig leverans (CD). För fler handledningar om hur du använder Jenkins, se Jenkins i Azure-hubben.
I det aktuella gränssnittet skapar du en fil med namnet cloud-init-jenkins.txt och klistrar in följande konfiguration. Skapa till exempel inte filen i Cloud Shell på din lokala dator. Ange sensible-editor cloud-init-jenkins.txt
för att skapa filen och se en lista över tillgängliga redigerare. Se till att hela cloud-init-filen kopieras korrekt, särskilt den första raden:
#cloud-config
package_upgrade: true
write_files:
- path: /etc/systemd/system/docker.service.d/docker.conf
content: |
[Service]
ExecStart=
ExecStart=/usr/bin/dockerd
- path: /etc/docker/daemon.json
content: |
{
"hosts": ["fd://","tcp://127.0.0.1:2375"]
}
runcmd:
- apt install openjdk-8-jre-headless -y
- wget -q -O - https://pkg.jenkins.io/debian/jenkins-ci.org.key | sudo apt-key add -
- sh -c 'echo deb https://pkg.jenkins.io/debian-stable binary/ > /etc/apt/sources.list.d/jenkins.list'
- apt-get update && apt-get install jenkins -y
- curl -sSL https://get.docker.com/ | sh
- usermod -aG docker azureuser
- usermod -aG docker jenkins
- service jenkins restart
Innan du kan skapa en virtuell dator skapar du en resursgrupp med az group create. I följande exempel skapas en resursgrupp med namnet myResourceGroupJenkins på platsen eastus :
az group create --name myResourceGroupJenkins --location eastus
Skapa nu en virtuell dator med az vm create. Använd parametern --custom-data
för att skicka in din cloud-init-konfigurationsfil. Ange den fullständiga sökvägen till cloud-init-jenkins.txt om du sparade filen utanför den aktuella arbetskatalogen.
az vm create --resource-group myResourceGroupJenkins \
--name myVM \
--image UbuntuLTS \
--admin-username azureuser \
--generate-ssh-keys \
--custom-data cloud-init-jenkins.txt
Det tar några minuter innan den virtuella datorn skapas och konfigureras.
Om du vill tillåta att webbtrafik når den virtuella datorn använder du az vm open-port för att öppna port 8080 för Jenkins-trafik och port 1337 för den Node.js app som används för att köra en exempelapp:
az vm open-port --resource-group myResourceGroupJenkins --name myVM --port 8080 --priority 1001
az vm open-port --resource-group myResourceGroupJenkins --name myVM --port 1337 --priority 1002
Konfigurera Jenkins
Hämta den offentliga IP-adressen för den virtuella datorn för att få åtkomst till Jenkins-instansen:
az vm show --resource-group myResourceGroupJenkins --name myVM -d --query [publicIps] --o tsv
Av säkerhetsskäl måste du ange det första administratörslösenordet som lagras i en textfil på den virtuella datorn för att starta Jenkins-installationen. Använd den offentliga IP-adress som erhölls i föregående steg till SSH till den virtuella datorn:
ssh azureuser@<publicIps>
Kontrollera att Jenkins körs med kommandot service
:
$ service jenkins status
● jenkins.service - LSB: Start Jenkins at boot time
Loaded: loaded (/etc/init.d/jenkins; generated)
Active: active (exited) since Tue 2019-02-12 16:16:11 UTC; 55s ago
Docs: man:systemd-sysv-generator(8)
Tasks: 0 (limit: 4103)
CGroup: /system.slice/jenkins.service
Feb 12 16:16:10 myVM systemd[1]: Starting LSB: Start Jenkins at boot time...
...
Visa initialAdminPassword
för din Jenkins-installation och kopiera den:
sudo cat /var/lib/jenkins/secrets/initialAdminPassword
Om filen inte är tillgänglig ännu väntar du några minuter till för att cloud-init ska slutföra Jenkins- och Docker-installationen.
Öppna nu en webbläsare och gå till http://<publicIps>:8080
. Slutför den första Jenkins-installationen på följande sätt:
- Välj Välj plugin-program som ska installeras
- Sök efter GitHub i textrutan överst. Markera kryssrutan för GitHub och välj sedan Installera
- Skapa den första administratörsanvändaren. Ange ett användarnamn, till exempel administratör, och ange sedan ditt eget säkra lösenord. Skriv slutligen ett fullständigt namn och en e-postadress.
- Välj Spara och slutför
- När Jenkins är klar väljer du Börja använda Jenkins
- Om webbläsaren visar en tom sida när du börjar använda Jenkins startar du om Jenkins-tjänsten. Från SSH-sessionen skriver du
sudo service jenkins restart
och uppdaterar sedan webbläsaren.
- Om webbläsaren visar en tom sida när du börjar använda Jenkins startar du om Jenkins-tjänsten. Från SSH-sessionen skriver du
- Om det behövs loggar du in på Jenkins med det användarnamn och lösenord som du skapade.
Skapa GitHub webhook
Om du vill konfigurera integreringen med GitHub öppnar du exempelappenNode.js Hello World från Lagringsplatsen för Azure-exempel. Om du vill förgrena lagringsplatsen till ditt eget GitHub-konto väljer du knappen Förgrening i det övre högra hörnet.
Skapa en webhook i förgreningen som du skapade:
- Välj Inställningar och välj sedan Webhooks till vänster.
- Välj Lägg till webhook och ange sedan Jenkins i filterrutan.
- För payload-URL:en anger du
http://<publicIps>:8080/github-webhook/
. Se till att du inkluderar den eftersläpande / - För Innehållstyp väljer du program/x-www-form-urlencoded.
- För Vilka händelser vill du utlösa den här webhooken? väljer du Bara push-händelsen.
- Ställ Aktiv till markerat.
- Klicka på Lägg till webhook.
Skapa Jenkins-jobb
Om du vill att Jenkins ska svara på en händelse i GitHub, till exempel att checka in kod, skapar du ett Jenkins-jobb. Använd URL:erna för din egen GitHub-förgrening.
På Jenkins-webbplatsen väljer du Skapa nya jobb på startsidan:
- Ange HelloWorld som jobbnamn. Välj Freestyle-projekt och välj sedan OK.
- Under avsnittet Allmänt väljer du GitHub-projekt och anger din förgrenade lagringsplats-URL, till exempel
https://github.com/cynthn/nodejs-docs-hello-world
- Under avsnittet Källkodshantering väljer du Git, anger din förgrenade lagringsplatss .git-URL , till exempel
https://github.com/cynthn/nodejs-docs-hello-world.git
- Under avsnittet Skapa utlösare väljer du GitHub-krokutlösare för GITscm-avsökning.
- Under avsnittet Skapa väljer du Lägg till byggsteg. Välj Kör gränssnitt och ange
echo "Test"
sedan i kommandofönstret. - Välj Spara längst ned i jobbfönstret.
Testa GitHub-integrering
Om du vill testa GitHub-integreringen med Jenkins genomför du en ändring i din förgrening.
Tillbaka i GitHub-webbgränssnittet väljer du din förgrenade lagringsplats och väljer sedan filenindex.js . Välj pennikonen för att redigera den här filen så att rad 6 läser:
response.end("Hello World!");
Om du vill checka in ändringarna väljer du knappen Checka in ändringar längst ned.
I Jenkins startar en ny version i avsnittet Bygghistorik i det nedre vänstra hörnet av din jobbsida. Välj länken för versionsnummer och välj Konsolutdata till vänster. Du kan visa de steg som Jenkins vidtar när koden hämtas från GitHub och byggåtgärden matar ut meddelandet Test
till konsolen. Varje gång en incheckning görs i GitHub kontaktar webhooken Jenkins och utlöser en ny version på det här sättet.
Definiera Docker build-avbildning
Om du vill se Node.js appen körs baserat på dina GitHub-incheckningar kan du skapa en Docker-avbildning för att köra appen. Avbildningen skapas från en Dockerfile som definierar hur du konfigurerar containern som kör appen.
Från SSH-anslutningen till din VM byter du till katalogen för Jenkins arbetsyta, som har namnet efter jobbet du skapade i ett tidigare steg. I det här exemplet hette det HelloWorld.
cd /var/lib/jenkins/workspace/HelloWorld
Skapa en fil i arbetsytans katalog med sudo sensible-editor Dockerfile
och klistra in följande innehåll. Kontrollera att hela Dockerfile kopieras korrekt, särskilt den första raden:
FROM node:alpine
EXPOSE 1337
WORKDIR /var/www
COPY package.json /var/www/
RUN npm install
COPY index.js /var/www/
Den här Dockerfilen använder basavbildningen Node.js med Alpine Linux, exponerar port 1337 som Hello World-appen körs på, kopierar appfilerna och initierar den.
Skapa Jenkins-byggregler
I ett tidigare steg skapade du en grundläggande Jenkins-byggregel som matar ut ett meddelande till konsolen. Låt oss skapa byggsteget för att använda vår Dockerfile och köra appen.
I Jenkins-instansen väljer du det jobb som du skapade i ett tidigare steg. Välj Konfigurera till vänster och rulla ned till avsnittet Skapa :
Ta bort ditt befintliga
echo "Test"
byggsteg. Välj det röda korset i det övre högra hörnet i den befintliga byggstegsrutan.Välj Lägg till byggsteg och välj sedan Kör gränssnitt
I rutan Kommando anger du följande Docker-kommandon och väljer sedan Spara:
docker build --tag helloworld:$BUILD_NUMBER . docker stop helloworld && docker rm helloworld docker run --name helloworld -p 1337:1337 helloworld:$BUILD_NUMBER node /var/www/index.js &
Docker-byggstegen skapar en avbildning och taggar den med Jenkins-versionsnumret så att du kan underhålla en historik över avbildningar. Alla befintliga containrar som kör appen stoppas och tas sedan bort. En ny container startas sedan med bilden och kör din Node.js-app baserat på de senaste commits i GitHub.
Testa din pipeline
Om du vill se hela pipelinen i praktiken redigerar du filenindex.js i din förgrenade GitHub-lagringsplats igen och väljer Genomför ändring. Ett nytt jobb startar i Jenkins baserat på webhooken för GitHub. Det tar några sekunder att skapa Docker-avbildningen och starta appen i en ny container.
Om det behövs hämtar du den offentliga IP-adressen för den virtuella datorn igen:
az vm show --resource-group myResourceGroupJenkins --name myVM -d --query [publicIps] --o tsv
Öppna en webbläsare och ange http://<publicIps>:1337
. Din Node.js-app visar de senaste commit'arna i din GitHub-förgrening.
Gör nu en ny redigering av index.js-filen i GitHub och genomför ändringen. Vänta några sekunder tills jobbet har slutförts i Jenkins och uppdatera sedan webbläsaren för att se den uppdaterade versionen av appen som körs i en ny container enligt följande:
Nästa steg
I den här guiden konfigurerade du GitHub för att köra ett Jenkins-byggjobb vid varje kodändring och sedan distribuera en Docker-container för att testa din app. Du har lärt dig att:
- Skapa en virtuell Jenkins-dator
- Installera och konfigurera Jenkins
- Skapa webhook-integrering mellan GitHub och Jenkins
- Skapa och utlösa Jenkins-byggjobb från GitHub-incheckningar
- Skapa en Docker-avbildning för din app
- Kontrollera att GitHub-commits skapar en ny Docker-avbildning och uppdaterar den körande appen.
Gå vidare till nästa självstudie för att lära dig mer om hur du integrerar Jenkins med Azure DevOps Services.