Kurz: Automatizace sestavení imagí kontejneru v cloudu při potvrzení zdrojového kódu

Kromě rychlé úlohy podporuje ACR Tasks automatizovaná sestavení imagí kontejneru Dockeru v cloudu při potvrzení zdrojového kódu do úložiště Git. Mezi podporované kontexty Gitu pro úlohy ACR patří veřejný nebo privátní GitHub nebo Azure Repos.

Poznámka

ACR Tasks v současné době nepodporuje triggery potvrzení nebo žádosti o přijetí změn v úložištích GitHub Enterprise.

V tomto kurzu vaše úloha ACR sestaví a nasdílí jednu image kontejneru zadanou v souboru Dockerfile při potvrzení zdrojového kódu do úložiště Git. Pokud chcete vytvořit vícekrokovou úlohu , která pomocí souboru YAML definuje kroky pro sestavení, vložení a volitelné testování více kontejnerů při potvrzení kódu, přečtěte si kurz: Spuštění vícekrokového pracovního postupu kontejneru v cloudu při potvrzení zdrojového kódu. Přehled úloh ACR najdete v tématu Automatizace oprav operačního systému a architektury pomocí ACR Tasks.

V tomto kurzu:

  • Vytvoření úkolu
  • Test úlohy
  • Zobrazení stavu úkolů
  • Aktivace úlohy potvrzením kódu

Tento kurz předpokládá, že jste už dokončili kroky z předchozího kurzu. Pokud jste to ještě neudělali, dokončete před pokračováním kroky v části Požadavky předchozího kurzu.

Požadavky

Získání vzorového kódu

Tento kurz předpokládá, že jste už dokončili kroky v předchozím kurzu a že jste vytvořili fork ukázkového úložiště a naklonovali ho. Pokud jste to ještě neudělali, dokončete před pokračováním kroky v části Požadavky předchozího kurzu.

Registr kontejneru

Abyste mohli dokončit tento kurz, musíte mít ve svém předplatném registr kontejneru Azure. Pokud potřebujete registr, podívejte se na předchozí kurz nebo článek Rychlý start: Vytvoření registru kontejnerů pomocí Azure CLI.

Vytvoření tokenu PAT GitHubu

Aby služba ACR Tasks aktivovala úlohu při potvrzení do úložiště Git, potřebuje pro přístup k úložišti token PAT (Personal Access Token). Pokud ještě pat nemáte, vygenerujte ho na GitHubu následujícím postupem:

  1. Přejděte na stránku vytvoření tokenu PAT na GitHubu na adrese https://github.com/settings/tokens/new.

  2. Zadejte krátký popis tokenu, například „Ukázka služby ACR Tasks“.

  3. Vyberte obory pro přístup ACR k úložišti. Pokud chcete získat přístup k veřejnému úložišti jako v tomto kurzu, povolte v části úložiště repo:status a public_repo

    Snímek obrazovky se stránkou generování tokenu PAT na GitHubu

    Poznámka

    Pokud chcete vygenerovat PAT pro přístup k privátnímu úložišti, vyberte obor pro úplné řízení úložiště .

  4. Vyberte tlačítko Generate token (Vygenerovat token). (Můžete být vyzváni k potvrzení hesla.)

  5. Vygenerovaný token zkopírujte a uložte na bezpečné místo (tento token použijete při definici úlohy v následující části).

    Snímek obrazovky s vygenerovaným tokenem PAT na GitHubu

Příprava prostředí pro rozhraní příkazového řádku Azure

Vytvoření úlohy sestavení

Dokončili jste kroky potřebné k tomu, abyste službě ACR Tasks povolili číst stav potvrzení a vytvářet webhooky v úložišti. Teď můžete vytvořit úlohu, která aktivuje sestavení image kontejneru při potvrzení do úložiště.

Nejdřív vyplňte tyto proměnné prostředí hodnotami vhodnými pro vaše prostředí. Tento krok není nezbytně nutný, ale usnadní provádění víceřádkových příkazů Azure CLI v tomto kurzu. Pokud tyto proměnné prostředí nenaplníte, musíte ručně nahradit každou hodnotu tam, kde se v ukázkových příkazech objeví.

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

