Spouštění úloh sestavení, testování a oprav s více kroky ve službě ACR Tasks

Úlohy s více kroky rozšiřují funkci sestavení a nabízení s jednou imagí služby ACR Tasks o pracovní postupy založené na více krocích s více kontejnery. Pomocí vícekrokových úloh můžete sestavovat a nasdílovat několik imagí, a to v řadách nebo paralelně. Potom tyto image spusťte jako příkazy v rámci jednoho spuštění úlohy. Každý krok definuje operaci sestavení image kontejneru nebo nasdílení změn a může také definovat spuštění kontejneru. Každý krok ve vícekrokové úloze používá kontejner jako své spouštěcí prostředí.

Důležité

Pokud jste už dříve vytvořili úlohy ve verzi Preview pomocí příkazu az acr build-task, tyto úlohy bude potřeba vytvořit znovu pomocí příkazu az acr task.

Můžete například spustit úlohu s kroky, které automatizují následující logiku:

  1. Obrázek sestavení webové aplikace
  2. Spuštění kontejneru webové aplikace
  3. Testovací obrázek sestavení webové aplikace
  4. Spuštění testovacího kontejneru webové aplikace, který provádí testy spuštěného kontejneru aplikace
  5. Pokud testy projdou, sestavte balíček archivu chartů Helm.
  6. helm upgrade Provedení příkazu pomocí nového balíčku archivu chartů Helm

Všechny kroky se provádějí v rámci Azure, převedou práci na výpočetní prostředky Azure a osvobodí vás od správy infrastruktury. Kromě registru kontejneru Azure platíte jenom za prostředky, které používáte. Informace o cenách najdete v části Sestavení kontejneru v tématu Azure Container Registry ceny.

Běžné scénáře úloh

Úlohy s více kroky umožňují scénáře, jako je následující logika:

  • Sestavte, označujte a nasdílete jednu nebo více imagí kontejneru, a to v řadách nebo paralelně.
  • Spouštění a zachytávání výsledků testování jednotek a pokrytí kódu
  • Spouštění a zachytávání funkčních testů ACR Tasks podporuje spouštění více než jednoho kontejneru a spouštění řady požadavků mezi nimi.
  • Provádění na základě úloh, včetně předběžných a následných kroků sestavení image kontejneru.
  • Nasaďte jeden nebo více kontejnerů s vaším oblíbeným modulem nasazení do cílového prostředí.

Definice úlohy s více kroky

Úloha s více kroky v ACR Tasks je definována jako řada kroků v souboru YAML. Každý krok může určovat závislosti na úspěšném dokončení jednoho nebo více předchozích kroků. K dispozici jsou následující typy kroků úkolů:

  • build: Sestavte jednu nebo více imagí kontejneru pomocí známé docker build syntaxe, v řadách nebo paralelně.
  • push: Odeslání sestavených imagí do registru kontejneru. Podporují se soukromé registry, jako jsou Azure Container Registry, stejně jako veřejné Docker Hub.
  • cmd: Spusťte kontejner, který může fungovat jako funkce v kontextu spuštěné úlohy. Můžete předat parametry kontejneru [ENTRYPOINT]a zadat vlastnosti, jako je env, detach a další známé docker run parametry. Typ cmd kroku umožňuje testování jednotek a funkcí se souběžným spouštěním kontejnerů.

Následující fragmenty kódu ukazují, jak tyto typy kroků úkolů zkombinovat. Úlohy s více kroky můžou být jednoduché, třeba vytvořit jednu image ze souboru Dockerfile a nasdílit ho do registru pomocí souboru YAML podobného:

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

Nebo složitější, například tato fiktivní definice s více kroky, která zahrnuje kroky pro sestavení, testování, balíček Helm a nasazení helmu (konfigurace registru kontejneru a úložiště Helm se nezobrazuje):

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

Projděte si příklady úloh pro soubory YAML a soubory Dockerfile pro vícekrokové úlohy pro několik scénářů.

Spuštění ukázkové úlohy

Úlohy podporují ruční spuštění označované jako "rychlé spuštění" i automatizované spouštění při potvrzení Gitu nebo aktualizaci základní image.

Pokud chcete spustit úlohu, nejprve nadefinujte kroky úlohy v souboru YAML a pak spusťte příkaz Azure CLI az acr run.

Tady je příklad příkazu Azure CLI, který spustí úlohu pomocí ukázkového souboru YAML úlohy. Jeho kroky sestaví a nasdílí image. Před spuštěním příkazu proveďte aktualizaci \<acrName\> s názvem vašeho vlastního registru kontejneru Azure.

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

Při spuštění úlohy by výstup měl zobrazit průběh každého kroku definovaného v souboru YAML. V následujícím výstupu se kroky zobrazí jako acb_step_0 a 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

Další informace o automatizovaných sestaveních při potvrzení Gitu nebo aktualizaci základní image najdete v článcích o kurzu Automatizace sestavení imagí a Sestavení základní aktualizace image .

Další kroky

Referenční informace o vícekrokových úlohách a příklady najdete tady: