Azure Container Registry Görevleri ile genel içeriği kullanma ve koruma

Bu makalede, genel içeriği tüketmeyi ve korumayı yönetmenize yardımcı olmak için Azure Container Registry'de örnek bir iş akışı sağlanır:

  1. Bağımlı genel görüntülerin yerel kopyalarını içeri aktarın.
  2. Güvenlik taraması ve işlevsel test yoluyla genel görüntüleri doğrulayın.
  3. İç kullanım için görüntüleri özel kayıt defterlerine yükseltin.
  4. Genel içeriğe bağımlı uygulamalar için temel görüntü güncelleştirmelerini tetikleme.
  5. Bu iş akışını otomatikleştirmek için Azure Container Registry Görevleri'ni kullanın.

İş akışı aşağıdaki görüntüde özetlenmiş:

Genel içerik kullanma İş Akışı

Geçitli içeri aktarma iş akışı kuruluşunuzun dışarıdan yönetilen yapıtlara bağımlılıklarını yönetmenize yardımcı olur. Örneğin, Docker Hub, GCR, Quay, GitHub Container Registry, Microsoft Container Registry ve hatta diğer Azure kapsayıcı kayıt defterleri gibi genel kayıt defterlerinden alınan görüntüler.

Genel içeriğe bağımlılıkların neden olduğu riskler ve bunları azaltmak için Azure Container Registry kullanma hakkında arka plan bilgisi için OCI Genel İçerik Kullanma Blog gönderisine ve Genel içeriği Azure Container Registry ile yönetme bölümüne bakın.

Bu kılavuzu tamamlamak için Azure Cloud Shell veya Azure CLI'nın yerel yüklemesini kullanabilirsiniz. Azure CLI sürüm 2.10 veya üzeri önerilir. Yüklemeniz veya yükseltmeniz gerekirse, bkz. Azure CLI yükleme.

Senaryoya genel bakış

iş akışı bileşenlerini içeri aktarma

Bu izlenecek yol şunu ayarlar:

  1. Aşağıdakileri temsil eden üç kapsayıcı kayıt defteri:
    • Temel görüntünün değiştirilmesini destekleyen sanal Docker Hub (publicregistry)
    • Özel görüntüleri paylaşmak için ekip kayıt defteri (contoso)
    • İçeri aktarılan genel içerik için şirket/ekip paylaşılan kayıt defteri (baseartifacts)
  2. Her kayıt defterindeki bir ACR görevi . Görevler:
    1. Sanal genel node görüntü oluşturma
    2. Resmi şirket/ekip paylaşılan kayıt defterine içeri aktarma ve doğrulama node
    3. Görüntüyü derleme ve dağıtma hello-world
  3. Aşağıdaki yapılandırmalar dahil olmak üzere ACR görev tanımları:
  4. Bir anahtar kasasının işaretçileri olan kayıt defteri kimlik bilgileri koleksiyonu
  5. içinde bulunan acr-task.yamlve bir anahtar kasasının işaretçileri olan gizli dizi koleksiyonu
  6. bir içinde kullanılan yapılandırılmış değerler koleksiyonu acr-task.yaml
  7. Tüm gizli dizilerin güvenliğini sağlamak için bir Azure anahtar kasası
  8. Derleme uygulamasını barındıran hello-worldbir Azure kapsayıcı örneği

Önkoşullar

Aşağıdaki adımlarda, izlenecek yolda oluşturulan ve kullanılan kaynaklar için değerler yapılandırılır.

Ortam değişkenlerini belirleme

Ortamınıza özgü değişkenleri yapılandırın. Yanlışlıkla silmeyi en aza indirmek için dayanıklı içeriğe sahip kaynakları kendi kaynak grubuna yerleştirmeye yönelik en iyi yöntemleri takip ediyoruz. Ancak isterseniz bunları tek bir kaynak grubuna yerleştirebilirsiniz.

Bu makaledeki örnekler bash kabuğu için biçimlendirilmiştir.

# 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

Git depoları ve belirteçleri

Ortamınızın benzetimini yapmak için aşağıdaki Git depolarının her birini yönetebileceğiniz depolara çatallayın.

Ardından, çatallanmış depolarınız için aşağıdaki değişkenleri güncelleştirin.

Git URL'lerinin :main sonuna eklenen, varsayılan depo dalını temsil eder.

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

