Jalankan tugas pembuatan, pengujian, dan patch multi-langkah di Tugas ACR

Tugas multi-langkah memperluas kemampuan build-and-push citra tunggal dari Tugas ACR dengan alur kerja multi-langkah dan berbasis multi-kontainer. Gunakan tugas multi-langkah untuk membangun dan mendorong beberapa citra, secara seri atau paralel. Kemudian jalankan citra tersebut sebagai perintah dalam satu tugas yang dijalankan. Setiap langkah mendefinisikan sebuah build citra kontainer atau pengoperasian push, dan juga dapat menentukan eksekusi sebuah kontainer. Setiap langkah dalam tugas multi-langkah menggunakan kontainer sebagai lingkungan eksekusinya.

Penting

Jika Anda sebelumnya membuat tugas selama pratinjau dengan perintah az acr build-task, tugas tersebut harus dibuat ulang menggunakan perintah az acr task.

Misalnya, Anda dapat menjalankan tugas dengan langkah-langkah yang mengotomatiskan logika berikut:

  1. Buat citra aplikasi web
  2. Menjalankan kontainer aplikasi web
  3. Buat citra uji aplikasi web
  4. Jalankan kontainer pengujian aplikasi web yang melakukan pengujian terhadap wadah aplikasi yang sedang berjalan
  5. Jika pengujian lulus, buat paket arsip bagan Helm
  6. Lakukan helm upgrade menggunakan paket arsip bagan Helm baru

Semua langkah dilakukan dalam Azure, memindahkan pekerjaan ke sumber daya komputasi Azure dan membebaskan Anda dari manajemen infrastruktur. Selain registri kontainer Azure Anda, Anda hanya membayar untuk sumber daya yang Anda gunakan. Untuk informasi tentang harga, lihat bagian Container Build di harga Azure Container Registry.

Skenario tugas umum

Tugas multi-langkah mengaktifkan skenario seperti logika berikut:

  • Buat, beri tag, dan dorong satu atau beberapa citra kontainer, secara seri atau paralel.
  • Jalankan dan tangkap hasil pengujian unit dan cakupan kode.
  • Jalankan dan tangkap pengujian fungsional. Tugas ACR mendukung menjalankan lebih dari satu kontainer, menjalankan serangkaian permintaan di antaranya.
  • Lakukan eksekusi berbasis tugas, termasuk langkah-langkah pra/posting dari build citra kontainer.
  • Terapkan satu atau lebih kontainer dengan mesin penyebaran favorit Anda ke lingkungan target Anda.

Definisi tugas multi-langkah

Tugas multi-langkah dalam Tugas ACR didefinisikan sebagai serangkaian langkah dalam file YAML. Setiap langkah dapat menentukan dependensi pada penyelesaian yang berhasil dari satu atau lebih langkah sebelumnya. Jenis langkah tugas berikut tersedia:

  • build: Buat satu atau beberapa citra kontainer menggunakan sintaks docker build yang sudah dikenal, secara seri atau paralel.
  • push: Dorong gambar yang dibuat ke registri kontainer. Registri pribadi seperti Azure Container Registry didukung, seperti halnya Docker Hub publik.
  • cmd: Jalankan kontainer, sehingga dapat beroperasi sebagai fungsi dalam konteks tugas yang sedang berjalan. Anda dapat meneruskan parameter ke [ENTRYPOINT] kontainer, dan menentukan properti seperti env, detach, dan parameter docker run yang sudah dikenal lainnya. Jenis langkah cmd memungkinkan pengujian unit dan fungsional, dengan eksekusi kontainer bersamaan.

Cuplikan berikut menunjukkan cara menggabungkan jenis langkah tugas ini. Tugas multi-langkah bisa sesederhana membangun satu citra dari Dockerfile dan mendorong ke registri Anda, dengan file YAML yang mirip dengan:

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

Lebih kompleksnya, seperti definisi multi-langkah fiktif ini yang mencakup langkah-langkah untuk membangun, menguji, paket helm, dan menyebarkan helm (registri kontainer dan konfigurasi repositori Helm tidak ditampilkan):

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

Lihat contoh tugas untuk file YAML tugas multi-langkah dan file Docker untuk beberapa skenario.

Jalankan tugas sampel

Tugas mendukung eksekusi manual, yang disebut "jalan cepat", dan eksekusi otomatis pada komit Git atau pembaruan citra dasar.

Untuk menjalankan tugas, Anda terlebih dahulu menentukan langkah tugas dalam file YAML, lalu jalankan perintah Azure CLI az acr run.

Berikut adalah contoh perintah Azure CLI yang menjalankan tugas menggunakan contoh file YAML tugas. Langkah-langkahnya membangun dan kemudian mendorong citra. Perbarui \<acrName\> dengan nama registri kontainer Azure Anda sendiri sebelum menjalankan perintah.

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

Saat Anda menjalankan tugas, output harus menunjukkan kemajuan setiap langkah yang ditentukan dalam file YAML. Pada output berikut, langkah-langkahnya muncul sebagai acb_step_0 dan 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

Untuk informasi selengkapnya tentang pembuatan otomatis pada komit Git atau pembaruan citra dasar, lihat artikel tutorial Build citra otomatis dan Build pembaruan citra dasar.

Langkah berikutnya

Anda dapat menemukan referensi dan contoh tugas multi-langkah di sini:

  • Referensi tugas - Jenis langkah tugas, propertinya, dan penggunaannya.
  • Contoh tugas - Contoh task.yaml dan file Docker untuk beberapa skenario, sederhana hingga kompleks.
  • Cmd repo - Kumpulan kontainer sebagai perintah untuk tugas ACR.