Executar tarefas de compilação, teste e correção de vários passos em Tarefas do ACR

As tarefas de vários passos expandem a capacidade de compilação e push de imagens individuais das Tarefas do ACR com fluxos de trabalho multi-passos baseados em vários contentores. Utilize tarefas de vários passos para criar e emitir várias imagens, em série ou em paralelo. Em seguida, execute essas imagens como comandos numa única execução de tarefa. Cada passo define uma compilação de imagem de contentor ou uma operação push e também pode definir a execução de um contentor. Cada passo numa tarefa de vários passos utiliza um contentor como o respetivo 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, pode executar uma tarefa com passos que automatizam a seguinte lógica:

  1. Criar uma imagem de aplicação Web
  2. Executar o contentor de aplicações Web
  3. Criar uma imagem de teste de aplicação Web
  4. Execute o contentor de teste de aplicações Web que realiza testes no contentor de aplicações em execução
  5. Se os testes forem aprovados, crie um pacote de arquivo do gráfico Helm
  6. Executar um helm upgrade com o novo pacote de arquivo do gráfico Helm

Todos os passos são executados no Azure, descarregando o trabalho para os recursos de computação do Azure e libertando-o da gestão da infraestrutura. Além do registo de contentor do Azure, paga apenas pelos recursos que utiliza. Para obter informações sobre preços, veja a secção Container Build (Compilação de Contentores) em Azure Container Registry pricing (Preços).

Cenários de tarefas comuns

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

  • Criar, etiquetar e emitir uma ou mais imagens de contentor, em série ou em paralelo.
  • Execute e capture os resultados do teste de unidades e da cobertura do código.
  • Executar e capturar testes funcionais. O ACR Tasks suporta a execução de mais do que um contentor, executando uma série de pedidos entre eles.
  • Efetue a execução baseada em tarefas, incluindo os passos anteriores/posteriores de uma compilação de imagem de contentor.
  • Implemente um ou mais contentores com o seu motor de implementação favorito no seu ambiente de destino.

Definição de tarefa de vários passos

Uma tarefa com vários passos nas Tarefas do ACR é definida como uma série de passos num ficheiro YAML. Cada passo pode especificar dependências na conclusão com êxito de um ou mais passos anteriores. Estão disponíveis os seguintes tipos de passos de tarefa:

  • build: crie uma ou mais imagens de contentor com sintaxe familiar docker build , em série ou em paralelo.
  • push: envie imagens compiladas para um registo de contentor. Os registos privados, como Azure Container Registry, são suportados, tal como o Docker Hub público.
  • cmd: execute um contentor, para que possa funcionar como uma função no contexto da tarefa em execução. Pode transmitir parâmetros para o contentor [ENTRYPOINT]e especificar propriedades como env, desanexar e outros parâmetros familiares docker run . O cmd tipo de passo permite testes funcionais e de unidades, com execução simultânea de contentores.

Os fragmentos seguintes mostram como combinar estes tipos de passos de tarefa. As tarefas com vários passos podem ser tão simples como criar uma única imagem a partir de um Dockerfile e enviar para o seu registo, com um ficheiro 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ários passos, que inclui passos para compilação, teste, pacote helm e implementação helm (registo de contentor e configuração do repositório Helm não apresentada):

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

Veja exemplos de tarefas para ficheiros YAML de tarefas de vários passos e Dockerfiles para vários cenários.

Executar uma tarefa de exemplo

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

Para executar uma tarefa, primeiro defina os passos da tarefa num ficheiro YAML e, em seguida, execute o comando da CLI do Azure az acr run.

Eis um exemplo de comando da CLI do Azure que executa uma tarefa com um ficheiro YAML de tarefa de exemplo. Os respetivos passos compilam e, em seguida, enviam uma imagem. Atualize \<acrName\> com o nome do seu próprio registo de contentor 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 executa a tarefa, o resultado deve mostrar o progresso de cada passo definido no ficheiro YAML. No resultado seguinte, os passos são apresentados 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 sobre a consolidação do Git ou a atualização de imagens de base, veja os artigos do tutorial Automatizar compilações de imagens e Compilações de atualização de imagens base .

Passos seguintes

Pode encontrar exemplos e referências de tarefas de vários passos aqui:

  • Referência de tarefas – tipos de passos de tarefa, as respetivas propriedades e utilização.
  • Exemplos de tarefas – exemplos task.yaml e ficheiros do Docker para vários cenários, simples a complexos.
  • Repositório cmd – uma coleção de contentores como comandos para tarefas do ACR.