Kurz: Spuštění vícekrokového pracovního postupu kontejneru v cloudu při potvrzení zdrojového kódu

Kromě rychlé úlohy služba ACR Tasks podporuje vícekrokové pracovní postupy založené na více kontejnerech, které se můžou automaticky aktivovat při potvrzení zdrojového kódu do úložiště Git.

V tomto kurzu se dozvíte, jak pomocí ukázkových souborů YAML definovat úlohy s více kroky, které sestavují, spouštějí a nasdílí jednu nebo více imagí kontejneru do registru při potvrzení zdrojového kódu. Pokud chcete vytvořit úlohu, která automatizuje pouze jeden sestavení image při potvrzení kódu, přečtěte si kurz : Automatizace sestavení imagí 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:

  • Definování vícekrokové úlohy pomocí souboru YAML
  • Vytvořit úkol
  • Volitelně můžete k úloze přidat přihlašovací údaje, které umožní přístup k jinému registru.
  • 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 osobní přístupový token (PAT ). Pokud ještě nemáte pat, vygenerujte ho pomocí následujícího postupu na GitHubu:

  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 ACR pro přístup k úložišti. Pokud chcete získat přístup k veřejnému úložišti jako v tomto kurzu, v části úložiště povolte úložiště: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í vícekrokové úlohy

Teď, když jste dokončili kroky potřebné k tomu, aby služba ACR Tasks mohla číst stav potvrzení a vytvářet webhooky v úložišti, vytvořte úlohu s více kroky, která aktivuje sestavení, spuštění a nasdílení image kontejneru.

YAML file

Kroky pro vícekrokový úkol definujete v souboru YAML. První příklad vícekrokové úlohy pro tento kurz je definován v souboru taskmulti.yaml, který je v kořenovém adresáři úložiště GitHub, které jste naklonovali:

version: v1.1.0
steps:
# Build target image
- build: -t {{.Run.Registry}}/hello-world:{{.Run.ID}} -f Dockerfile .
# Run image 
- cmd: -t {{.Run.Registry}}/hello-world:{{.Run.ID}}
  id: test
  detach: true
  ports: ["8080:80"]
- cmd: docker stop test
# Push image
- push:
  - {{.Run.Registry}}/hello-world:{{.Run.ID}}

Tento vícekrokový úkol provede následující akce:

  1. build Spustí krok pro sestavení image ze souboru Dockerfile v pracovním adresáři. Image cílí na Run.Registryregistr, ve kterém je úloha spuštěna, a je označena jedinečným ID spuštění ACR Tasks.
  2. cmd Spustí krok pro spuštění image v dočasném kontejneru. Tento příklad spustí dlouhotrvající kontejner na pozadí a vrátí ID kontejneru a pak kontejner zastaví. Ve skutečném scénáři můžete zahrnout kroky k otestování spuštěného kontejneru, aby se zajistilo, že běží správně.
  3. push V kroku nasdílí image sestavenou do registru spuštění.

Příkaz Úkolu

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 každou hodnotu ručně nahradit všude tam, kde se zobrazí v ukázkových příkazech.

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 :

az acr task create \
    --registry $ACR_NAME \
    --name example1 \
    --context https://github.com/$GIT_USER/acr-build-helloworld-node.git#main \
    --file taskmulti.yaml \
    --git-access-token $GIT_PAT

Tato úloha určuje, že kdykoli se kód potvrdí do hlavní větve v úložišti určeném službou --contextACR Tasks, spustí z kódu v této větvi vícekrokový úkol. Soubor YAML určený --file z kořenového adresáře úložiště definuje kroky.

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

{
  "agentConfiguration": {
    "cpu": 2
  },
  "creationDate": "2020-11-20T03:14:31.763887+00:00",
  "credentials": null,
  "id": "/subscriptions/<Subscription ID>/resourceGroups/myregistry/providers/Microsoft.ContainerRegistry/registries/myregistry/tasks/taskmulti",
  "location": "westus",
  "name": "example1",
  "platform": {
    "architecture": "amd64",
    "os": "linux",
    "variant": null
  },
  "provisioningState": "Succeeded",
  "resourceGroup": "myresourcegroup",
  "status": "Enabled",
  "step": {
    "baseImageDependencies": null,
    "contextAccessToken": null,
    "contextPath": "https://github.com/gituser/acr-build-helloworld-node.git#main",
    "taskFilePath": "taskmulti.yaml",
    "type": "FileTask",
    "values": [],
    "valuesFilePath": null
  },
  "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.git#main",
          "sourceControlAuthProperties": null,
          "sourceControlType": "Github"
        },
        "sourceTriggerEvents": [
          "commit"
        ],
        "status": "Enabled"
      }
    ]
  },
  "type": "Microsoft.ContainerRegistry/registries/tasks"
}