ACR Görevlerinin Git web kancalarını kopyalayıp oluşturması için bir GitHub erişim belirtecine (PAT) ihtiyacınız vardır. Özel depo için gerekli izinlere sahip bir belirteç oluşturma adımları için bkz. GitHub erişim belirteci oluşturma.

GIT_TOKEN=<set-git-token-here>

kimlik bilgilerini Docker Hub

Docker Hub'dan görüntü çekerken azaltma ve kimlik isteklerini önlemek için bir Docker Hub belirteci oluşturun. Ardından aşağıdaki ortam değişkenlerini ayarlayın:

REGISTRY_DOCKERHUB_USER=<yourusername>
REGISTRY_DOCKERHUB_PASSWORD=<yourtoken>

Kayıt defterleri oluşturma

Azure CLI komutlarını kullanarak, her biri kendi kaynak grubunda olmak üzere üç Premium katmanı kapsayıcı kayıt defteri oluşturun:

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

Anahtar kasası oluşturma ve gizli dizileri ayarlama

Anahtar kasası oluşturma:

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

Anahtar kasasında kullanıcı adı ve belirteci Docker Hub ayarlayın:

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

Anahtar kasasında Git PAT ayarlayın ve doğrulayın:

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

Azure kapsayıcı örneği için kaynak grubu oluşturma

Bu kaynak grubu, görüntüyü dağıtırken hello-world sonraki bir görevde kullanılır.

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

Ortak node temel görüntü oluşturma

Docker Hub'da görüntünün benzetimini node yapmak için, genel görüntüyü derlemek ve korumak için bir ACR görevi oluşturun. Bu kurulum, görüntü bakımcıları tarafından değişikliklerin benzetimini node yapmasına olanak tanır.

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

Docker azaltmasını önlemek için göreve Docker Hub kimlik bilgileri ekleyin. acr görev kimlik bilgileri komutu, docker kimlik bilgilerini Docker Hub de dahil olmak üzere herhangi bir kayıt defterine geçirmek için kullanılabilir.

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]

Anahtar kasasından okuma değerlerine görev erişimi verin:

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

Görevler Git işlemeleri, temel görüntü güncelleştirmeleri, zamanlayıcılar veya el ile çalıştırmalar tarafından tetiklenebilir.

Görüntüyü oluşturmak node için görevi el ile çalıştırın:

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

Görüntüyü sanal genel kayıt defterinde listeleyin:

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

hello-world Görüntüyü oluşturma

Benzetimi yapılan genel node görüntüye göre bir hello-world görüntü oluşturun.

Sanal genel kayıt defterine çekme erişimi için belirteç oluşturma

Sanal genel kayıt defteri için kapsamı olarak belirlenmiş pullbir erişim belirteci oluşturun. Ardından anahtar kasasında ayarlayın:

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)

Azure Container Instances çekme erişimi için belirteç oluşturma

Görüntüyü barındıran hello-world kayıt defterine çekme kapsamına sahip bir erişim belirteci oluşturun. Ardından anahtar kasasında ayarlayın:

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)

Görüntü oluşturmak ve korumak hello-world için görev oluşturma

Aşağıdaki komut, deposundaki tanımından acr-tasks.yamlhello-world bir görev oluşturur. Görev adımları görüntüyü oluşturur hello-world ve ardından Azure Container Instances'a dağıtır. Azure Container Instances kaynak grubu önceki bir bölümde oluşturulmuştur. görevi içinde yalnızca bir farkla image:tagçağırarakaz container create, görev bu izlenecek yol boyunca aynı örneğe dağıtılır.

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

Sanal genel kayıt defteri için göreve kimlik bilgileri ekleyin:

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]

Anahtar kasasından okuma değerlerine görev erişimi verin:

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

Kaynak grubuna erişim vererek Azure Container Instances oluşturmak ve yönetmek için görev erişimi verin:

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

Görev oluşturulup yapılandırıldığında, görüntüyü derlemek ve dağıtmak hello-world için görevi çalıştırın:

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

Oluşturulduktan sonra görüntüyü barındıran hello-world kapsayıcının IP adresini alın.

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

Tarayıcınızda, çalışan uygulamayı görmek için IP adresine gidin.

Temel görüntüyü "sorgulanabilir" bir değişiklikle güncelleştirme

Bu bölümde, ortamda sorunlara neden olabilecek temel görüntüde yapılan bir değişikliğin benzetimi yapılır.

  1. Çatallanmış base-image-node depoda açınDockerfile.
  2. değişikliğin BACKGROUND_COLOROrange benzetimini yapmak için öğesini olarak değiştirin.
ARG REGISTRY_NAME=
FROM ${REGISTRY_NAME}node:15-alpine
ENV NODE_VERSION 15-alpine
ENV BACKGROUND_COLOR Orange

Değişikliği işleyin ve ACR Görevlerinin otomatik olarak oluşturmaya başlamasını izleyin.

Görevin yürütülmeye başlamasını izleyin:

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

Sonunda BIR TRIGGER Commitdeğerini temel alan STATUS Succeeded değerini görmeniz gerekir:

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

İzleme komutundan çıkmak için Ctrl+C tuşlarına basın ve ardından en son çalıştırmanın günlüklerini görüntüleyin:

az acr task logs -r $REGISTRY_PUBLIC

node Görüntü tamamlandıktan sonra, watch ACR Görevlerinin görüntüyü otomatik olarak oluşturmaya hello-world başlaması için:

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

Sonunda BIR TRIGGER Image Updatedeğerini temel alan STATUS Succeeded değerini görmeniz gerekir:

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

İzleme komutundan çıkmak için Ctrl+C tuşlarına basın ve ardından en son çalıştırmanın günlüklerini görüntüleyin:

az acr task logs -r $REGISTRY

İşlem tamamlandıktan sonra, güncelleştirilmiş hello-world görüntüyü barındıran sitenin IP adresini alın:

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

Tarayıcınızda, turuncu (sorgulanabilir) bir arka plana sahip olması gereken siteye gidin.

İade ediyor

Bu noktada, Git işlemeleri ve temel node görüntüde yapılan değişiklikler üzerinde otomatik olarak oluşturulan bir hello-world görüntü oluşturdunuz. Bu örnekte, görev Azure Container Registry'daki bir temel görüntüye göre oluşturulur, ancak desteklenen herhangi bir kayıt defteri kullanılabilir.

Temel görüntü güncelleştirmesi, görüntü güncelleştirildiğinde görev çalıştırmasını node otomatik olarak yeniden denentir. Burada görüldüğü gibi tüm güncelleştirmeler istenmiyor.

Genel içeriğin geçitli içeri aktarmaları

Yukarı akış değişikliklerinin kritik iş yüklerini bozmasını önlemek için güvenlik taraması ve işlevsel testler eklenebilir.

Bu bölümde, şunları yapmak için bir ACR görevi oluşturacaksınız:

  • Test görüntüsü oluşturma
  • Test görüntüsünde işlevsel bir test betiği ./test.sh çalıştırma
  • Görüntü başarıyla sınanırsa, genel görüntüyü baseimages kayıt defterine aktarın

Otomasyon testi ekleme

Yukarı akış içeriğinin geçitlerini almak için otomatikleştirilmiş test uygulanır. Bu örnekte, öğesini denetleyen $BACKGROUND_COLORbir test.sh sağlanır. Test başarısız olursa, ACR görev adımının başarısız olmasına ve görev çalıştırmasını sonlandırmasına neden olan bir EXIT_CODE1 değeri döndürülür. Testler, günlüğe kaydetme sonuçları da dahil olmak üzere herhangi bir araç biçiminde genişletilebilir. Geçit, betikteki bir geçiş/başarısız yanıt tarafından yönetilir ve burada yeniden oluşturulur:

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}

Görev YAML

acr-task.yaml Aşağıdaki adımları gerçekleştiren depodaki import-baseimage-node öğesini gözden geçirin:

  1. Aşağıdaki Dockerfile dosyasını kullanarak test temel görüntüsünü oluşturun:
    ARG REGISTRY_FROM_URL=
    FROM ${REGISTRY_FROM_URL}node:15-alpine
    WORKDIR /test
    COPY ./test.sh .
    CMD ./test.sh
    
  2. Tamamlandığında, çalıştırılan kapsayıcıyı çalıştırarak görüntüyü doğrulayın ./test.sh
  3. Yalnızca başarıyla tamamlandığında, ile geçitli içeri aktarma adımlarını çalıştırın 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}}"

Temel görüntüyü içeri aktarmak ve test etmek için görev oluşturma

  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

Sanal genel kayıt defteri için göreve kimlik bilgileri ekleyin:

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]