Teď vytvořte úlohu spuštěním následujícího příkazu az acr task create .

Poznámka

Soubor Dockerfile použitý v následujícím příkladu závisí na imagi veřejného základního kontejneru z Docker Hub. Pokud chcete zvýšit spolehlivost při používání veřejného obsahu, naimportujte a spravujte image v privátním registru kontejneru Azure a aktualizujte soubor Dockerfile tak, aby používal vaši soukromě spravovanou základní image. Přečtěte si další informace o práci s veřejnými imagemi.

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

Tato úloha určuje, že kdykoli je kód potvrzen do hlavní větve v úložišti určeném nástrojem --context, ACR Tasks sestaví image kontejneru z kódu v této větvi. K sestavení image se použije soubor Dockerfile zadaný v kořenovém --file adresáři úložiště. Argument --image určuje parametrizovanou hodnotu {{.Run.ID}} pro část verze značky image a zajišťuje tak, že sestavená image koreluje s konkrétním sestavením a je jedinečným způsobem označená.

Výstup úspěšného příkazu az acr task create je podobný následujícímu:

{
  "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"
}

Otestování úlohy sestavení

Teď máte úlohu, která definuje vaše sestavení. Pokud chcete otestovat kanál buildu, aktivujte sestavení ručně pomocí příkazu az acr task run:

az acr task run --registry $ACR_NAME --name taskhelloworld

Příkaz az acr task run ve výchozím nastavení při spuštění příkazu streamuje výstup protokolu do vaší konzoly. Výstup je zhuštěný, aby se zobrazily klíčové kroky.

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

Spuštění sestavení pomocí vložení

Když jste teď ručním spuštěním otestovali úlohu, aktivujte ji automaticky pomocí změny zdrojového kódu.

Nejdřív se ujistěte, že jste v adresáři obsahujícím místní klon úložiště:

cd acr-build-helloworld-node

Potom spuštěním následujících příkazů vytvořte, potvrďte a zapište nový soubor do forku úložiště na GitHubu:

echo "Hello World!" > hello.txt
git add hello.txt
git commit -m "Testing ACR Tasks"
git push origin main

Při spuštění příkazu git push můžete být vyzváni k zadání přihlašovacích údajů pro GitHub. Zadejte svoje uživatelské jméno pro GitHub a zadejte token PAT, který jste dříve vytvořili pro heslo.

Username for 'https://github.com': <github-username>
Password for 'https://githubuser@github.com': <personal-access-token>

Jakmile odešlete potvrzení do úložiště, spustí se webhook vytvořený službou ACR Tasks a zahájí sestavení ve službě Azure Container Registry. Zobrazte protokoly pro aktuálně spuštěnou úlohu, abyste mohli ověřit a monitorovat průběh sestavení:

az acr task logs --registry $ACR_NAME

Výstup je podobný následujícímu a zobrazuje aktuálně spuštěnou (nebo naposledy spuštěnou) úlohu:

Showing logs of the last created run.
Run ID: ca7

[...]

Run ID: ca7 was successful after 38s

Seznam sestavení

Pokud chcete zobrazit seznam spuštění úloh, která služba ACR Tasks dokončila pro váš registr, spusťte příkaz az acr task list-runs:

az acr task list-runs --registry $ACR_NAME --output table

Výstup příkazu by měl vypadat podobně jako ten následující. Zobrazí se spuštění provedená službou ACR Tasks a ve sloupci označujícím způsob aktivace se u nejnovější úlohy zobrazí „Git Commit“:

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

Další kroky

V tomto kurzu jste zjistili, jak pomocí úlohy automaticky aktivovat sestavení image kontejneru v Azure při potvrzení zdrojového kódu do úložiště Git. Přejděte k dalšímu kurzu, ve kterém se naučíte vytvářet úlohy, které aktivují sestavení při aktualizaci základní image kontejneru.