Partilhar via


Execute tarefas de compilação, teste e patch em várias etapas no ACR Tasks

As tarefas de várias etapas ampliam a capacidade de criação e envio de imagem única das Tarefas ACR com fluxos de trabalho baseados em várias etapas e vários contêineres. Use tarefas de várias etapas para criar e enviar várias imagens, em série ou em paralelo. Em seguida, execute essas imagens como comandos dentro de uma única tarefa executada. Cada etapa define uma operação de compilação ou envio de imagem de contêiner e também pode definir a execução de um contêiner. Cada etapa em uma tarefa de várias etapas usa um contêiner como seu ambiente de execução.

Importante

Se anteriormente tiver criado tarefas durante a pré-visualização com o comando az acr build-task, essas tarefas têm de ser recriadas com o az acr task.

Por exemplo, você pode executar uma tarefa com etapas que automatizam a seguinte lógica:

  1. Criar uma imagem de aplicativo Web
  2. Executar o contêiner do aplicativo Web
  3. Criar uma imagem de teste de aplicativo Web
  4. Execute o contêiner de teste do aplicativo Web que executa testes no contêiner do aplicativo em execução
  5. Se os testes forem aprovados, crie um pacote de arquivo gráfico Helm
  6. Executar um helm upgrade usando o novo pacote de arquivo de gráfico Helm

Todas as etapas são executadas no Azure, descarregando o trabalho para os recursos de computação do Azure e liberando você do gerenciamento de infraestrutura. Além do seu registro de contêiner do Azure, você paga apenas pelos recursos que usa. Para obter informações sobre preços, consulte a seção Container Build em Preços do Registro de Contêiner do Azure.

Cenários de tarefas comuns

As tarefas de várias etapas permitem cenários como a seguinte lógica:

  • Crie, marque e envie por push uma ou mais imagens de contêiner, em série ou em paralelo.
  • Execute e capture resultados de teste de unidade e cobertura de código.
  • Execute e capture testes funcionais. O ACR Tasks suporta a execução de mais de um contêiner, executando uma série de solicitações entre eles.
  • Execute a execução baseada em tarefas, incluindo etapas pré/pós de uma compilação de imagem de contêiner.
  • Implante um ou mais contêineres com seu mecanismo de implantação favorito em seu ambiente de destino.

Definição de tarefas em várias etapas

Uma tarefa de várias etapas em Tarefas ACR é definida como uma série de etapas dentro de um arquivo YAML. Cada etapa pode especificar dependências na conclusão bem-sucedida de uma ou mais etapas anteriores. Os seguintes tipos de etapa de tarefa estão disponíveis:

  • build: Crie uma ou mais imagens de contêiner usando sintaxe familiar docker build , em série ou em paralelo.
  • push: Envie imagens criadas para um registro de contêiner. Há suporte para registros privados, como o Registro de Contêiner do Azure, assim como o Docker Hub público.
  • cmd: Execute um contêiner, de modo que ele possa operar como uma função dentro do contexto da tarefa em execução. Você pode passar parâmetros para o contêiner [ENTRYPOINT]e especificar propriedades como env, desanexar e outros parâmetros familiares docker run . O cmd tipo de etapa permite testes unitários e funcionais, com execução simultânea de contêineres.

Os trechos a seguir mostram como combinar esses tipos de etapa de tarefa. As tarefas de várias etapas podem ser tão simples quanto criar uma única imagem a partir de um Dockerfile e enviar para o seu registro, com um arquivo YAML semelhante a:

version: v1.1.0
steps:
  - build: -t $Registry/hello-world:$ID .
  - push: ["$Registry/hello-world:$ID"]

Ou mais complexa, como esta definição fictícia de várias etapas que inclui etapas para compilação, teste, pacote de leme e implantação de leme (registro de contêiner e configuração de repositório Helm não mostrados):

version: v1.1.0
steps:
  - id: build-web
    build: -t $Registry/hello-world:$ID .
    when: ["-"]
  - id: build-tests
    build: -t $Registry/hello-world-tests ./funcTests
    when: ["-"]
  - id: push
    push: ["$Registry/helloworld:$ID"]
    when: ["build-web", "build-tests"]
  - id: hello-world-web
    cmd: $Registry/helloworld:$ID
  - id: funcTests
    cmd: $Registry/helloworld:$ID
    env: ["host=helloworld:80"]
  - cmd: $Registry/functions/helm package --app-version $ID -d ./helm ./helm/helloworld/
  - cmd: $Registry/functions/helm upgrade helloworld ./helm/helloworld/ --reuse-values --set helloworld.image=$Registry/helloworld:$ID

