Cara mengkonsumsi dan memelihara konten publik dengan Azure Container Registry Tasks

Artikel ini menyajikan contoh alur kerja di Azure Container Registry untuk membantu Anda mengelola mengkonsumsi dan memelihara konten publik:

  1. Impor salinan lokal gambar publik dependen.
  2. Validasi gambar publik melalui pemindaian keamanan dan pengujian fungsional.
  3. Promosikan gambar ke registri privat untuk penggunaan internal.
  4. Picu pembaruan gambar dasar untuk aplikasi tergantung pada konten publik.
  5. Gunakan Azure Container Registry Tasks untuk mengotomatiskan alur kerja ini.

Alur kerja diringkas dalam gambar berikut:

Menggunakan Alur Kerja konten publik

Alur kerja impor yang terjaga membantu mengelola dependensi organisasi Anda pada artefak yang dikelola secara eksternal - misalnya, gambar yang bersumber dari registri publik termasuk Docker Hub, GCR, Quay, GitHub Container Registry, Microsoft Container Registry, atau bahkan registri kontainer Azure lainnya.

Untuk latar belakang tentang risiko yang disebabkan oleh dependensi pada konten publik dan cara menggunakan Azure Container Registry untuk menguranginya, lihat Memposting Blog Konten Publik Yang Menggunakan OCI dan Mengelola konten publik dengan Azure Container Registry.

Anda dapat menggunakan Azure Cloud Shell atau pemasangan lokal Azure CLI untuk menyelesaikan mulai cepat ini. Azure CLI versi 2.10 atau yang lebih baru direkomendasikan. Jika Anda perlu memasang atau memutakhirkan, lihat Memasang Azure CLI.

Ringkasan skenario

impor komponen alur kerja

Penelusuran ini mengatur:

  1. Tiga registri kontainer, mewakili:
    • Docker Hub yang disimulasikan (publicregistry) untuk mendukung perubahan gambar dasar
    • Registri tim (contoso) untuk berbagi gambar pribadi
    • Registri bersama perusahaan/tim (baseartifacts) untuk konten publik yang diimpor
  2. Tugas ACR di setiap registri. Tugas-tugas:
    1. Menyusun gambar publik node yang disimulasikan
    2. Mengimpor dan memvalidasi gambar node ke registri bersama perusahaan/tim
    3. Menyusun dan menyebarkan gambar hello-world
  3. Definisi tugas ACR, termasuk konfigurasi untuk:
  4. Kumpulan kredensial registri, yang merupakan penunjuk ke vault kunci
  5. Kumpulan rahasia, tersedia dalam sebuah acr-task.yaml, yang merupakan penunjuk ke vault kunci
  6. Kumpulan nilai yang dikonfigurasi yang digunakan dalam acr-task.yaml
  7. Azure key vault untuk mengamankan semua rahasia
  8. Instans kontainer Azure, yang meng-hosting aplikasi build hello-world

Prasyarat

Langkah-langkah berikut mengkonfigurasi nilai untuk sumber daya yang dibuat dan digunakan di panduan.

Mengatur variabel lingkungan

Mengkonfigurasi variabel yang unik untuk lingkungan Anda. Kami mengikuti praktik terbaik untuk menempatkan sumber daya dengan konten yang tahan lama di grup sumber daya mereka sendiri untuk meminimalkan penghapusan yang tidak disengaja. Namun, Anda dapat menempatkannya dalam satu grup sumber daya jika diinginkan.

Contoh dalam artikel ini diformat untuk shell bash.

# Set the three registry names, must be globally unique:
REGISTRY_PUBLIC=publicregistry
REGISTRY_BASE_ARTIFACTS=contosobaseartifacts
REGISTRY=contoso

# set the location all resources will be created in:
RESOURCE_GROUP_LOCATION=eastus

# default resource groups
REGISTRY_PUBLIC_RG=${REGISTRY_PUBLIC}-rg
REGISTRY_BASE_ARTIFACTS_RG=${REGISTRY_BASE_ARTIFACTS}-rg
REGISTRY_RG=${REGISTRY}-rg

# fully qualified registry urls
REGISTRY_DOCKERHUB_URL=docker.io
REGISTRY_PUBLIC_URL=${REGISTRY_PUBLIC}.azurecr.io
REGISTRY_BASE_ARTIFACTS_URL=${REGISTRY_BASE_ARTIFACTS}.azurecr.io
REGISTRY_URL=${REGISTRY}.azurecr.io

# Azure key vault for storing secrets, name must be globally unique
AKV=acr-task-credentials
AKV_RG=${AKV}-rg

# ACI for hosting the deployed application
ACI=hello-world-aci
ACI_RG=${ACI}-rg

Repositori dan token Git

Untuk mensimulasikan lingkungan Anda, fork masing-masing git repositori berikut ke dalam repositori yang dapat Anda kelola.

Kemudian, perbarui variabel berikut untuk repositori fork Anda.

:main Ditambahkan ke akhir URL git mewakili cabang repositori default.

GIT_BASE_IMAGE_NODE=https://github.com/<your-fork>/base-image-node.git#main
GIT_NODE_IMPORT=https://github.com/<your-fork>/import-baseimage-node.git#main
GIT_HELLO_WORLD=https://github.com/<your-fork>/hello-world.git#main

Anda memerlukan token akses GitHub (PAT) untuk Tugas ACR untuk mengkloning dan membuat webhook Git. Untuk langkah-langkah membuat token dengan izin yang diperlukan ke repositori pribadi, lihat Membuat token akses GitHub.

GIT_TOKEN=<set-git-token-here>

Kredensial Docker Hub

Untuk menghindari permintaan pembatasan dan identitas saat menarik gambar dari Docker Hub, buat token Docker Hub. Kemudian, atur variabel lingkungan berikut:

REGISTRY_DOCKERHUB_USER=<yourusername>
REGISTRY_DOCKERHUB_PASSWORD=<yourtoken>

Membuat registri

Menggunakan perintah Azure CLI, buat tiga registri kontainer tingkat Premium, masing-masing dalam grup sumber dayanya sendiri:

az group create --name $REGISTRY_PUBLIC_RG --location $RESOURCE_GROUP_LOCATION
az acr create --resource-group $REGISTRY_PUBLIC_RG --name $REGISTRY_PUBLIC --sku Premium

az group create --name $REGISTRY_BASE_ARTIFACTS_RG --location $RESOURCE_GROUP_LOCATION
az acr create --resource-group $REGISTRY_BASE_ARTIFACTS_RG --name $REGISTRY_BASE_ARTIFACTS --sku Premium

az group create --name $REGISTRY_RG --location $RESOURCE_GROUP_LOCATION
az acr create --resource-group $REGISTRY_RG --name $REGISTRY --sku Premium

Membuat key vault dan mengatur rahasia

Membuat Key Vault:

az group create --name $AKV_RG --location $RESOURCE_GROUP_LOCATION
az keyvault create --resource-group $AKV_RG --name $AKV

Atur nama pengguna dan token Docker Hub di key vault:

az keyvault secret set \
--vault-name $AKV \
--name registry-dockerhub-user \
--value $REGISTRY_DOCKERHUB_USER

az keyvault secret set \
--vault-name $AKV \
--name registry-dockerhub-password \
--value $REGISTRY_DOCKERHUB_PASSWORD

Atur dan verifikasi Git PAT di key vault:

az keyvault secret set --vault-name $AKV --name github-token --value $GIT_TOKEN

az keyvault secret show --vault-name $AKV --name github-token --query value -o tsv

Membuat grup sumber daya untuk instans kontainer Azure

Grup sumber daya ini digunakan dalam tugas selanjutnya saat menyebarkan gambar hello-world.

az group create --name $ACI_RG --location $RESOURCE_GROUP_LOCATION

Membuat gambar dasar node publik

Untuk mensimulasikan gambar node di Docker Hub, buat tugas ACR untuk membangun dan memelihara gambar publik. Penyetelan ini memungkinkan simulasi perubahan oleh penyiap gambar node.