Testování vícekrokového pracovního postupu

Pokud chcete otestovat vícekrokový úkol, spusťte ho ručně spuštěním příkazu az acr task run :

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

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 ukazuje průběh spuštění jednotlivých kroků úlohy. Níže uvedený výstup je zhuštěný, aby se zobrazily klíčové kroky.

Queued a run with ID: cab
Waiting for an agent...
2020/11/20 00:03:31 Downloading source code...
2020/11/20 00:03:33 Finished downloading source code
2020/11/20 00:03:33 Using acb_vol_cfe6bd55-3076-4215-8091-6a81aec3d1b1 as the home volume
2020/11/20 00:03:33 Creating Docker network: acb_default_network, driver: 'bridge'
2020/11/20 00:03:34 Successfully set up Docker network: acb_default_network
2020/11/20 00:03:34 Setting up Docker configuration...
2020/11/20 00:03:34 Successfully set up Docker configuration
2020/11/20 00:03:34 Logging in to registry: myregistry.azurecr.io
2020/11/20 00:03:35 Successfully logged into myregistry.azurecr.io
2020/11/20 00:03:35 Executing step ID: acb_step_0. Working directory: '', Network: 'acb_default_network'
2020/11/20 00:03:35 Scanning for dependencies...
2020/11/20 00:03:36 Successfully scanned dependencies
2020/11/20 00:03:36 Launching container with name: acb_step_0
Sending build context to Docker daemon  24.06kB
[...]
Successfully built f669bfd170af
Successfully tagged myregistry.azurecr.io/hello-world:cf19
2020/11/20 00:03:43 Successfully executed container: acb_step_0
2020/11/20 00:03:43 Executing step ID: acb_step_1. Working directory: '', Network: 'acb_default_network'
2020/11/20 00:03:43 Launching container with name: acb_step_1
279b1cb6e092b64c8517c5506fcb45494cd5a0bd10a6beca3ba97f25c5d940cd
2020/11/20 00:03:44 Successfully executed container: acb_step_1
2020/11/20 00:03:44 Executing step ID: acb_step_2. Working directory: '', Network: 'acb_default_network'
2020/11/20 00:03:44 Pushing image: myregistry.azurecr.io/hello-world:cf19, attempt 1
[...]
2020/11/20 00:03:46 Successfully pushed image: myregistry.azurecr.io/hello-world:cf19
2020/11/20 00:03:46 Step ID: acb_step_0 marked as successful (elapsed time in seconds: 7.425169)
2020/11/20 00:03:46 Populating digests for step ID: acb_step_0...
2020/11/20 00:03:47 Successfully populated digests for step ID: acb_step_0
2020/11/20 00:03:47 Step ID: acb_step_1 marked as successful (elapsed time in seconds: 0.827129)
2020/11/20 00:03:47 Step ID: acb_step_2 marked as successful (elapsed time in seconds: 2.112113)
2020/11/20 00:03:47 The following dependencies were found:
2020/11/20 00:03:47
- image:
    registry: myregistry.azurecr.io
    repository: hello-world
    tag: cf19
    digest: sha256:6b981a8ca8596e840228c974c929db05c0727d8630465de536be74104693467a
  runtime-dependency:
    registry: registry.hub.docker.com
    repository: library/node
    tag: 15-alpine
    digest: sha256:8dafc0968fb4d62834d9b826d85a8feecc69bd72cd51723c62c7db67c6dec6fa
  git:
    git-head-revision: 1a3065388a0238e52865db1c8f3e97492a43444c

Run ID: cab was successful after 18s

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>

Po nasdílení potvrzení do úložiště se webhook vytvořený službou ACR Tasks aktivuje a spustí úlohu 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: cad

