Udostępnij za pośrednictwem


Uruchamianie wieloetapowych zadań kompilacji, testowania i poprawek w zadaniach usługi ACR Tasks

Zadania wieloetapowe rozszerzają możliwości kompilowania i wypychania pojedynczego obrazu usługi ACR Tasks z wieloetapowymi przepływami pracy opartymi na wielu kontenerach. Użyj zadań wieloetapowych, aby skompilować i wypchnąć kilka obrazów w serii lub równolegle. Następnie uruchom te obrazy jako polecenia w ramach jednego uruchomienia zadania. Każdy krok definiuje kompilację obrazu kontenera lub operację wypychania, a także może definiować wykonywanie kontenera. Każdy krok w zadaniu wieloetapowym używa kontenera jako środowiska wykonywania.

Ważne

Jeśli wcześniej utworzono zadania za pomocą wersji zapoznawczej przy użyciu polecenia az acr build-task, trzeba je utworzyć ponownie przy użyciu polecenia az acr task.

Na przykład można uruchomić zadanie z krokami automatyzujących następującą logikę:

  1. Tworzenie obrazu aplikacji internetowej
  2. Uruchamianie kontenera aplikacji internetowej
  3. Tworzenie obrazu testowego aplikacji internetowej
  4. Uruchamianie kontenera testowego aplikacji internetowej, który wykonuje testy względem uruchomionego kontenera aplikacji
  5. Jeśli testy przejdą pomyślnie, skompiluj pakiet archiwum wykresu helm
  6. helm upgrade Wykonywanie przy użyciu nowego pakietu archiwum wykresu programu Helm

Wszystkie kroki są wykonywane na platformie Azure, odciążając pracę z zasobami obliczeniowymi platformy Azure i uwalniając Cię od zarządzania infrastrukturą. Oprócz rejestru kontenerów platformy Azure płacisz tylko za używane zasoby. Aby uzyskać informacje na temat cen, zobacz sekcję Container Build w Azure Container Registry cenniku.

Typowe scenariusze zadań

Zadania wieloetapowe umożliwiają scenariusze, takie jak następująca logika:

  • Kompilowanie, tagowanie i wypychanie co najmniej jednego obrazu kontenera w serii lub równolegle.
  • Uruchamianie i przechwytywanie wyników testu jednostkowego i pokrycia kodu.
  • Uruchamianie i przechwytywanie testów funkcjonalnych. Usługa ACR Tasks obsługuje uruchamianie więcej niż jednego kontenera, wykonując serię żądań między nimi.
  • Wykonaj wykonywanie oparte na zadaniach, w tym kroki wstępne/post kompilacji obrazu kontenera.
  • Wdróż co najmniej jeden kontener przy użyciu ulubionego aparatu wdrażania w środowisku docelowym.

Definicja zadania wieloetapowego

Zadanie wieloetapowe w usłudze ACR Tasks jest definiowane jako seria kroków w pliku YAML. Każdy krok może określać zależności od pomyślnego ukończenia co najmniej jednego poprzedniego kroku. Dostępne są następujące typy kroków zadań:

  • build: Utwórz co najmniej jeden obraz kontenera przy użyciu znanej docker build składni w serii lub równolegle.
  • push: Wypychanie skompilowanych obrazów do rejestru kontenerów. Prywatne rejestry, takie jak Azure Container Registry, są obsługiwane, podobnie jak publiczne Docker Hub.
  • cmd: Uruchom kontener, tak aby mógł działać jako funkcja w kontekście uruchomionego zadania. Parametry można przekazać do kontenera [ENTRYPOINT]i określić właściwości, takie jak env, detach i inne znane docker run parametry. Typ cmd kroku umożliwia testowanie jednostkowe i funkcjonalne z współbieżnymi wykonywaniem kontenera.

Poniższe fragmenty kodu pokazują, jak połączyć te typy kroków zadań. Zadania wieloetapowe mogą być proste w tworzeniu pojedynczego obrazu z pliku Dockerfile i wypychaniu do rejestru przy użyciu pliku YAML podobnego do:

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

Lub bardziej złożone, takie jak fikcyjna definicja wieloetapowa, która obejmuje kroki tworzenia, testowania, pakietu helm i wdrażania helm (nie pokazano konfiguracji rejestru kontenerów i repozytorium helm):

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

Zobacz przykłady zadań dla plików YAML zadań wieloetapowych i plików Dockerfile w kilku scenariuszach.

Uruchamianie przykładowego zadania

Zadania obsługują wykonywanie ręczne, nazywane "szybkim uruchomieniem" i automatyczne wykonywanie w ramach zatwierdzania git lub aktualizacji obrazu podstawowego.

Aby uruchomić zadanie, najpierw zdefiniuj kroki zadania w pliku YAML, a następnie wykonaj polecenie interfejsu wiersza polecenia platformy Azure az acr run.

Oto przykładowe polecenie interfejsu wiersza polecenia platformy Azure, które uruchamia zadanie przy użyciu przykładowego pliku YAML zadania. Jego kroki kompilują, a następnie wypychają obraz. Przed uruchomieniem polecenia zaktualizuj \<acrName\> ciąg przy użyciu nazwy własnego rejestru kontenerów platformy Azure.

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

Po uruchomieniu zadania dane wyjściowe powinny pokazywać postęp każdego kroku zdefiniowanego w pliku YAML. W poniższych danych wyjściowych kroki są wyświetlane jako acb_step_0 i 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

Aby uzyskać więcej informacji na temat automatycznych kompilacji w ramach zatwierdzania usługi Git lub aktualizacji obrazu podstawowego, zobacz artykuły z samouczkiem Automatyzowanie kompilacji obrazów i aktualizacji obrazu podstawowego .

Następne kroki

Informacje o zadaniach wieloetapowych i przykłady można znaleźć tutaj:

  • Dokumentacja zadania — typy kroków zadań, ich właściwości i użycie.
  • Przykłady zadań — przykładowe task.yaml i pliki platformy Docker dla kilku scenariuszy, proste i złożone.
  • Repozytorium Cmd — kolekcja kontenerów jako poleceń dla zadań usługi ACR.