Partilhar via


Tutorial: Executar um fluxo de trabalho de contêiner de várias etapas na nuvem quando você confirma o código-fonte

Além de uma tarefa rápida, o ACR Tasks suporta fluxos de trabalho baseados em várias etapas e vários contêineres que podem ser acionados automaticamente quando você confirma o código-fonte em um repositório Git.

Neste tutorial, você aprenderá a usar arquivos YAML de exemplo para definir tarefas de várias etapas que criam, executam e enviam uma ou mais imagens de contêiner para um registro quando você confirma o código-fonte. Para criar uma tarefa que automatiza apenas uma única imagem baseada na confirmação de código, consulte Tutorial: Automatizar compilações de imagens de contêiner na nuvem quando você confirma o código-fonte. Para obter uma visão geral das tarefas do ACR, consulte Automatizar o sistema operacional e a aplicação de patches de estrutura com tarefas do ACR,

Neste tutorial:

  • Definir uma tarefa de várias etapas usando um arquivo YAML
  • Criar uma tarefa
  • Opcionalmente, adicione credenciais à tarefa para habilitar o acesso a outro registro
  • Testar a tarefa
  • Ver estado da tarefa
  • Acionar a tarefa com uma consolidação do código

Este tutorial parte do princípio de que já concluiu os passos no tutorial anterior. Se ainda não o fez, conclua os passos na secção Pré-requisitos do tutorial anterior antes de continuar.

Pré-requisitos

Obter o código de exemplo

Este tutorial parte do princípio de que já concluiu os passos no tutorial anterior e já bifurcou e clonou o repositório de exemplo. Se ainda não o fez, conclua os passos na secção Pré-requisitos do tutorial anterior antes de continuar.

Registo de contentor

Para concluir este tutorial tem de ter um registo de contentor do Azure na sua subscrição do Azure. Se precisar de um registo, veja o tutorial anterior ou Início Rápido: Criar um registo de contentor com a CLI do Azure.

Criar um token de acesso pessoal do GitHub

Para disparar uma tarefa em uma confirmação para um repositório Git, as Tarefas ACR precisam de um token de acesso pessoal (PAT) para acessar o repositório. Se você ainda não tiver um PAT, siga estas etapas para gerar um no GitHub:

  1. Navegue para a página de criação do PAT no GitHub em https://github.com/settings/tokens/new

  2. Escrever uma descrição breve para o token, por exemplo, "Demonstração do ACR Tasks"

  3. Selecione escopos para ACR acessar o repositório. Para acessar um repositório público como neste tutorial, em repo, habilite repo:status e public_repo

    Captura de ecrã da página de geração do Token de Acesso Pessoal no GitHub

    Nota

    Para gerar uma PAT para aceder a um repositório privado , selecione o âmbito para o controlo total da recompra.

  4. Selecione o botão Gerar token (poderá ser-lhe pedido para confirmar a palavra-passe)

  5. Copie e guarde o token gerado numa localização segura (irá utilizar este token na definição de uma tarefa de compilação na secção seguinte)

    Captura de ecrã do Token de Acesso Pessoal gerado no GitHub

Prepare o seu ambiente para o CLI do Azure

  • Use o ambiente Bash no Azure Cloud Shell. Para obter mais informações, consulte Guia de início rápido para Bash no Azure Cloud Shell.

  • Se preferir executar comandos de referência da CLI localmente, instale a CLI do Azure. Se estiver a utilizar o Windows ou macOS, considere executar a CLI do Azure num contentor Docker. Para obter mais informações, consulte Como executar a CLI do Azure em um contêiner do Docker.

    • Se estiver a utilizar uma instalação local, inicie sessão no CLI do Azure ao utilizar o comando az login. Para concluir o processo de autenticação, siga os passos apresentados no seu terminal. Para outras opções de entrada, consulte Entrar com a CLI do Azure.

    • Quando solicitado, instale a extensão da CLI do Azure na primeira utilização. Para obter mais informações sobre as extensões, veja Utilizar extensões com o CLI do Azure.

    • Execute o comando az version para localizar a versão e as bibliotecas dependentes instaladas. Para atualizar para a versão mais recente, execute o comando az upgrade.

Criar uma tarefa de várias etapas

Agora que você concluiu as etapas necessárias para permitir que as Tarefas ACR leiam o status de confirmação e criem webhooks em um repositório, crie uma tarefa de várias etapas que acione a criação, execução e envio de uma imagem de contêiner.

YAML file

Você define as etapas para uma tarefa de várias etapas em um arquivo YAML. O primeiro exemplo de tarefa de várias etapas para este tutorial é definido no arquivo taskmulti.yaml, que está na raiz do repositório GitHub que você clonou:

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

Esta tarefa de várias etapas faz o seguinte:

  1. Executa uma build etapa para criar uma imagem a partir do Dockerfile no diretório de trabalho. A imagem tem como alvo o Run.Registry, o registro onde a tarefa é executada e é marcada com um ID de execução de tarefas ACR exclusivo.
  2. Executa uma cmd etapa para executar a imagem em um contêiner temporário. Este exemplo inicia um contêiner de longa execução em segundo plano e retorna a ID do contêiner e, em seguida, interrompe o contêiner. Em um cenário real, você pode incluir etapas para testar o contêiner em execução para garantir que ele seja executado corretamente.
  3. Em uma push etapa, envia a imagem que foi criada para o registro de execução.

Comando Tarefa

Em primeiro lugar, preencha estas variáveis de ambiente da shell com os valores adequados para o seu ambiente. Este passo não é estritamente necessário, mas facilita um pouco a execução dos comandos da CLI do Azure com várias linhas neste tutorial. Se você não preencher essas variáveis de ambiente, deverá substituir manualmente cada valor onde quer que ele apareça nos comandos de exemplo.

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

Agora, crie a tarefa executando o seguinte comando 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

Esta tarefa especifica que qualquer código de tempo é confirmado na ramificação principal no repositório especificado pelo --context, as Tarefas ACR executarão a tarefa de várias etapas a partir do código nessa ramificação. O arquivo YAML especificado pela --file raiz do repositório define as etapas.

O resultado de um comando az acr task create com êxito é semelhante ao seguinte:

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

Testar o fluxo de trabalho de várias etapas

Para testar a tarefa de várias etapas, acione-a manualmente executando o comando az acr task run :

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

Por predefinição, o comando az acr task run transmite a saída de registo para a consola quando executar o comando. A saída mostra o progresso da execução de cada uma das etapas da tarefa. A saída abaixo é condensada para mostrar as principais etapas.

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

Acionar uma compilação com uma consolidação

Agora que testou a tarefa através de uma execução manual, acione-a automaticamente com uma alteração do código de origem.

Em primeiro lugar, confirme que está no diretório que contém o clone local do repositório:

cd acr-build-helloworld-node

Em seguida, execute os comandos seguintes para criar, consolidar e emitir um novo ficheiro para a bifurcação do repositório no GitHub:

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

Poderá ser-lhe pedido para fornecer as credenciais do GitHub, quando executar o comando git push. Forneça o seu nome de utilizador do GitHub e introduza o token de acesso pessoal (PAT) que criou anteriormente para a palavra-passe.

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

Depois de enviar uma confirmação para o repositório, o webhook criado pelo ACR Tasks é acionado e inicia a tarefa no Registro de Contêiner do Azure. Apresente os registos da compilação atualmente em execução para verificar e monitorizar o progresso da mesma:

az acr task logs --registry $ACR_NAME

O resultado é semelhante ao seguinte, apresentando a compilação atualmente em execução (ou a última executada):

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

[...]

Run ID: cad was successful after 37s

Listar as compilações

Para ver uma lista das execuções de tarefas que o ACR Tasks concluiu para o seu registo, execute o comando az acr task list-runs:

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

O resultado do comando deve ter um aspeto semelhante ao que se segue. As execuções do ACR Tasks são apresentadas e “Consolidação de Git” aparece na coluna ACIONAR da tarefa mais recente:

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