az acr task create \
  --name node-public \
  -r $REGISTRY_PUBLIC \
  -f acr-task.yaml \
  --context $GIT_BASE_IMAGE_NODE \
  --git-access-token $(az keyvault secret show \
                        --vault-name $AKV \
                        --name github-token \
                        --query value -o tsv) \
  --set REGISTRY_FROM_URL=${REGISTRY_DOCKERHUB_URL}/ \
  --assign-identity

Untuk menghindari pembatasan Docker, tambahkan kredensial Docker Hub ke tugas. Perintah kredensial tugas acr dapat digunakan untuk meneruskan kredensial Docker ke registri apa pun, termasuk Docker Hub.

az acr task credential add \
  -n node-public \
  -r $REGISTRY_PUBLIC \
  --login-server $REGISTRY_DOCKERHUB_URL \
  -u https://${AKV}.vault.azure.net/secrets/registry-dockerhub-user \
  -p https://${AKV}.vault.azure.net/secrets/registry-dockerhub-password \
  --use-identity [system]

Berikan akses tugas ke nilai baca dari key vault:

az keyvault set-policy \
  --name $AKV \
  --resource-group $AKV_RG \
  --object-id $(az acr task show \
                  --name node-public \
                  --registry $REGISTRY_PUBLIC \
                  --query identity.principalId --output tsv) \
  --secret-permissions get

Tugas dapat dipicu oleh komit Git, pembaruan gambar dasar, timer, atau menjalankan manual.

Jalankan tugas secara manual untuk menghasilkan gambar node:

az acr task run -r $REGISTRY_PUBLIC -n node-public

Mencantumkan gambar dalam registri publik yang disimulasikan:

az acr repository show-tags -n $REGISTRY_PUBLIC --repository node

Membuat gambar hello-world

Berdasarkan simulasi gambar node publik, bangun gambar hello-world.

Buat token untuk akses tarik ke registri publik yang disimulasikan

Buat token akses ke registri publik yang disimulasikan, tercakup ke pull. Kemudian, atur ke dalam key vault:

az keyvault secret set \
  --vault-name $AKV \
  --name "registry-${REGISTRY_PUBLIC}-user" \
  --value "registry-${REGISTRY_PUBLIC}-user"

az keyvault secret set \
  --vault-name $AKV \
  --name "registry-${REGISTRY_PUBLIC}-password" \
  --value $(az acr token create \
              --name "registry-${REGISTRY_PUBLIC}-user" \
              --registry $REGISTRY_PUBLIC \
              --scope-map _repositories_pull \
              -o tsv \
              --query credentials.passwords[0].value)

Membuat token untuk akses tarik oleh Azure Container Instances

Membuat token akses ke registri yang meng-hosting gambar hello-world, tercakup untuk penarikan. Kemudian, atur ke dalam key vault:

az keyvault secret set \
  --vault-name $AKV \
  --name "registry-${REGISTRY}-user" \
  --value "registry-${REGISTRY}-user"

az keyvault secret set \
  --vault-name $AKV \
  --name "registry-${REGISTRY}-password" \
  --value $(az acr token create \
              --name "registry-${REGISTRY}-user" \
              --registry $REGISTRY \
              --repository hello-world content/read \
              -o tsv \
              --query credentials.passwords[0].value)

Membuat tugas untuk menyusun dan memelihara gambar hello-world

Perintah berikut membuat tugas dari definisi di acr-tasks.yaml di repositori hello-world. Langkah-langkah tugas menyusun gambar hello-world lalu menerapkannya ke Azure Container Instances. Grup sumber daya untuk Azure Container Instances dibuat di bagian sebelumnya. Dengan memanggil az container create di tugas hanya dengan perbedaan dalam image:tag, tugas diterapkan ke contoh yang sama di seluruh panduan ini.

az acr task create \
  -n hello-world \
  -r $REGISTRY \
  -f acr-task.yaml \
  --context $GIT_HELLO_WORLD \
  --git-access-token $(az keyvault secret show \
                        --vault-name $AKV \
                        --name github-token \
                        --query value -o tsv) \
  --set REGISTRY_FROM_URL=${REGISTRY_PUBLIC_URL}/ \
  --set KEYVAULT=$AKV \
  --set ACI=$ACI \
  --set ACI_RG=$ACI_RG \
  --assign-identity

Menambahkan kredensial ke tugas untuk registri publik yang disimulasikan:

az acr task credential add \
  -n hello-world \
  -r $REGISTRY \
  --login-server $REGISTRY_PUBLIC_URL \
  -u https://${AKV}.vault.azure.net/secrets/registry-${REGISTRY_PUBLIC}-user \
  -p https://${AKV}.vault.azure.net/secrets/registry-${REGISTRY_PUBLIC}-password \
  --use-identity [system]

Berikan akses tugas ke nilai baca dari key vault:

az keyvault set-policy \
  --name $AKV \
  --resource-group $AKV_RG \
  --object-id $(az acr task show \
                  --name hello-world \
                  --registry $REGISTRY \
                  --query identity.principalId --output tsv) \
  --secret-permissions get

Berikan akses tugas untuk membuat dan mengelola Azure Container Instances dengan memberikan akses ke grup sumber daya:

az role assignment create \
  --assignee $(az acr task show \
  --name hello-world \
  --registry $REGISTRY \
  --query identity.principalId --output tsv) \
  --scope $(az group show -n $ACI_RG --query id -o tsv) \
  --role owner

Dengan tugas yang dibuat dan dikonfigurasi, jalankan tugas untuk menyusun dan menyebarkan gambar hello-world:

az acr task run -r $REGISTRY -n hello-world

Setelah dibuat, dapatkan alamat IP kontainer yang meng-hosting gambar hello-world.

az container show \
  --resource-group $ACI_RG \
  --name ${ACI} \
  --query ipAddress.ip \
  --out tsv

Di browser Anda, buka alamat IP untuk melihat aplikasi yang sedang berjalan.

Memperbarui gambar dasar dengan perubahan yang "dipertanyakan"

Bagian ini mensimulasikan perubahan pada gambar dasar yang dapat menyebabkan masalah di lingkungan.

  1. Buka Dockerfile di repositori fork base-image-node.
  2. Ubah BACKGROUND_COLOR ke Orange untuk mensimulasikan perubahan.
ARG REGISTRY_NAME=
FROM ${REGISTRY_NAME}node:15-alpine
ENV NODE_VERSION 15-alpine
ENV BACKGROUND_COLOR Orange

Lakukan perubahan dan perhatikan Tugas ACR untuk mulai membangun secara otomatis.

Perhatikan tugas untuk mulai mengeksekusi:

watch -n1 az acr task list-runs -r $REGISTRY_PUBLIC -o table

Anda akhirnya akan melihat STATUS Succeeded berdasarkan PEMICU Commit:

RUN ID    TASK      PLATFORM    STATUS     TRIGGER    STARTED               DURATION
--------  --------  ----------  ---------  ---------  --------------------  ----------
ca4       hub-node  linux       Succeeded  Commit     2020-10-24T05:02:29Z  00:00:22

Ketik Ctrl+C untuk keluar dari perintah menonton, lalu tampilkan log untuk proses eksekusi terbaru:

az acr task logs -r $REGISTRY_PUBLIC

Setelah gambar node selesai, watch agar Tugas ACR secara otomatis mulai membangun gambar hello-world:

watch -n1 az acr task list-runs -r $REGISTRY -o table

Anda akhirnya akan melihat STATUS Succeeded berdasarkan PEMICU Image Update:

RUN ID    TASK         PLATFORM    STATUS     TRIGGER       STARTED               DURATION
--------  -----------  ----------  ---------  ------------  --------------------  ----------
dau       hello-world  linux       Succeeded  Image Update  2020-10-24T05:08:45Z  00:00:31

Ketik Ctrl+C untuk keluar dari perintah menonton, lalu tampilkan log untuk proses eksekusi terbaru:

az acr task logs -r $REGISTRY

Setelah selesai, dapatkan alamat IP situs yang meng-hosting gambar hello-world yang diperbarui:

az container show \
  --resource-group $ACI_RG \
  --name ${ACI} \
  --query ipAddress.ip \
  --out tsv

Di browser Anda, buka situs, yang seharusnya memiliki latar belakang oranye (dipertanyakan).

Memeriksa

Pada titik ini, Anda telah membuat gambar hello-world yang secara otomatis dibangun di git commits dan perubahan pada gambar node dasar. Dalam contoh ini, tugas dibangun terhadap gambar dasar di Azure Container Registry, tetapi registri yang didukung dapat digunakan.

Pembaruan gambar dasar secara otomatis mencoba kembali tugas yang dijalankan saat gambar node diperbarui. Seperti yang terlihat di sini, tidak semua pembaruan diinginkan.

Impor terjaga dari konten publik

Untuk mencegah perubahan upstream melanggar beban kerja penting, pemindaian keamanan dan pengujian fungsional dapat ditambahkan.

Di bagian ini, Anda membuat tugas ACR untuk:

  • Membuat gambar uji
  • Menjalankan skrip uji fungsional ./test.sh terhadap gambar uji
  • Jika gambar berhasil menguji, impor gambar publik ke registri baseimages

Menambahkan pengujian otomatisasi

Untuk menjaga konten upstream apa pun, pengujian otomatis diterapkan. Dalam contoh ini, test.sh disediakan untuk memeriksa $BACKGROUND_COLOR. Jika pengujian gagal, EXIT_CODE dari 1 ditampilkan yang menyebabkan langkah tugas ACR gagal, mengakhiri jalannya tugas. Pengujian dapat diperluas pada bentuk alat apa pun, termasuk hasil pencatatan. Gerbang dikelola oleh respons lulus/gagal dalam skrip, direproduksi di sini:

if [ ""$(echo $BACKGROUND_COLOR | tr '[:lower:]' '[:upper:]') = 'RED' ]; then
    echo -e "\e[31mERROR: Invalid Color:\e[0m" ${BACKGROUND_COLOR}
    EXIT_CODE=1
else
  echo -e "\e[32mValidation Complete - No Known Errors\e[0m"
fi
exit ${EXIT_CODE}

YAML Tugas

Meninjau acr-task.yaml dalam repositori import-baseimage-node, yang melakukan langkah-langkah berikut:

  1. Membuat gambar basis pengujian menggunakan Dockerfile berikut:
    ARG REGISTRY_FROM_URL=
    FROM ${REGISTRY_FROM_URL}node:15-alpine
    WORKDIR /test
    COPY ./test.sh .
    CMD ./test.sh
    
  2. Ketika selesai, validasi gambar dengan menjalankan kontainer, yang menjalankan ./test.sh
  3. Hanya jika berhasil diselesaikan, jalankan langkah-langkah impor, yang dibatasi dengan when: ['validate-base-image']
version: v1.1.0
steps:
  - id: build-test-base-image
    # Build off the base image we'll track
    # Add a test script to do unit test validations
    # Note: the test validation image isn't saved to the registry
    # but the task logs captures log validation results
    build: >
      --build-arg REGISTRY_FROM_URL={{.Values.REGISTRY_FROM_URL}}
      -f ./Dockerfile
      -t {{.Run.Registry}}/node-import:test
      .
  - id: validate-base-image
    # only continues if node-import:test returns a non-zero code
    when: ['build-test-base-image']
    cmd: "{{.Run.Registry}}/node-import:test"
  - id: pull-base-image
    # import the public image to base-artifacts
    # Override the stable tag,
    # and create a unique tag to enable rollback
    # to a previously working image
    when: ['validate-base-image']
    cmd: >
        docker pull {{.Values.REGISTRY_FROM_URL}}node:15-alpine
  - id: retag-base-image
    when: ['pull-base-image']
    cmd: docker tag {{.Values.REGISTRY_FROM_URL}}node:15-alpine {{.Run.Registry}}/node:15-alpine
  - id: retag-base-image-unique-tag
    when: ['pull-base-image']
    cmd: docker tag {{.Values.REGISTRY_FROM_URL}}node:15-alpine {{.Run.Registry}}/node:15-alpine-{{.Run.ID}}
  - id: push-base-image
    when: ['retag-base-image', 'retag-base-image-unique-tag']
    push:
    - "{{.Run.Registry}}/node:15-alpine"
    - "{{.Run.Registry}}/node:15-alpine-{{.Run.ID}}"

