Köra uppgifter för att skapa, testa och korrigera i flera steg i ACR Tasks

Uppgifter i flera steg utökar funktionen för att skapa och push-överföra en avbildning i ACR Tasks med arbetsflöden med flera steg och flera containrar. Använd uppgifter i flera steg för att skapa och push-överföra flera avbildningar, i serier eller parallellt. Kör sedan avbildningarna som kommandon i en enda aktivitetskörning. Varje steg definierar en containeravbildningsversion eller push-åtgärd och kan även definiera körningen av en container. Varje steg i en uppgift i flera steg använder en container som körningsmiljö.

Viktigt

Om du tidigare skapade uppgifter i förhandsversionen med kommandot az acr build-task behöver de uppgifterna skapas på nytt med hjälp av kommandot az acr task.

Du kan till exempel köra en uppgift med steg som automatiserar följande logik:

  1. Skapa en avbildning av ett webbprogram
  2. Köra webbprogramcontainern
  3. Skapa en testbild för webbprogram
  4. Kör webbprogrammets testcontainer som utför tester mot den programcontainer som körs
  5. Om testerna godkänns skapar du ett Helm-diagramarkivpaket
  6. Utföra en helm upgrade med hjälp av det nya Helm-diagramarkivpaketet

Alla steg utförs i Azure, vilket avlastar arbetet till Azures beräkningsresurser och befriar dig från infrastrukturhantering. Förutom ditt Azure-containerregister betalar du bara för de resurser som du använder. Information om priser finns i avsnittet Container Build i Azure Container Registry prissättning.

Vanliga uppgiftsscenarier

Uppgifter i flera steg möjliggör scenarier som följande logik:

  • Skapa, tagga och push-överföra en eller flera containeravbildningar, i serier eller parallellt.
  • Köra och avbilda resultat för enhetstest och kodtäckning.
  • Kör och avbilda funktionella tester. ACR Tasks stöder körning av fler än en container och kör en serie begäranden mellan dem.
  • Utför uppgiftsbaserad körning, inklusive för-/eftersteg för en containeravbildningsversion.
  • Distribuera en eller flera containrar med din favoritdistributionsmotor till målmiljön.

Uppgiftsdefinition i flera steg

En uppgift i flera steg i ACR Tasks definieras som en serie steg i en YAML-fil. Varje steg kan ange beroenden för slutförandet av ett eller flera föregående steg. Följande typer av uppgiftssteg är tillgängliga:

  • build: Skapa en eller flera containeravbildningar med välbekant docker build syntax, i serier eller parallellt.
  • push: Push-överför skapade avbildningar till ett containerregister. Privata register som Azure Container Registry stöds, liksom den offentliga Docker Hub.
  • cmd: Kör en container så att den kan fungera som en funktion i kontexten för den aktivitet som körs. Du kan skicka parametrar till containerns [ENTRYPOINT]och ange egenskaper som env, detach och andra välbekanta docker run parametrar. Stegtypen cmd möjliggör enhets- och funktionstestning med samtidig containerkörning.

Följande kodfragment visar hur du kombinerar dessa typer av uppgiftssteg. Uppgifter i flera steg kan vara så enkla som att skapa en enskild avbildning från en Dockerfile och push-överföra till registret, med en YAML-fil som liknar:

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

Eller mer komplex, till exempel den här fiktiva flerstegsdefinitionen som innehåller steg för att skapa, testa, helm-paket och helm-distribution (containerregistret och Helm-lagringsplatsens konfiguration visas inte):

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

Se uppgiftsexempel för YAML-filer och Dockerfiles i flera steg för flera scenarier.

Köra en exempeluppgift

Uppgifter stöder både manuell körning, som kallas "snabbkörning" och automatisk körning vid Git-incheckning eller uppdatering av basavbildningar.

Om du vill köra en uppgift definierar du först uppgiftens steg i en YAML-fil och kör sedan Azure CLI-kommandot az acr run.

Här är ett exempel på ett Azure CLI-kommando som kör en uppgift med hjälp av en YAML-exempelfil. Stegen bygger och push-överför sedan en avbildning. Uppdatera \<acrName\> med namnet på ditt eget Azure-containerregister innan du kör kommandot .

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

När du kör uppgiften ska utdata visa förloppet för varje steg som definierats i YAML-filen. I följande utdata visas stegen som acb_step_0 och 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

Mer information om automatiserade versioner av Git-incheckning eller uppdatering av basavbildningar finns i självstudieartiklarna Automatisera avbildningsversioner och Basavbildningsuppdateringsversioner .

Nästa steg

Du hittar uppgiftsreferenser och exempel i flera steg här:

  • Uppgiftsreferens – Typer av aktivitetssteg, deras egenskaper och användning.
  • Uppgiftsexempel – Exempel task.yaml och Docker-filer för flera scenarier, enkla till komplexa.
  • Cmd-lagringsplats – En samling containrar som kommandon för ACR-uppgifter.