Udostępnij za pośrednictwem


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

Zadania wieloetapowe rozszerzają funkcję kompilowania i wypychania pojedynczego obrazu usługi ACR Tasks przy użyciu wieloetapowych przepływów pracy opartych na wielu kontenerach. Zadania wieloetapowe umożliwiają kompilowanie i wypychanie kilku 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.

Można na przykład uruchomić zadanie z krokami automatyzujący 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ą, skompiluj pakiet archiwum pakietu archiwum pakietu Helm
  6. helm upgrade Wykonywanie przy użyciu nowego pakietu archiwum pakietu helm chart

Wszystkie kroki są wykonywane na platformie Azure, odciążając pracę z zasobami obliczeniowymi platformy Azure i zwalniając Cię z 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 (Kompilacja kontenera) w cenniku usługi Azure Container Registry.

Typowe scenariusze zadań

Zadania wieloetapowe umożliwiają wykonywanie takich scenariuszy jak następująca logika:

  • Twórz, taguj i wypychaj co najmniej jeden obraz 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 między nimi serię żądań.
  • Wykonaj wykonywanie na podstawie zadań, w tym kroki przed/po kompilacji obrazu kontenera.
  • Wdróż co najmniej jeden kontener za pomocą 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: Skompiluj 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 Usługa Azure Container Registry, są obsługiwane, podobnie jak publiczna usługa 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. cmd Typ kroku umożliwia testowanie jednostkowe i funkcjonalne z równoczesnymi wykonywaniem kontenera.

Poniższe fragmenty kodu pokazują, jak połączyć te typy kroków zadań. Zadania wieloetapowe mogą być tak proste, jak tworzenie pojedynczego obrazu z pliku Dockerfile i wypychanie 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 kompilacji, 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ą zarówno wykonywanie ręczne, nazywane "szybkim uruchomieniem", jak i automatyczne wykonywanie w ramach zatwierdzania usługi 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\> nazwę 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 automatyzowania kompilacji obrazów i aktualizacji obrazu podstawowego.

Następne kroki

Dokumentacja zadań wieloetapowych i przykłady można znaleźć tutaj: