Ausführen von Erstellungs-, Test- und Patchtasks mit mehreren Schritten in ACR Tasks

Tasks mit mehreren Schritten erweitern die ACR Tasks-Funktion zum Erstellen und Pushen einzelner Images um auf mehreren Containern basierende Workflows mit mehreren Schritten. Verwenden Sie mehrstufige Aufgaben zum Erstellen und Pushen mehrerer Images nacheinander oder parallel. Führen Sie diese Images dann als Befehle in einer einzelnen Aufgabenausführung aus. Jeder Schritt definiert einen Build- oder Pushvorgang für ein Containerimage und kann auch die Ausführung eines Containers definieren. Jeder Schritt in einem Task mit mehreren Schritten verwendet einen Container als Ausführungsumgebung.

Wichtig

Wenn Sie in der Vorschauversion bereits Aufgaben mit dem Befehl az acr build-task erstellt haben, müssen diese Aufgaben mit dem Befehl az acr task neu erstellt werden.

Sie können z.B. eine Aufgabe mit Schritten ausführen, die die folgende Logik automatisieren:

  1. Erstellen eines Webanwendungsimages
  2. Ausführen des Webanwendungscontainers
  3. Erstellen eines Webanwendungs-Testimages
  4. Ausführen des Webanwendungs-Testcontainers, der Tests für den aktuell ausgeführten Anwendungscontainer durchführt
  5. Wenn die Tests erfolgreich sind: Erstellen eines Helm-Chart-Archivpakets
  6. Ausführen von helm upgrade mithilfe des neuen Helm-Chart-Archivpakets

Alle Schritte werden in Azure ausgeführt – damit wird die Arbeit auf die Azure-Computeressourcen ausgelagert, und Sie müssen sich nicht um die Infrastrukturverwaltung kümmern. Sie zahlen neben Ihrer Azure-Containerregistrierung nur für die Ressourcen, die Sie tatsächlich verwenden. Informationen zu den Preisen finden Sie auf der Seite Azure Container Registry – Preise im Abschnitt Container Build.

Gängige Tasks

Aufgaben mit mehreren Schritten ermöglichen Szenarien wie die folgende Logik:

  • Erstellen, Taggen und Pushen von einem oder mehreren Containerimages, seriell oder parallel
  • Ausführen von Komponententests und Code Coverage und Erfassen der Ergebnisse
  • Ausführen und Erfassen von Funktionstests ACR-Aufgaben unterstützen die Ausführung mehrerer Container, die eine Reihe von Anforderungen ausführen.
  • Taskbasierte Ausführung, einschließlich vor- und nachbereitenden Schritten eines Containerimage-Buildvorgangs
  • Bereitstellen von einem oder mehreren Containern mit Ihrer bevorzugten Bereitstellungs-Engine in Ihrer Zielumgebung

Definition von Tasks mit mehreren Schritten

Ein aus mehreren Schritten bestehender Task in ACR Tasks ist als eine Reihe von Schritten innerhalb einer YAML-Datei definiert. Jeder Schritt kann Abhängigkeiten vom erfolgreichen Abschluss eines der vorherigen Schritte angeben. Folgende Arten von Taskschritten sind verfügbar:

  • build: Erstellen von einem oder mehreren Containerimages mithilfe der vertrauten docker build-Syntax, seriell oder parallel.
  • push: Pushen von erstellten Images in eine Containerregistrierung. Private Registrierungen wie Azure Container Registry werden ebenso unterstützt wie der öffentliche Docker-Hub.
  • cmd: Ausführen eines Containers in einer Weise, dass dieser als Funktion im Kontext des ausgeführten Tasks dienen kann. Sie können Parameter an den [ENTRYPOINT] des Containers übergeben und Eigenschaften wie „env“, „detach“ sowie weitere bekannte docker run-Parameter angeben. Der Schritttyp cmd ermöglicht Komponenten- und Funktionstests bei gleichzeitiger Ausführung von Containern.

Die folgenden Codeausschnitte zeigen, wie solche Taskschritttypen kombiniert werden. Tasks mit mehreren Schritten können einfach nur das Erstellen eines einzelnen Images aus einem Dockerfile und dessen Übertragung in Ihre Registrierung umfassen. Dabei wird eine ähnliche YAML-Datei wie diese verwendet:

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

Sie können auch komplexer sein, z.B. wie bei dieser fiktiven Definition mit mehreren Schritten für Erstellen, Testen, Helm-Paket und Helm-Bereitstellung (Containerregistrierung und Helm-Repository nicht gezeigt):

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

Unter Taskbeispiele finden Sie YAML-Dateien und Dockerfiles mit mehreren Schritten für verschiedene Szenarios.

Ausführen eines Beispieltasks

Tasks unterstützen sowohl die manuelle Ausführung – die so genannte „schnelle Ausführung“ – als auch die automatisierte Ausführung per Git-Commit oder Aktualisierung des Basisimages.

Um einen Task auszuführen, definieren Sie zunächst die Taskschritte in einer YAML-Datei und führen dann den Azure CLI-Befehl az acr run aus.

Hier finden Sie einen Azure CLI-Beispielbefehl, der einen Task mithilfe einer YAML-Datei für den Beispieltask ausführt. Die Schritte dieses Tasks erstellen und pushen ein Image. Aktualisieren Sie \<acrName\> mit dem Namen Ihrer eigenen Azure-Containerregistrierung, bevor Sie den Befehl ausführen.

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

Wenn Sie den Task ausführen, sollte die Ausgabe den Status jedes in der YAML-Datei definierten Schritts zeigen. In der folgenden Ausgabe werden die Schritt als acb_step_0 und acb_step_1 angezeigt.

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

Weitere Informationen zu automatisierten Builds per Git-Commit oder Update des Basisimages finden Sie in den Tutorialartikeln Automatisieren von Buildvorgängen für Containerimages und Automatisieren von Buildvorgängen für Images nach der Aktualisierung des Basisimages.

Nächste Schritte

Hier finden Sie Referenzen und Beispiele für Tasks mit mehreren Schritten:

  • Taskreferenz: Arten von Taskschritten, zugehörige Eigenschaften und Verwendung
  • Taskbeispiele: Beispieldateien und Docker-Dateien vom Typ task.yaml für verschiedene Szenarios (von einfach bis komplex)
  • Cmd-Repository: Eine Sammlung von Containern als Befehle für ACR-Tasks.