Självstudie: Automatisera containeravbildningsversioner i molnet när du checkar in källkod
Förutom en snabb uppgift stöder ACR Tasks automatiserade Docker-containeravbildningsversioner i molnet när du checkar in källkod till en Git-lagringsplats. Git-kontexter som stöds för ACR-uppgifter omfattar offentliga eller privata GitHub- eller Azure-lagringsplatser.
Kommentar
För närvarande stöder inte ACR-uppgifter utlösare för inchecknings- eller pull-begäranden i GitHub Enterprise-lagringsplatser.
I den här självstudien skapar och push-överför ACR-uppgiften en enda containeravbildning som anges i en Dockerfile när du checkar in källkoden till en Git-lagringsplats. Information om hur du skapar en uppgift i flera steg som använder en YAML-fil för att definiera steg för att skapa, push-överföra och eventuellt testa flera containrar vid kodincheckning finns i Självstudie: Kör ett arbetsflöde för flera stegs container i molnet när du checkar in källkoden. En översikt över ACR-uppgifter finns i Automatisera os- och ramverkskorrigering med ACR-uppgifter
I den här självstudien:
- Skapa en uppgift
- Testa uppgiften
- Visa status för aktivitet
- Utlösa uppgiften med en kodincheckning
Självstudien förutsätter att du redan har slutfört stegen i den föregående självstudien. Om du inte har gjort det, slutför du stegen i avsnittet Krav i föregående självstudie innan du fortsätter.
Förutsättningar
Hämta exempelkod
Självstudien förutsätter att du redan har slutfört stegen i föregående självstudie, samt att du har förgrenat och klonat exempellagringsplatsen. Om du inte har gjort det, slutför du stegen i avsnittet Krav i föregående självstudie innan du fortsätter.
Containerregister
Du måste ha ett Azure-containerregister i din Azure-prenumeration för att kunna slutföra den här självstudien. Om du behöver ett register kan du gå till föregående självstudie eller Snabbstart: Skapa ett containerregister med hjälp av Azure CLI.
Skapa en personlig åtkomsttoken för GitHub
För att utlösa en uppgift vid en incheckning till en Git-lagringsplats behöver ACR Tasks en personlig åtkomsttoken (PAT) för att få åtkomst till lagringsplatsen. Om du inte redan har en PAT följer du dessa steg för att generera en i GitHub:
Gå till sidan där personliga åtkomsttokens skapas i GitHub på https://github.com/settings/tokens/new
Ange en kort beskrivning för din token, till exempel ”ACR Tasks Demo”
Välj omfång för ACR för att komma åt lagringsplatsen. Om du vill komma åt en offentlig lagringsplats som i den här självstudien, under lagringsplats, aktiverar du lagringsplats:status och public_repo
Kommentar
Om du vill generera en PAT för åtkomst till en privat lagringsplats väljer du omfånget för fullständig lagringsplatskontroll .
Välj knappen Generera token (du kan behöva bekräfta lösenordet)
Kopiera och spara din genererade token på en säker plats (du använder denna token när du definierar en uppgift i följande avsnitt)
Förbereda din miljö för Azure CLI
Använd Bash-miljön i Azure Cloud Shell. Mer information finns i Snabbstart för Bash i Azure Cloud Shell.
Om du föredrar att köra CLI-referenskommandon lokalt installerar du Azure CLI. Om du kör i Windows eller macOS kan du köra Azure CLI i en Docker-container. Mer information finns i Så här kör du Azure CLI i en Docker-container.
Om du använder en lokal installation loggar du in på Azure CLI med hjälp av kommandot az login. Slutför autentiseringsprocessen genom att följa stegen som visas i terminalen. Andra inloggningsalternativ finns i Logga in med Azure CLI.
När du uppmanas att installera Azure CLI-tillägget vid första användningen. Mer information om tillägg finns i Använda tillägg med Azure CLI.
Kör az version om du vill hitta versionen och de beroende bibliotek som är installerade. Om du vill uppgradera till den senaste versionen kör du az upgrade.
Skapa versionsuppgiften
Nu när du har slutfört de steg som krävs för att göra så att ACR Tasks kan läsa incheckningsstatus och skapa webhooks på en lagringsplats kan du skapa en uppgift som utlöser en containeravbildningsversion på incheckningar till lagringsplatsen.
Fyll först i de här gränssnittsmiljövariablerna med värden som är lämpliga för din miljö. Det här steget är inte obligatoriskt, men det gör det lite enklare att köra de flerradiga Azure CLI-kommandona i den här självstudien. Om du inte fyller i dessa miljövariabler måste du manuellt ersätta varje värde var det än visas i exempelkommandona.
ACR_NAME=<registry-name> # The name of your Azure container registry
GIT_USER=<github-username> # Your GitHub user account name
GIT_PAT=<personal-access-token> # The PAT you generated in the previous section
Skapa nu uppgiften genom att köra följande az acr task create-kommando .
Kommentar
Den Dockerfile som används i följande exempel beror på en offentlig bascontaineravbildning från Docker Hub. För att förbättra tillförlitligheten när du använder offentligt innehåll importerar och hanterar du avbildningen i ett privat Azure-containerregister och uppdaterar Dockerfile så att den använder din privat hanterade basavbildning. Läs mer om hur du arbetar med offentliga avbildningar.
az acr task create \
--registry $ACR_NAME \
--name taskhelloworld \
--image helloworld:{{.Run.ID}} \
--context https://github.com/$GIT_USER/acr-build-helloworld-node.git#master \
--file Dockerfile \
--git-access-token $GIT_PAT
Den här aktiviteten anger att all tidskod har checkats in till huvudgrenen i lagringsplatsen som anges av --context
, ACR Tasks skapar containeravbildningen från koden i den grenen. Den Dockerfile som anges av --file
från lagringsplatsroten används för att skapa avbildningen. Argumentet --image
anger ett parametriserat värde på {{.Run.ID}}
för versionsdelen av avbildningstaggen, vilket säkerställer att versionsavbildningen motsvarar en viss version och är unikt taggad.
Utdata från kommandot az acr task create liknar följande:
{
"agentConfiguration": {
"cpu": 2
},
"creationDate": "2010-11-19T22:42:32.972298+00:00",
"id": "/subscriptions/<Subscription ID>/resourceGroups/myregistry/providers/Microsoft.ContainerRegistry/registries/myregistry/tasks/taskhelloworld",
"location": "westcentralus",
"name": "taskhelloworld",
"platform": {
"architecture": "amd64",
"os": "Linux",
"variant": null
},
"provisioningState": "Succeeded",
"resourceGroup": "myregistry",
"status": "Enabled",
"step": {
"arguments": [],
"baseImageDependencies": null,
"contextPath": "https://github.com/gituser/acr-build-helloworld-node#main",
"dockerFilePath": "Dockerfile",
"imageNames": [
"helloworld:{{.Run.ID}}"
],
"isPushEnabled": true,
"noCache": false,
"type": "Docker"
},
"tags": null,
"timeout": 3600,
"trigger": {
"baseImageTrigger": {
"baseImageTriggerType": "Runtime",
"name": "defaultBaseimageTriggerName",
"status": "Enabled"
},
"sourceTriggers": [
{
"name": "defaultSourceTriggerName",
"sourceRepository": {
"branch": "main",
"repositoryUrl": "https://github.com/gituser/acr-build-helloworld-node#main",
"sourceControlAuthProperties": null,
"sourceControlType": "GitHub"
},
"sourceTriggerEvents": [
"commit"
],
"status": "Enabled"
}
]
},
"type": "Microsoft.ContainerRegistry/registries/tasks"
}
Testa versionsuppgiften
Nu har du en uppgift som definierar din version. Om du vill testa versionspipelinen utlöser du en version manuellt genom att köra kommandot az acr task run:
az acr task run --registry $ACR_NAME --name taskhelloworld
Som standard strömmar kommandot az acr task run
loggens utdata till konsolen när du kör kommandot. Utdata komprimeras för att visa viktiga steg.
2020/11/19 22:51:00 Using acb_vol_9ee1f28c-4fd4-43c8-a651-f0ed027bbf0e as the home volume
2020/11/19 22:51:00 Setting up Docker configuration...
2020/11/19 22:51:02 Successfully set up Docker configuration
2020/11/19 22:51:02 Logging in to registry: myregistry.azurecr.io
2020/11/19 22:51:03 Successfully logged in
2020/11/19 22:51:03 Executing step: build
2020/11/19 22:51:03 Obtaining source code and scanning for dependencies...
2020/11/19 22:51:05 Successfully obtained source code and scanned for dependencies
Sending build context to Docker daemon 23.04kB
Step 1/5 : FROM node:15-alpine
[...]
Step 5/5 : CMD ["node", "/src/server.js"]
---> Running in 7382eea2a56a
Removing intermediate container 7382eea2a56a
---> e33cd684027b
Successfully built e33cd684027b
Successfully tagged myregistry.azurecr.io/helloworld:da2
2020/11/19 22:51:11 Executing step: push
2020/11/19 22:51:11 Pushing image: myregistry.azurecr.io/helloworld:da2, attempt 1
The push refers to repository [myregistry.azurecr.io/helloworld]
4a853682c993: Preparing
[...]
4a853682c993: Pushed
[...]
da2: digest: sha256:c24e62fd848544a5a87f06ea60109dbef9624d03b1124bfe03e1d2c11fd62419 size: 1366
2020/11/19 22:51:21 Successfully pushed image: myregistry.azurecr.io/helloworld:da2
2020/11/19 22:51:21 Step id: build marked as successful (elapsed time in seconds: 7.198937)
2020/11/19 22:51:21 Populating digests for step id: build...
2020/11/19 22:51:22 Successfully populated digests for step id: build
2020/11/19 22:51:22 Step id: push marked as successful (elapsed time in seconds: 10.180456)
The following dependencies were found:
- image:
registry: myregistry.azurecr.io
repository: helloworld
tag: da2
digest: sha256:c24e62fd848544a5a87f06ea60109dbef9624d03b1124bfe03e1d2c11fd62419
runtime-dependency:
registry: registry.hub.docker.com
repository: library/node
tag: 9-alpine
digest: sha256:8dafc0968fb4d62834d9b826d85a8feecc69bd72cd51723c62c7db67c6dec6fa
git:
git-head-revision: 68cdf2a37cdae0873b8e2f1c4d80ca60541029bf
Run ID: ca6 was successful after 27s
Utlösa en version med en incheckning
Nu när du har testat denna uppgift genom att köra den manuellt utlöser du den automatiskt med en ändring i källkoden.
Kontrollera först att du är i den katalog som innehåller din lokala klon av lagringsplatsen:
cd acr-build-helloworld-node
Sedan kör du följande kommandon för att skapa, checka in och skicka en ny fil till din förgrening av lagringsplatsen på GitHub:
echo "Hello World!" > hello.txt
git add hello.txt
git commit -m "Testing ACR Tasks"
git push origin main
Du kan bli ombedd att ange dina GitHub-autentiseringsuppgifter när du kör kommandot git push
. Ange ditt GitHub-användarnamn och din personliga åtkomsttoken som du skapade tidigare för lösenordet.
Username for 'https://github.com': <github-username>
Password for 'https://githubuser@github.com': <personal-access-token>
När du har skickat en incheckning till lagringsplatsen startar den webhook som skapades av ACR Tasks en version i Azure Container Registry. Visa loggarna för den uppgift som körs för att kontrollera och övervaka versionsförloppet:
az acr task logs --registry $ACR_NAME
Utdata liknar följande och visar den uppgift som körs för närvarande (eller som kördes senast):
Showing logs of the last created run.
Run ID: ca7
[...]
Run ID: ca7 was successful after 38s
Versionslista
Om du vill se en lista över de uppgiftskörningar som ACR Tasks har slutfört för ditt register kör du kommandot az acr task list-runs:
az acr task list-runs --registry $ACR_NAME --output table
Utdatan från kommandot ska se ut ungefär som följande. De körningar som ACR Tasks har kört visas och ”Git Commit” (Git-incheckning) visas i kolumnen TRIGGER (Utlösare) för den senaste uppgiften:
RUN ID TASK PLATFORM STATUS TRIGGER STARTED DURATION
-------- -------------- ---------- --------- --------- -------------------- ----------
ca7 taskhelloworld linux Succeeded Commit 2020-11-19T22:54:34Z 00:00:29
ca6 taskhelloworld linux Succeeded Manual 2020-11-19T22:51:47Z 00:00:24
ca5 linux Succeeded Manual 2020-11-19T22:23:42Z 00:00:23
Nästa steg
I självstudien har du lärt dig att använda en uppgift för att utlösa containeravbildningsversioner i Azure automatiskt när du checkar in källkod på en Git-lagringsplats. Gå vidare till nästa självstudie för att lära dig att skapa uppgifter som utlöser versioner när en containeravbildnings basavbildning uppdateras.