Membuat tugas untuk mengimpor dan menguji gambar dasar

  az acr task create \
  --name base-import-node \
  -f acr-task.yaml \
  -r $REGISTRY_BASE_ARTIFACTS \
  --context $GIT_NODE_IMPORT \
  --git-access-token $(az keyvault secret show \
                        --vault-name $AKV \
                        --name github-token \
                        --query value -o tsv) \
  --set REGISTRY_FROM_URL=${REGISTRY_PUBLIC_URL}/ \
  --assign-identity

Menambahkan kredensial ke tugas untuk registri publik yang disimulasikan:

az acr task credential add \
  -n base-import-node \
  -r $REGISTRY_BASE_ARTIFACTS \
  --login-server $REGISTRY_PUBLIC_URL \
  -u https://${AKV}.vault.azure.net/secrets/registry-${REGISTRY_PUBLIC}-user \
  -p https://${AKV}.vault.azure.net/secrets/registry-${REGISTRY_PUBLIC}-password \
  --use-identity [system]

Berikan akses tugas ke nilai baca dari key vault:

az keyvault set-policy \
  --name $AKV \
  --resource-group $AKV_RG \
  --object-id $(az acr task show \
                  --name base-import-node \
                  --registry $REGISTRY_BASE_ARTIFACTS \
                  --query identity.principalId --output tsv) \
  --secret-permissions get

Menjalankan tugas impor:

az acr task run -n base-import-node -r $REGISTRY_BASE_ARTIFACTS

Catatan

Jika tugas gagal karena ./test.sh: Permission denied, pastikan skrip memiliki izin eksekusi, dan diterapkan kembali ke repo Git:

chmod +x ./test.sh

Perbarui gambar hello-worldg untuk dibangun dari gambar node berpagar

Buat token akses untuk mengakses registri artefak dasar, yang tercakup ke read dari repositori node. Kemudian, atur ke dalam key vault:

az keyvault secret set \
  --vault-name $AKV \
  --name "registry-${REGISTRY_BASE_ARTIFACTS}-user" \
  --value "registry-${REGISTRY_BASE_ARTIFACTS}-user"

az keyvault secret set \
  --vault-name $AKV \
  --name "registry-${REGISTRY_BASE_ARTIFACTS}-password" \
  --value $(az acr token create \
              --name "registry-${REGISTRY_BASE_ARTIFACTS}-user" \
              --registry $REGISTRY_BASE_ARTIFACTS \
              --repository node content/read \
              -o tsv \
              --query credentials.passwords[0].value)

Tambahkan kredensial ke tugas hello-world untuk registri artefak dasar:

az acr task credential add \
  -n hello-world \
  -r $REGISTRY \
  --login-server $REGISTRY_BASE_ARTIFACTS_URL \
  -u https://${AKV}.vault.azure.net/secrets/registry-${REGISTRY_BASE_ARTIFACTS}-user \
  -p https://${AKV}.vault.azure.net/secrets/registry-${REGISTRY_BASE_ARTIFACTS}-password \
  --use-identity [system]

Perbarui tugas untuk mengubah REGISTRY_FROM_URL untuk menggunakan registri BASE_ARTIFACTS

az acr task update \
  -n hello-world \
  -r $REGISTRY \
  --set KEYVAULT=$AKV \
  --set REGISTRY_FROM_URL=${REGISTRY_BASE_ARTIFACTS_URL}/ \
  --set ACI=$ACI \
  --set ACI_RG=$ACI_RG

Jalankan tugas hello-world untuk mengubah dependensi gambar dasarnya:

az acr task run -r $REGISTRY -n hello-world

Memperbarui gambar dasar dengan perubahan "valid"

  1. Buka Dockerfile di repositori base-image-node.
  2. Ubah BACKGROUND_COLOR ke Green untuk mensimulasikan perubahan yang valid.