Anahtar kasasından okuma değerlerine görev erişimi verin:

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

İçeri aktarma görevini çalıştırın:

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

Not

Görev nedeniyle ./test.sh: Permission deniedbaşarısız olursa, betiğin yürütme izinlerine sahip olduğundan emin olun ve Git deposuna geri işleyin:

chmod +x ./test.sh

Geçitli node görüntüden derlemek için görüntüyü güncelleştirme hello-world

Depodan node kapsamı olarak belirlenmiş base-artifacts kayıt defterine erişmek için read bir erişim belirteci oluşturun. Ardından anahtar kasasında ayarlayın:

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)

Temel yapıtlar kayıt defteri için hello-world görevine kimlik bilgileri ekleyin:

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]

kayıt defterini kullanacak şekilde değiştirmek REGISTRY_FROM_URL için görevi güncelleştirin 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

Hello-world görevini çalıştırarak temel görüntü bağımlılığını değiştirin:

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

Temel görüntüyü "geçerli" bir değişiklikle güncelleştirme

  1. Depoyu Dockerfilebase-image-node açın.
  2. geçerli bir değişikliğin BACKGROUND_COLOR benzetimini yapmak için öğesini olarak Green değiştirin.
ARG REGISTRY_NAME=
FROM ${REGISTRY_NAME}node:15-alpine
ENV NODE_VERSION 15-alpine
ENV BACKGROUND_COLOR Green

Değişikliği işleyin ve güncelleştirme sırasını izleyin:

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

Çalıştırdıktan sonra Ctrl+C tuşlarına basın ve günlükleri izleyin:

az acr task logs -r $REGISTRY_PUBLIC

İşlem tamamlandıktan sonra base-image-import görevini izleyin:

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

Çalıştırdıktan sonra Ctrl+C tuşlarına basın ve günlükleri izleyin:

az acr task logs -r $REGISTRY_BASE_ARTIFACTS

İşlem tamamlandıktan sonra hello-world görevini izleyin:

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

Çalıştırdıktan sonra Ctrl+C tuşlarına basın ve günlükleri izleyin:

az acr task logs -r $REGISTRY

İşlem tamamlandıktan sonra, güncelleştirilmiş hello-world görüntüyü barındıran sitenin IP adresini alın:

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

Tarayıcınızda, yeşil (geçerli) bir arka plana sahip olması gereken siteye gidin.

Geçitli iş akışını görüntüleme

Önceki bölümdeki adımları, arka plan rengi kırmızı olacak şekilde yeniden gerçekleştirin.

  1. Dockerfile depoda dosyasını base-image-node açın
  2. geçersiz bir değişikliğin BACKGROUND_COLOR benzetimini yapmak için Red öğesini olarak değiştirin.
ARG REGISTRY_NAME=
FROM ${REGISTRY_NAME}node:15-alpine
ENV NODE_VERSION 15-alpine
ENV BACKGROUND_COLOR Red

Değişikliği işleyin ve güncelleştirme sırasını izleyin:

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

Çalıştırdıktan sonra Ctrl+C tuşlarına basın ve günlükleri izleyin:

az acr task logs -r $REGISTRY_PUBLIC

İşlem tamamlandıktan sonra base-image-import görevini izleyin:

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

Çalıştırdıktan sonra Ctrl+C tuşlarına basın ve günlükleri izleyin:

az acr task logs -r $REGISTRY_BASE_ARTIFACTS

Bu noktada , base-import-node görevinin başarısız olduğunu görmeniz ve güncelleştirmeyi yayımlama hello-world sırasını durdurmanız gerekir. Çıkış şuna benzer olacaktır:

[...]
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

Güncelleştirme yayımlama hello-world

Görüntüde hello-world yapılan değişiklikler doğrulanan node son görüntüyü kullanmaya devam eder.

Geçitli doğrulamaları geçen temel node görüntüde yapılan ek değişiklikler, görüntüde hello-world temel görüntü güncelleştirmelerini tetikler.

Temizleme

Artık gerekli olmadığında, bu makalede kullanılan kaynakları silin.

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

Sonraki adımlar

Bu makalede. Ortamınıza güncelleştirilmiş temel görüntüler eklemek üzere otomatik bir gating iş akışı oluşturmak için ACR görevlerini kullandınız. Azure Container Registry'da görüntüleri yönetmek için ilgili bilgilere bakın.