[...]

Run ID: cad was successful after 37s

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
--------  --------------  ----------  ---------  ---------  --------------------  ----------
cad       example1        linux       Succeeded  Commit     2020-11-20T00:22:15Z  00:00:35
cac       taskhelloworld  linux       Succeeded  Commit     2020-11-20T00:22:15Z  00:00:22
cab       example1        linux       Succeeded  Manual     2020-11-20T00:18:36Z  00:00:47

Vytvoření vícekrokové úlohy s více registry

Ve výchozím nastavení má služba ACR Tasks oprávnění k zápisu nebo načítání imagí z registru, ve kterém se úloha spouští. Možná budete chtít spustit úlohu s více kroky, která kromě registru spuštění cílí na jeden nebo více registrů. Můžete například potřebovat vytvořit image v jednom registru a ukládat image s různými značkami do druhého registru, ke kterému přistupuje produkční systém. Tento příklad ukazuje, jak takovou úlohu vytvořit a zadat přihlašovací údaje pro jiný registr.

Pokud ještě nemáte druhý registr, vytvořte si ho pro tento příklad. Pokud potřebujete registr, podívejte se na předchozí kurz nebo článek Rychlý start: Vytvoření registru kontejnerů pomocí Azure CLI.

K vytvoření úlohy potřebujete název přihlašovacího serveru registru, což je formulář mycontainerregistrydate.azurecr.io (všechna malá písmena). V tomto příkladu použijete druhý registr k ukládání imagí označených datem sestavení.

YAML file

Druhý příklad vícekrokové úlohy pro tento kurz je definován v souboru taskmulti-multiregistry.yaml, který je v kořenovém adresáři úložiště GitHub, které jste naklonovali:

version: v1.1.0
steps:
# Build target images
- build: -t {{.Run.Registry}}/hello-world:{{.Run.ID}} -f Dockerfile .
- build: -t {{.Values.regDate}}/hello-world:{{.Run.Date}} -f Dockerfile .
# Run image 
- cmd: -t {{.Run.Registry}}/hello-world:{{.Run.ID}}
  id: test
  detach: true
  ports: ["8080:80"]
- cmd: docker stop test
# Push images
- push:
  - {{.Run.Registry}}/hello-world:{{.Run.ID}}
  - {{.Values.regDate}}/hello-world:{{.Run.Date}}

Tento vícekrokový úkol provede následující akce:

  1. Spustí dva build kroky pro sestavení imagí ze souboru Dockerfile v pracovním adresáři:
    • První cílí na Run.Registryregistr, ve kterém je úloha spuštěna, a je označen id spuštění ACR Tasks.
    • Druhý cílí na registr identifikovaný hodnotou regDate, kterou jste nastavili při vytváření úkolu (nebo poskytnout prostřednictvím externího values.yaml souboru předaného az acr task create). Tento obrázek je označen datem spuštění.
  2. cmd Spustí krok pro spuštění jednoho z sestavených kontejnerů. Tento příklad spustí dlouhotrvající kontejner na pozadí a vrátí ID kontejneru a pak kontejner zastaví. V reálném scénáři můžete otestovat spuštěný kontejner, abyste měli jistotu, že běží správně.
  3. push V kroku odešle image, které byly vytvořeny, první do registru spuštění, druhý do registru identifikovaného regDate.

Příkaz Úkolu

Pomocí dříve definovaných proměnných prostředí vytvořte úlohu spuštěním následujícího příkazu az acr task create . Nahraďte název registru mycontainerregistrydate.

az acr task create \
    --registry $ACR_NAME \
    --name example2 \
    --context https://github.com/$GIT_USER/acr-build-helloworld-node.git#main \
    --file taskmulti-multiregistry.yaml \
    --git-access-token $GIT_PAT \
    --set regDate=mycontainerregistrydate.azurecr.io

Přidání přihlašovacích údajů úkolu

Pokud chcete odeslat image do registru identifikované hodnotou regDate, použijte příkaz az acr task credential add k přidání přihlašovacích údajů pro tento registr do úlohy.

V tomto příkladu doporučujeme vytvořit instanční objekt s přístupem k registru omezenému na roli AcrPush , aby mělo oprávnění k nasdílení imagí. K vytvoření instančního objektu použijte následující skript:

#!/bin/bash
# This script requires Azure CLI version 2.25.0 or later. Check version with `az --version`.

# Modify for your environment.
# ACR_NAME: The name of your Azure Container Registry
# SERVICE_PRINCIPAL_NAME: Must be unique within your AD tenant
ACR_NAME=$containerRegistry
SERVICE_PRINCIPAL_NAME=$servicePrincipal

# Obtain the full registry ID
ACR_REGISTRY_ID=$(az acr show --name $ACR_NAME --query "id" --output tsv)
# echo $registryId

# Create the service principal with rights scoped to the registry.
# Default permissions are for docker pull access. Modify the '--role'
# argument value as desired:
# acrpull:     pull only
# acrpush:     push and pull
# owner:       push, pull, and assign roles
PASSWORD=$(az ad sp create-for-rbac --name $SERVICE_PRINCIPAL_NAME --scopes $ACR_REGISTRY_ID --role acrpull --query "password" --output tsv)
USER_NAME=$(az ad sp list --display-name $SERVICE_PRINCIPAL_NAME --query "[].appId" --output tsv)

# Output the service principal's credentials; use these in your services and
# applications to authenticate to the container registry.
echo "Service principal ID: $USER_NAME"
echo "Service principal password: $PASSWORD"

V následujícím az acr task credential add příkazu předejte ID a heslo aplikace instančního objektu. Nezapomeňte aktualizovat název přihlašovacího serveru mycontainerregistrydate názvem vašeho druhého registru:

az acr task credential add --name example2 \
    --registry $ACR_NAME \
    --login-server mycontainerregistrydate.azurecr.io \
    --username <service-principal-application-id> \
    --password <service-principal-password>

Rozhraní příkazového řádku vrátí název přihlašovacího serveru registru, který jste přidali.

Testování vícekrokového pracovního postupu

Stejně jako v předchozím příkladu, pokud chcete otestovat vícekrokový úkol, spusťte ho ručně spuštěním příkazu az acr task run . Pokud chcete úlohu aktivovat potvrzením do úložiště Git, přečtěte si část Aktivace sestavení s potvrzením.

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

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. Stejně jako předtím ukazuje výstup průběh spuštění jednotlivých kroků úkolu. Výstup je zhuštěný tak, aby zobrazoval klíčové kroky.

Výstup:

