Självstudier: Automatisera containeravbildningar 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 på en Git-lagringsplats. Git-kontexter som stöds för ACR Tasks omfattar offentliga eller privata GitHub- eller Azure-lagringsplatser.

Anteckning

ACR Tasks stöder för närvarande inte utlösare för inchecknings- eller pull-begäranden i GitHub Enterprise-lagringsplatser.

I den här självstudien skapar och push-överför din ACR-uppgift en enda containeravbildning som anges i en Dockerfile när du checkar in källkoden på 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öra ett containerarbetsflöde i flera steg i molnet när du checkar in källkod. En översikt över ACR Tasks finns i Automatisera korrigering av operativsystem och ramverk med ACR Tasks

I de här självstudierna har du

  • 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:

  1. Gå till sidan där personliga åtkomsttokens skapas i GitHub på https://github.com/settings/tokens/new

  2. Ange en kort beskrivning för din token, till exempel ”ACR Tasks Demo”

  3. Välj omfång för ACR för att få åtkomst till lagringsplatsen. Om du vill komma åt en offentlig lagringsplats som i den här självstudien aktiverar du lagringsplatsens status och public_repo

    Skärmbild av sidan Personlig åtkomsttoken i GitHub

    Anteckning

    Om du vill generera en PAT för åtkomst till en privat lagringsplats väljer du omfånget för fullständig lagringsplatskontroll .

  4. Välj knappen Generera token (du kan behöva bekräfta lösenordet)

  5. 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)

    Skärmbild av genererad personlig åtkomsttoken i GitHub

Förbereda din miljö för Azure CLI

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 oavsett var det 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 .

Anteckning

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 checkas in till huvudgrenen i lagringsplatsen som anges av --context, och 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.