Eseguire attività di creazione, test e applicazione di patch in più passaggi in Attività di Registro Azure ContainerRun multi-step build, test, and patch tasks in ACR Tasks

Le attività in più passaggi estendono la singola funzionalità di creazione ed esecuzione del push di Attività di Registro Azure Container con flussi di lavoro basati su più contenitori e più passaggi.Multi-step tasks extend the single image build-and-push capability of ACR Tasks with multi-step, multi-container-based workflows. Usare le attività in più passaggi per compilare ed eseguire il push di più immagini, in serie o in parallelo.Use multi-step tasks to build and push several images, in series or in parallel. Eseguire quindi queste immagini come comandi all'interno di una singola esecuzione di attività.Then run those images as commands within a single task run. Ogni passaggio definisce l'operazione di compilazione o push di un'immagine contenitore e può anche definire l'esecuzione di un contenitore.Each step defines a container image build or push operation, and can also define the execution of a container. Ogni passaggio in un'attività in più passaggi usa un contenitore come ambiente di esecuzione.Each step in a multi-step task uses a container as its execution environment.

Importante

Se in precedenza sono state create attività durante l'anteprima con il comando az acr build-task, tali attività devono essere ricreate con il comando az acr task.If you previously created tasks during the preview with the az acr build-task command, those tasks need to be re-created using the az acr task command.

È ad esempio possibile eseguire un'attività con passaggi che automatizzano la logica seguente:For example, you can run a task with steps that automate the following logic:

  1. Compilare un'immagine dell'applicazione WebBuild a web application image
  2. Eseguire il contenitore dell'applicazione WebRun the web application container
  3. Compilare un'immagine di test dell'applicazione WebBuild a web application test image
  4. Eseguire il contenitore di test dell'applicazione Web che esegue test sul contenitore dell'applicazione in esecuzioneRun the web application test container which performs tests against the running application container
  5. Se i test vengono superati, compilare un pacchetto di archivio del grafico di HelmIf the tests pass, build a Helm chart archive package
  6. Eseguire un helm upgrade usando il nuovo pacchetto di archivio del grafico di HelmPerform a helm upgrade using the new Helm chart archive package

Tutti i passaggi vengono eseguiti all'interno di Azure, riducendo così il lavoro per le risorse di calcolo di Azure e liberando l'utente dalla gestione dell'infrastruttura.All steps are performed within Azure, offloading the work to Azure's compute resources and freeing you from infrastructure management. Oltre al Registro Azure Container, si paga solo per le risorse che si usano.Besides your Azure container registry, you pay only for the resources you use. Per informazioni sui prezzi, vedere la sezione relativa alla compilazione del contenitore in Azure container Registry prezzi.For information on pricing, see the Container Build section in Azure Container Registry pricing.

Scenari comuni di attivitàCommon task scenarios

Le attività in più passaggi rendono possibili scenari come la logica seguente:Multi-step tasks enable scenarios like the following logic:

  • Creazione, applicazione di tag ed esecuzione del push di una o più immagini di contenitore, in serie o in parallelo.Build, tag, and push one or more container images, in series or in parallel.
  • Esecuzione e acquisizione di risultati di unit test e code coverage.Run and capture unit test and code coverage results.
  • Esecuzione e acquisizione di test funzionali.Run and capture functional tests. Le attività di Registro Azure Container supportano l'esecuzione di più contenitori, eseguendo una serie di richieste reciproche.ACR Tasks supports running more than one container, executing a series of requests between them.
  • Esecuzione basata su attività, inclusi passaggi precedenti e successivi della creazione di un'immagine del contenitore.Perform task-based execution, including pre/post steps of a container image build.
  • Distribuzione di uno o più contenitori con il motore di distribuzione preferito nell'ambiente di destinazione.Deploy one or more containers with your favorite deployment engine to your target environment.

Definizione di attività in più passaggiMulti-step task definition

