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:
- Criar uma imagem de aplicativo Web
- Executar o contêiner do aplicativo Web
- Criar uma imagem de teste de aplicativo Web
- Execute o contêiner de teste do aplicativo Web que executa testes no contêiner do aplicativo em execução
- Se os testes forem aprovados, crie um pacote de arquivo gráfico Helm
- 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 familiardocker 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 familiaresdocker run
. Ocmd
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.