Taken voor bouwen, testen en patchen met meerdere stappen uitvoeren in ACR Tasks

Taken met meerdere stappen breiden de mogelijkheden voor het bouwen en pushen van één installatiekopieën van ACR Tasks uit met werkstromen met meerdere stappen en op meerdere containers gebaseerde werkstromen. Gebruik taken met meerdere stappen om verschillende installatiekopieën te bouwen en te pushen, in reeksen of parallel. Voer deze installatiekopieën vervolgens uit als opdrachten binnen één taakuitvoering. Elke stap definieert een build- of pushbewerking voor een containerinstallatiekopieën en kan ook de uitvoering van een container definiëren. Elke stap in een taak met meerdere stappen gebruikt een container als uitvoeringsomgeving.

Belangrijk

Als u eerder taken hebt gemaakt tijdens de preview met de opdracht az acr build-task, moeten deze taken opnieuw worden gemaakt met de opdracht az acr task.

U kunt bijvoorbeeld een taak uitvoeren met stappen waarmee de volgende logica wordt geautomatiseerd:

  1. Een webtoepassingsinstallatiekopieën bouwen
  2. De webtoepassingscontainer uitvoeren
  3. Een testinstallatiekopieën voor een webtoepassing bouwen
  4. Voer de testcontainer van de webtoepassing uit die tests uitvoert op de actieve toepassingscontainer
  5. Als de tests slagen, bouwt u een Helm-grafiekarchiefpakket
  6. helm upgrade Een uitvoeren met behulp van het nieuwe Helm-grafiekarchiefpakket

Alle stappen worden uitgevoerd in Azure, waarbij het werk wordt ge offload naar de rekenresources van Azure en u wordt bevrijd van infrastructuurbeheer. Naast uw Azure-containerregister betaalt u alleen voor de resources die u gebruikt. Zie de sectie Container Build in Azure Container Registry prijzen voor meer informatie over prijzen.

Veelvoorkomende taakscenario's

Taken met meerdere stappen maken scenario's mogelijk zoals de volgende logica:

  • Een of meer containerinstallatiekopieën bouwen, taggen en pushen, in serie of parallel.
  • Test- en codedekkingsresultaten uitvoeren en vastleggen.
  • Functionele tests uitvoeren en vastleggen. ACR Tasks ondersteunt het uitvoeren van meer dan één container en het uitvoeren van een reeks aanvragen tussen de containers.
  • Op taken gebaseerde uitvoering uitvoeren, inclusief pre-/post-stappen van een build van een containerinstallatiekopieën.
  • Implementeer een of meer containers met uw favoriete implementatie-engine in uw doelomgeving.

Taakdefinitie met meerdere stappen

Een taak met meerdere stappen in ACR Tasks wordt gedefinieerd als een reeks stappen in een YAML-bestand. Elke stap kan afhankelijkheden opgeven voor het voltooien van een of meer eerdere stappen. De volgende typen taakstappen zijn beschikbaar:

  • build: maak een of meer containerinstallatiekopieën met behulp van vertrouwde docker build syntaxis, in reeksen of parallel.
  • push: Push ingebouwde installatiekopieën naar een containerregister. Privéregisters zoals Azure Container Registry worden ondersteund, net als de openbare Docker Hub.
  • cmd: Voer een container uit, zodat deze kan worden gebruikt als een functie binnen de context van de actieve taak. U kunt parameters doorgeven aan de container [ENTRYPOINT]en eigenschappen opgeven zoals env, loskoppelen en andere vertrouwde docker run parameters. Het cmd staptype maakt eenheids- en functionele tests mogelijk, met gelijktijdige uitvoering van containers.

De volgende codefragmenten laten zien hoe u deze taakstaptypen kunt combineren. Taken met meerdere stappen kunnen net zo eenvoudig zijn als het bouwen van één installatiekopieën vanuit een Dockerfile en het pushen naar uw register, met een YAML-bestand dat vergelijkbaar is met:

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

Of complexer, zoals deze fictieve definitie met meerdere stappen die stappen bevat voor bouwen, testen, Helm-pakket en Helm-implementatie (configuratie van containerregister en Helm-opslagplaats niet weergegeven):

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

Zie taakvoorbeelden voor YAML-bestanden met meerdere stappen en Dockerfiles voor verschillende scenario's.

Een voorbeeldtaak uitvoeren

Taken ondersteunen zowel handmatige uitvoering, een 'snelle uitvoering' genoemd, als automatische uitvoering op Git-doorvoer of basisinstallatiekopieën bijwerken.

Als u een taak wilt uitvoeren, definieert u eerst de stappen van de taak in een YAML-bestand en voert u vervolgens de Azure CLI-opdracht az acr run uit.

Hier volgt een voorbeeld van een Azure CLI-opdracht waarmee een taak wordt uitgevoerd met behulp van een YAML-voorbeeldtaakbestand. Met de stappen wordt een installatiekopieën gebouwd en vervolgens gepusht. Werk \<acrName\> bij met de naam van uw eigen Azure-containerregister voordat u de opdracht uitvoert.

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

Wanneer u de taak uitvoert, moet de uitvoer de voortgang van elke stap weergeven die is gedefinieerd in het YAML-bestand. In de volgende uitvoer worden de stappen weergegeven als acb_step_0 en 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

Zie de zelfstudies Builds van installatiekopieën automatiseren en Builds van basisinstallatiekopieën automatiseren voor meer informatie over geautomatiseerde builds op Git-doorvoer of het bijwerken van basisinstallatiekopieën .

Volgende stappen

U vindt hier naslaginformatie over taken met meerdere stappen en voorbeelden:

  • Taakverwijzing : typen taakstappen, hun eigenschappen en gebruik.
  • Taakvoorbeelden : voorbeeld task.yaml - en Docker-bestanden voor verschillende scenario's, eenvoudig tot complex.
  • Cmd-opslagplaats : een verzameling containers als opdrachten voor ACR-taken.