ARG REGISTRY_NAME=
FROM ${REGISTRY_NAME}node:15-alpine
ENV NODE_VERSION 15-alpine
ENV BACKGROUND_COLOR Green

Lakukan perubahan dan pantau urutan pembaruan:

watch -n1 az acr task list-runs -r $REGISTRY_PUBLIC -o table

Setelah berjalan, ketik Ctrl+C dan pantau log:

az acr task logs -r $REGISTRY_PUBLIC

Setelah selesai, pantau tugas impor gambar dasar:

watch -n1 az acr task list-runs -r $REGISTRY_BASE_ARTIFACTS -o table

Setelah berjalan, ketik Ctrl+C dan pantau log:

az acr task logs -r $REGISTRY_BASE_ARTIFACTS

Setelah selesai, pantau tugas hello-world:

watch -n1 az acr task list-runs -r $REGISTRY -o table

Setelah berjalan, ketik Ctrl+C dan pantau log:

az acr task logs -r $REGISTRY

Setelah selesai, dapatkan alamat IP situs yang meng-hosting gambar hello-world yang diperbarui:

az container show \
  --resource-group $ACI_RG \
  --name ${ACI} \
  --query ipAddress.ip \
  --out tsv

Di browser Anda, buka situs, yang seharusnya memiliki latar belakang hijau (valid).

Menampilkan alur kerja yang dipagari

Lakukan langkah-langkah di bagian sebelumnya lagi, dengan warna latar belakang merah.

  1. Buka Dockerfile di repo base-image-node
  2. Ubah BACKGROUND_COLOR ke Red untuk mensimulasikan perubahan yang tidak valid.
ARG REGISTRY_NAME=
FROM ${REGISTRY_NAME}node:15-alpine
ENV NODE_VERSION 15-alpine
ENV BACKGROUND_COLOR Red

Lakukan perubahan dan pantau urutan pembaruan:

watch -n1 az acr task list-runs -r $REGISTRY_PUBLIC -o table

Setelah berjalan, ketik Ctrl+C dan pantau log:

az acr task logs -r $REGISTRY_PUBLIC

Setelah selesai, pantau tugas impor gambar dasar:

watch -n1 az acr task list-runs -r $REGISTRY_BASE_ARTIFACTS -o table

Setelah berjalan, ketik Ctrl+C dan pantau log:

az acr task logs -r $REGISTRY_BASE_ARTIFACTS

Pada titik ini, Anda akan melihat validasi kegagalan tugas base-import-node dan menghentikan urutan untuk menerbitkan pembaruan hello-world. Output kurang lebih seperti:

[...]
2020/10/30 03:57:39 Launching container with name: validate-base-image
Validating Image
NODE_VERSION: 15-alpine
BACKGROUND_COLOR: Red
ERROR: Invalid Color: Red
2020/10/30 03:57:40 Container failed during run: validate-base-image. No retries remaining.
failed to run step ID: validate-base-image: exit status 1

Terbitkan pembaruan untuk hello-world

Perubahan pada gambar hello-world akan terus menggunakan gambar node terakhir yang divalidasi.

Setiap perubahan tambahan pada gambar node dasar yang melewati validasi yang dipagari akan memicu pembaruan gambar dasar pada gambar hello-world.

Membersihkan

Bila tidak lagi diperlukan, hapus sumber daya yang digunakan dalam artikel ini.

az group delete -n $REGISTRY_RG --no-wait -y
az group delete -n $REGISTRY_PUBLIC_RG --no-wait -y
az group delete -n $REGISTRY_BASE_ARTIFACTS_RG --no-wait -y
az group delete -n $AKV_RG --no-wait -y
az group delete -n $ACI_RG --no-wait -y

Langkah berikutnya

Dalam artikel ini. Anda menggunakan tugas ACR untuk membuat alur kerja pemagaran otomatis untuk memperkenalkan gambar dasar yang diperbarui ke lingkungan Anda. Lihat informasi terkait untuk mengelola gambar di Azure Container Registry.