Criar uma tarefa multi-registo com vários passos

Por padrão, as Tarefas ACR têm permissões para enviar ou extrair imagens do registro onde a tarefa é executada. Talvez você queira executar uma tarefa de várias etapas destinada a um ou mais registros, além do registro de execução. Por exemplo, talvez seja necessário criar imagens em um registro e armazenar imagens com tags diferentes em um segundo registro acessado por um sistema de produção. Este exemplo mostra como criar essa tarefa e fornecer credenciais para outro registro.

Se você ainda não tiver um segundo registro, crie um para este exemplo. Se precisar de um registo, veja o tutorial anterior ou Início Rápido: Criar um registo de contentor com a CLI do Azure.

Para criar a tarefa, você precisa do nome do servidor de login do registro, que é do formato mycontainerregistrydate.azurecr.io (todas minúsculas). Neste exemplo, você usa o segundo registro para armazenar imagens marcadas por data de compilação.

YAML file

O segundo exemplo de tarefa de várias etapas para este tutorial é definido no arquivo taskmulti-multiregistry.yaml, que está na raiz do repositório GitHub que você clonou:

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

Esta tarefa de várias etapas faz o seguinte:

  1. Executa duas build etapas para criar imagens do Dockerfile no diretório de trabalho:
    • O primeiro tem como alvo o Run.Registry, o registro onde a tarefa é executada e é marcado com a ID de execução de tarefas ACR.
    • O segundo tem como alvo o registro identificado pelo valor de , que você define quando cria a tarefa (ou fornece por meio de regDateum arquivo externo values.yaml passado para az acr task create). Esta imagem é marcada com a data de execução.
  2. Executa uma cmd etapa para executar um dos contêineres construídos. Este exemplo inicia um contêiner de longa execução em segundo plano e retorna a ID do contêiner e, em seguida, interrompe o contêiner. Em um cenário real, você pode testar um contêiner em execução para garantir que ele seja executado corretamente.
  3. Em uma push etapa, envia as imagens que foram construídas, a primeira para o registro de execução, a segunda para o registro identificado por regDate.

Comando Tarefa

Usando as variáveis de ambiente do shell definidas anteriormente, crie a tarefa executando o seguinte comando az acr task create . Substitua o nome do seu registro por 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

Adicionar credencial de tarefa

Para enviar imagens por push para o registro identificado pelo valor de , use o comando az acr task credential add para adicionar credenciais de regDatelogin desse registro à tarefa.

Neste exemplo, recomendamos que você crie uma entidade de serviço com acesso ao Registro com escopo para a função AcrPush, para que ela tenha permissões para enviar imagens. Para criar a entidade de serviço, use o seguinte script:

#!/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"

Passe o ID e a senha do aplicativo principal de serviço no comando a seguir az acr task credential add . Certifique-se de atualizar o nome do servidor de login mycontainerregistrydate com o nome do seu segundo registro:

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

A CLI retorna o nome do servidor de login do Registro que você adicionou.

Testar o fluxo de trabalho de várias etapas

Como no exemplo anterior, para testar a tarefa de várias etapas, acione-a manualmente executando o comando az acr task run . Para disparar a tarefa com uma confirmação para o repositório Git, consulte a seção Acionar uma compilação com uma confirmação.

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

Por predefinição, o comando az acr task run transmite a saída de registo para a consola quando executar o comando. Como antes, a saída mostra o progresso da execução de cada uma das etapas da tarefa. A saída é condensada para mostrar as etapas principais.

Saída:

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

Próximos passos

Neste tutorial, você aprendeu como criar tarefas baseadas em vários contêineres e várias etapas que são acionadas automaticamente quando você confirma o código-fonte em um repositório Git. Para obter recursos avançados de tarefas de várias etapas, incluindo execução de etapas paralelas e dependentes, consulte a referência YAML de tarefas ACR. Avance para o tutorial seguinte para saber como criar tarefas que acionam compilações quando a imagem de base de uma imagem do contentor é atualizada.