Queued a run with ID: cf1g
Waiting for an agent...
2020/11/20 04:33:39 Downloading source code...
2020/11/20 04:33:41 Finished downloading source code
2020/11/20 04:33:42 Using acb_vol_4569b017-29fe-42bd-83b2-25c45a8ac807 as the home volume
2020/11/20 04:33:42 Creating Docker network: acb_default_network, driver: 'bridge'
2020/11/20 04:33:43 Successfully set up Docker network: acb_default_network
2020/11/20 04:33:43 Setting up Docker configuration...
2020/11/20 04:33:44 Successfully set up Docker configuration
2020/11/20 04:33:44 Logging in to registry: mycontainerregistry.azurecr.io
2020/11/20 04:33:45 Successfully logged into mycontainerregistry.azurecr.io
2020/11/20 04:33:45 Logging in to registry: mycontainerregistrydate.azurecr.io
2020/11/20 04:33:47 Successfully logged into mycontainerregistrydate.azurecr.io
2020/11/20 04:33:47 Executing step ID: acb_step_0. Working directory: '', Network: 'acb_default_network'
2020/11/20 04:33:47 Scanning for dependencies...
2020/11/20 04:33:47 Successfully scanned dependencies
2020/11/20 04:33:47 Launching container with name: acb_step_0
Sending build context to Docker daemon  25.09kB
[...]
Successfully tagged mycontainerregistry.azurecr.io/hello-world:cf1g
2020/11/20 04:33:55 Successfully executed container: acb_step_0
2020/11/20 04:33:55 Executing step ID: acb_step_1. Working directory: '', Network: 'acb_default_network'
2020/11/20 04:33:55 Scanning for dependencies...
2020/11/20 04:33:56 Successfully scanned dependencies
2020/11/20 04:33:56 Launching container with name: acb_step_1
Sending build context to Docker daemon  25.09kB
[...]
Successfully tagged mycontainerregistrydate.azurecr.io/hello-world:20190503-043342z
2020/11/20 04:33:57 Successfully executed container: acb_step_1
2020/11/20 04:33:57 Executing step ID: acb_step_2. Working directory: '', Network: 'acb_default_network'
2020/11/20 04:33:57 Launching container with name: acb_step_2
721437ff674051b6be63cbcd2fa8eb085eacbf38d7d632f1a079320133182101
2020/11/20 04:33:58 Successfully executed container: acb_step_2
2020/11/20 04:33:58 Executing step ID: acb_step_3. Working directory: '', Network: 'acb_default_network'
2020/11/20 04:33:58 Launching container with name: acb_step_3
test
2020/11/20 04:34:09 Successfully executed container: acb_step_3
2020/11/20 04:34:09 Executing step ID: acb_step_4. Working directory: '', Network: 'acb_default_network'
2020/11/20 04:34:09 Pushing image: mycontainerregistry.azurecr.io/hello-world:cf1g, attempt 1
The push refers to repository [mycontainerregistry.azurecr.io/hello-world]
[...]
2020/11/20 04:34:12 Successfully pushed image: mycontainerregistry.azurecr.io/hello-world:cf1g
2020/11/20 04:34:12 Pushing image: mycontainerregistrydate.azurecr.io/hello-world:20190503-043342z, attempt 1
The push refers to repository [mycontainerregistrydate.azurecr.io/hello-world]
[...]
2020/11/20 04:34:19 Successfully pushed image: mycontainerregistrydate.azurecr.io/hello-world:20190503-043342z
2020/11/20 04:34:19 Step ID: acb_step_0 marked as successful (elapsed time in seconds: 8.125744)
2020/11/20 04:34:19 Populating digests for step ID: acb_step_0...
2020/11/20 04:34:21 Successfully populated digests for step ID: acb_step_0
2020/11/20 04:34:21 Step ID: acb_step_1 marked as successful (elapsed time in seconds: 2.009281)
2020/11/20 04:34:21 Populating digests for step ID: acb_step_1...
2020/11/20 04:34:23 Successfully populated digests for step ID: acb_step_1
2020/11/20 04:34:23 Step ID: acb_step_2 marked as successful (elapsed time in seconds: 0.795440)
2020/11/20 04:34:23 Step ID: acb_step_3 marked as successful (elapsed time in seconds: 11.446775)
2020/11/20 04:34:23 Step ID: acb_step_4 marked as successful (elapsed time in seconds: 9.734973)
2020/11/20 04:34:23 The following dependencies were found:
2020/11/20 04:34:23
- image:
    registry: mycontainerregistry.azurecr.io
    repository: hello-world
    tag: cf1g
    digest: sha256:75354e9edb995e8661438bad9913deed87a185fddd0193811f916d684b71a5d2
  runtime-dependency:
    registry: registry.hub.docker.com
    repository: library/node
    tag: 15-alpine
    digest: sha256:8dafc0968fb4d62834d9b826d85a8feecc69bd72cd51723c62c7db67c6dec6fa
  git:
    git-head-revision: 9d9023473c46a5e2c315681b11eb4552ef0faccc
- image:
    registry: mycontainerregistrydate.azurecr.io
    repository: hello-world
    tag: 20190503-043342z
    digest: sha256:75354e9edb995e8661438bad9913deed87a185fddd0193811f916d684b71a5d2
  runtime-dependency:
    registry: registry.hub.docker.com
    repository: library/node
    tag: 15-alpine
    digest: sha256:8dafc0968fb4d62834d9b826d85a8feecc69bd72cd51723c62c7db67c6dec6fa
  git:
    git-head-revision: 9d9023473c46a5e2c315681b11eb4552ef0faccc

Run ID: cf1g was successful after 46s

Další kroky

V tomto kurzu jste se naučili vytvářet vícekrokové úlohy založené na více kontejnerech, které se automaticky aktivují při potvrzení zdrojového kódu do úložiště Git. Pokročilé funkce vícekrokových úloh, včetně paralelního a závislého provádění kroků, najdete v referenčních informacích k ACR Tasks YAML. 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.