Självstudier: Automatisera containeravbildningar i molnet när du checkar in källkod

Förutom en snabbuppgift stöderACR-uppgifter automatiserade Docker-containeravbildningsbyggen i molnet när du genomför källkod till en Git-lagringsplats. Git-kontexter som stöds för ACR-uppgifter inkluderar offentliga eller privata GitHub- eller Azure-lagringsplatsen.

Anteckning

För närvarande ACR-uppgifter inte utlösare för genomförande eller pull-begäran i GitHub Enterprise-lagringsplatsen.

I den här självstudien skapar och pushar din ACR-uppgift en enskild containeravbildning som anges i en Dockerfile när du genomför 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-skicka och testa flera containrar vid kodöverföring finns i Självstudie: Köraett containerarbetsflöde i flera steg i molnet när du genomför källkoden . En översikt över ACR-uppgifter finns i Automatisera korrigering av operativsystem och ramverk med ACR-uppgifter

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

Om du vill utlösa en uppgift för en commit till en Git-lagringsplats ACR-uppgifter 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. För att få åtkomst till en offentlig lagringsplatsen som i den här självstudien, under lagringsplatsen, aktiverar du repo: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 lagringsplatsen väljer du omfånget för fullständig lagringsplatsens kontroll.

  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

  • Använd bash-miljön i Azure Cloud Shell.

    Starta Cloud Shell i ett nytt fönster

  • Om du vill kan du i stället installera Azure CLI för att köra CLI-referenskommandon.

    • 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. Fler inloggningsalternativ finns i Logga in med Azure CLI.

    • När du uppmanas till det installerar du Azure CLI-tillägg vid första användning. 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 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:

az acr task create \
    --registry $ACR_NAME \
    --name taskhelloworld \
    --image helloworld:{{.Run.ID}} \
    --context https://github.com/$GIT_USER/acr-build-helloworld-node.git#main \
    --file Dockerfile \
    --git-access-token $GIT_PAT

Den här uppgiften anger att varje gång kod har utförts till huvudgrenen i lagringsplatsen som anges av skapar ACR-uppgifter containeravbildningen från koden i --context 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.