Consulte exemplos de tarefas para arquivos YAML de tarefas de várias etapas e Dockerfiles para vários cenários.

Executar uma tarefa de exemplo

As tarefas suportam a execução manual, chamada de "execução rápida", e a execução automatizada na confirmação do Git ou atualização de imagem base.

Para executar uma tarefa, primeiro defina as etapas da tarefa em um arquivo YAML e, em seguida, execute o comando az acr run da CLI do Azure.

Aqui está um exemplo de comando da CLI do Azure que executa uma tarefa usando um arquivo YAML de tarefa de exemplo. Suas etapas criam e, em seguida, empurram uma imagem. Atualize \<acrName\> com o nome do seu próprio registro de contêiner do Azure antes de executar o comando.

az acr run --registry <acrName> -f build-push-hello-world.yaml https://github.com/Azure-Samples/acr-tasks.git

Quando você executa a tarefa, a saída deve mostrar o progresso de cada etapa definida no arquivo YAML. Na saída a seguir, as etapas aparecem como acb_step_0 e acb_step_1.

az acr run --registry myregistry -f build-push-hello-world.yaml https://github.com/Azure-Samples/acr-tasks.git
Sending context to registry: myregistry...
Queued a run with ID: yd14
Waiting for an agent...
2018/09/12 20:08:44 Using acb_vol_0467fe58-f6ab-4dbd-a022-1bb487366941 as the home volume
2018/09/12 20:08:44 Creating Docker network: acb_default_network
2018/09/12 20:08:44 Successfully set up Docker network: acb_default_network
2018/09/12 20:08:44 Setting up Docker configuration...
2018/09/12 20:08:45 Successfully set up Docker configuration
2018/09/12 20:08:45 Logging in to registry: myregistry.azurecr-test.io
2018/09/12 20:08:46 Successfully logged in
2018/09/12 20:08:46 Executing step: acb_step_0
2018/09/12 20:08:46 Obtaining source code and scanning for dependencies...
2018/09/12 20:08:47 Successfully obtained source code and scanned for dependencies
Sending build context to Docker daemon  109.6kB
Step 1/1 : FROM hello-world
 ---> 4ab4c602aa5e
Successfully built 4ab4c602aa5e
Successfully tagged myregistry.azurecr-test.io/hello-world:yd14
2018/09/12 20:08:48 Executing step: acb_step_1
2018/09/12 20:08:48 Pushing image: myregistry.azurecr-test.io/hello-world:yd14, attempt 1
The push refers to repository [myregistry.azurecr-test.io/hello-world]
428c97da766c: Preparing
428c97da766c: Layer already exists
yd14: digest: sha256:1a6fd470b9ce10849be79e99529a88371dff60c60aab424c077007f6979b4812 size: 524
2018/09/12 20:08:55 Successfully pushed image: myregistry.azurecr-test.io/hello-world:yd14
2018/09/12 20:08:55 Step id: acb_step_0 marked as successful (elapsed time in seconds: 2.035049)
2018/09/12 20:08:55 Populating digests for step id: acb_step_0...
2018/09/12 20:08:57 Successfully populated digests for step id: acb_step_0
2018/09/12 20:08:57 Step id: acb_step_1 marked as successful (elapsed time in seconds: 6.832391)
The following dependencies were found:
- image:
    registry: myregistry.azurecr-test.io
    repository: hello-world
    tag: yd14
    digest: sha256:1a6fd470b9ce10849be79e99529a88371dff60c60aab424c077007f6979b4812
  runtime-dependency:
    registry: registry.hub.docker.com
    repository: library/hello-world
    tag: latest
    digest: sha256:0add3ace90ecb4adbf7777e9aacf18357296e799f81cabc9fde470971e499788
  git: {}


Run ID: yd14 was successful after 19s

Para obter mais informações sobre compilações automatizadas no Git commit ou atualização de imagem base, consulte os artigos do tutorial Automatizar compilações de imagem e Compilações de atualização de imagem base.

Próximos passos

Você pode encontrar referências de tarefas em várias etapas e exemplos aqui:

  • Referência de tarefa - Tipos de etapa de tarefa, suas propriedades e uso.
  • Exemplos de tarefas - Arquivos de exemplo task.yaml e Docker para vários cenários, simples a complexos.
  • Cmd repo - Uma coleção de contêineres como comandos para tarefas ACR.