Un'attività in più passaggi in Attività di Registro Azure Container viene definita come una serie di passaggi all'interno di un file YAML.A multi-step task in ACR Tasks is defined as a series of steps within a YAML file. Ogni passaggio può specificare le dipendenze dal completamento di uno o più passaggi precedenti.Each step can specify dependencies on the successful completion of one or more previous steps. Sono disponibili i tipi di passaggi di attività seguenti:The following task step types are available:

  • build: creare una o più immagini del contenitore usando la nota sintassi docker build, in serie o in parallelo.build: Build one or more container images using familiar docker build syntax, in series or in parallel.
  • push: eseguire il push di immagini create a un registro contenitori.push: Push built images to a container registry. Sono supportati i registri privati, ad esempio Registro Azure Container, nonché l'hub Docker pubblico.Private registries like Azure Container Registry are supported, as is the public Docker Hub.
  • cmd: eseguire un contenitore, in modo che possa operare come una funzione all'interno del contesto dell'attività in esecuzione.cmd: Run a container, such that it can operate as a function within the context of the running task. È possibile passare parametri a [ENTRYPOINT] del contenitore e specificare proprietà come env, detach e altri parametri docker run comuni.You can pass parameters to the container's [ENTRYPOINT], and specify properties like env, detach, and other familiar docker run parameters. Il tipo di passaggio cmd consente l'esecuzione di test funzionali e di unit test, con l'esecuzione simultanea del contenitore.The cmd step type enables unit and functional testing, with concurrent container execution.

I frammenti di codice seguenti illustrano come combinare questi tipi di passaggi delle attività.The following snippets show how to combine these task step types. Le attività in più passaggi possono essere semplici, come la creazione di un'unica immagine da un documento Dockerfile e il push nel registro, con un file YAML simile a:Multi-step tasks can be as simple as building a single image from a Dockerfile and pushing to your registry, with a YAML file similar to:

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

Oppure possono essere più complesse, ad esempio la definizione fittizia di più passaggi, che includono i passaggi per compilazione, test, pacchetto Helm e distribuzione Helm (la configurazione del registro contenitori e del repository Helm non è illustrata):Or more complex, such as this fictitious multi-step definition which includes steps for build, test, helm package, and helm deploy (container registry and Helm repository configuration not shown):

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

Vedere gli esempi di attività per i file YAML dell'attività in più passaggi e dockerfile per diversi scenari.See task examples for multi-step task YAML files and Dockerfiles for several scenarios.

Eseguire un'attività di esempioRun a sample task

Le attività supportano sia l'esecuzione manuale, denominata "esecuzione veloce" che l'esecuzione automatica su commit GIT o in caso di aggiornamento dell'immagine di base.Tasks support both manual execution, called a "quick run," and automated execution on Git commit or base image update.

Per eseguire un'attività, è necessario innanzitutto definire i passaggi dell'attività in un file YAML, quindi eseguire il comando dell'interfaccia della riga di comando di Azure AZ ACR Run.To run a task, you first define the task's steps in a YAML file, then execute the Azure CLI command az acr run.

Ecco un comando dell'interfaccia della riga di comando di Azure di esempio che esegue un'attività usando un file YAML di attività di esempio.Here's an example Azure CLI command that runs a task using a sample task YAML file. I passaggi creano e quindi eseguono il push di un'immagine.Its steps build and then push an image. Prima di eseguire il comando, aggiornare \<acrName\> con il nome del proprio Registro Azure Container.Update \<acrName\> with the name of your own Azure container registry before running the command.

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

Quando si esegue l'attività, l'output dovrebbe mostrare lo stato di avanzamento di ogni passaggio definito nel file YAML.When you run the task, the output should show the progress of each step defined in the YAML file. Nell'output seguente i passaggi appaiono come acb_step_0 e acb_step_1.In the following output, the steps appear as acb_step_0 and 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

Per altre informazioni sulle creazioni automatiche su commit GIT o in caso di aggiornamento dell'immagine di base, vedere gli articoli Automatizzare la compilazione di immagini e Automatizzare la compilazione di immagini in caso di aggiornamento dell'immagine di base nell'esercitazione.For more information about automated builds on Git commit or base image update, see the Automate image builds and Base image update builds tutorial articles.

Passaggi successiviNext steps

È possibile trovare riferimenti ed esempi sulle attività in più passaggi qui:You can find multi-step task reference and examples here:

  • Task reference (Riferimenti alle attività): tipi, proprietà e utilizzo dei passaggi di attività.Task reference - Task step types, their properties, and usage.
  • Esempi di attività : file di esempio task.yaml e Docker per diversi scenari, semplici da complesse.Task examples - Example task.yaml and Docker files for several scenarios, simple to complex.
  • Repository di comandi: raccolta di contenitori come comandi per Attività di Registro Azure Container.Cmd repo - A collection of containers as commands for ACR tasks.