Kılavuz: Kaynak kodunu gönderdiğinizde bulutta kapsayıcı imajı oluşturma işlemlerini otomatikleştirme

ACR Görevleri, hızlı bir göreve ek olarak, bir Git deposuna kaynak kodu kaydettiğinizde bulutta otomatik Docker kapsayıcı görüntüsü derlemelerini destekler. ACR Görevleri için desteklenen Git bağlamları genel veya özel GitHub veya Azure Depoları'dır.

Note

ACR Görevleri şu anda GitHub Enterprise depolarında commit ya da pull request tetikleyicilerini desteklememektedir.

Bu öğreticide, ACR göreviniz bir Git deposuna kaynak kodu kaydettiğinizde Dockerfile'da belirtilen tek bir kapsayıcı görüntüsü oluşturur ve yayar. Kod işlemede birden çok kapsayıcı oluşturma, gönderme ve isteğe bağlı olarak test etme adımlarını tanımlamak üzere YAML dosyası kullanan çok adımlı bir görev oluşturmak için bkz . Öğretici: Kaynak kodu işlerken bulutta çok adımlı kapsayıcı iş akışı çalıştırma. ACR Görevlerine genel bir bakış için bkz. ACR Görevleri ile işletim sistemi ve framework yamalarını otomatikleştirme

Bu öğreticide şu konular ele alınacaktır:

  • Görev oluştur
  • Görevi test edin
  • Görev durumunu görüntüleme
  • Görevi bir kod işleme ile tetikleme

Bu öğreticide , önceki öğreticideki adımları zaten tamamladığınız varsayılır. Henüz yapmadıysanız, devam etmeden önce önceki öğreticinin Önkoşullar bölümündeki adımları tamamlayın.

Prerequisites

Örnek kodu alma

Önceki öğreticideki adımları tamamladığınız ve örnek havuzu fork'layıp klonladığınız varsayılmaktadır. Henüz yapmadıysanız, devam etmeden önce önceki öğreticinin Önkoşullar bölümündeki adımları tamamlayın.

Container kayıt defteri

Bu kılavuzu tamamlamak için, Azure aboneliğinizde bir Azure container kayıt defteri bulunmalıdır. Kayıt defterine ihtiyacınız varsa önceki öğreticiye veya Hızlı Başlangıç: Azure CLI kullanarak kapsayıcı kayıt defteri oluşturma bölümüne bakın.

GitHub kişisel erişim belirteci oluşturma

Git deposuna yönelik bir işlemedeki bir görevi tetikleyebilmek için, ACR Görevlerinin depoya erişmek için kişisel erişim belirtecine (PAT) sahip olması gerekir. Henüz bir PAT'niz yoksa GitHub'da bir pat oluşturmak için şu adımları izleyin:

  1. GitHub'da kişisel erişim belirteci oluşturma sayfasına gidin.

  2. Belirteç için kısa bir açıklama girin; örneğin, "ACR Görevleri Tanıtımı"

  3. ACR'nin depoya erişmesi için kapsamları seçin. Bir genel depoya erişmek için bu öğreticide olduğu gibi, depo altında repo:status ve public_repo ayarlarını etkinleştirin.

    GitHub'da Kişisel Erişim Belirteci oluşturma sayfasının ekran görüntüsü

    Note

    Özel depoya erişmek üzere pat oluşturmak için tam depo denetiminin kapsamını seçin.

  4. Belirteç oluştur düğmesini seçin (parolanızı onaylamanız istenebilir)

  5. Oluşturulan belirteci kopyalayıp güvenli bir konuma kaydedin (aşağıdaki bölümde bir görev tanımlarken bu belirteci kullanırsınız)

    GitHub'da oluşturulan Kişisel Erişim Belirtecinin ekran görüntüsü

Azure CLI için ortamınızı hazırlayın

Derleme görevini oluşturma

ACR Görevlerinin taahhüt durumunu okumasını ve depoda web kancaları oluşturmasını sağlamak için gereken adımları tamamladığınıza göre, depoya yapılan taahhütler üzerinde konteyner imajı derlemesini tetikleyen bir görev oluşturabilirsiniz.

İlk olarak, bu kabuk ortam değişkenlerini ortamınıza uygun değerlerle doldurun. Bu adım kesinlikle gerekli değildir, ancak bu öğreticideki çok satırlı Azure CLI komutlarını yürütmeyi biraz daha kolaylaştırır. Bu ortam değişkenlerini doldurmazsanız, her değeri örnek komutlarda göründüğü her yerde el ile değiştirmeniz gerekir.

ACR_NAME=<registry-name>        # The name of your Azure container registry
GIT_USER=<github-username>      # Your GitHub user account name
GIT_PAT=<personal-access-token> # The PAT you generated in the previous section

Şimdi aşağıdaki az acr task create komutunu yürüterek görevi oluşturun.

Note

Aşağıdaki örnekte kullanılan Dockerfile, Docker Hub'daki bir genel temel kapsayıcı görüntüsüne bağlıdır. Genel içerik kullanırken güvenilirliği artırmak için, görüntüyü özel bir Azure kapsayıcı kayıt defterinde içeri aktarın ve yönetin ve Dockerfile'ınızı özel olarak yönetilen temel görüntünüzü kullanacak şekilde güncelleştirin. Genel görüntülerle çalışma hakkında daha fazla bilgi edinin.

az acr task create \
    --registry $ACR_NAME \
    --name taskhelloworld \
    --image helloworld:{{.Run.ID}} \
    --context https://github.com/$GIT_USER/acr-build-helloworld-node.git#master \
    --file Dockerfile \
    --git-access-token $GIT_PAT

Bu görev, belirtilen depodaki --context dalına kod işlendiğinde, ACR Görevleri'nin bu daldaki koddan kapsayıcı görüntüsünü oluşturacağını belirtir. Depo kökünden --file tarafından belirtilen Dockerfile, imajı derlemek için kullanılır. bağımsız değişkeni, --image görüntünün etiketinin {{.Run.ID}} sürüm bölümü için parametreli bir değer belirtir, bu da yerleşik görüntünün belirli bir derlemeyle ilişkili olmasını ve benzersiz bir şekilde etiketlenmesini sağlar.

Başarılı bir az acr task create komutunun çıktısı aşağıdakine benzer:

{
  "agentConfiguration": {
    "cpu": 2
  },
  "creationDate": "2010-11-19T22:42:32.972298+00:00",
  "id": "/subscriptions/<Subscription ID>/resourceGroups/myregistry/providers/Microsoft.ContainerRegistry/registries/myregistry/tasks/taskhelloworld",
  "location": "westcentralus",
  "name": "taskhelloworld",
  "platform": {
    "architecture": "amd64",
    "os": "Linux",
    "variant": null
  },
  "provisioningState": "Succeeded",
  "resourceGroup": "myregistry",
  "status": "Enabled",
  "step": {
    "arguments": [],
    "baseImageDependencies": null,
    "contextPath": "https://github.com/gituser/acr-build-helloworld-node#main",
    "dockerFilePath": "Dockerfile",
    "imageNames": [
      "helloworld:{{.Run.ID}}"
    ],
    "isPushEnabled": true,
    "noCache": false,
    "type": "Docker"
  },
  "tags": null,
  "timeout": 3600,
  "trigger": {
    "baseImageTrigger": {
      "baseImageTriggerType": "Runtime",
      "name": "defaultBaseimageTriggerName",
      "status": "Enabled"
    },
    "sourceTriggers": [
      {
        "name": "defaultSourceTriggerName",
        "sourceRepository": {
          "branch": "main",
          "repositoryUrl": "https://github.com/gituser/acr-build-helloworld-node#main",
          "sourceControlAuthProperties": null,
          "sourceControlType": "GitHub"
        },
        "sourceTriggerEvents": [
          "commit"
        ],
        "status": "Enabled"
      }
    ]
  },
  "type": "Microsoft.ContainerRegistry/registries/tasks"
}

Derleme görevini test etme

Artık yapınızı tanımlayan bir göreviniz var. Derleme işlem hattını test etmek için az acr task run komutunu yürüterek derlemeyi el ile tetikleyin:

az acr task run --registry $ACR_NAME --name taskhelloworld

Varsayılan olarak, az acr task run komutu yürüttüğünüzde komut günlük çıkışını konsolunuza akışla aktarır. Çıkış, önemli adımları gösterecek şekilde özetlenir.

2023/11/19 22:51:00 Using acb_vol_9ee1f28c-4fd4-43c8-a651-f0ed027bbf0e as the home volume
2023/11/19 22:51:00 Setting up Docker configuration...
2023/11/19 22:51:02 Successfully set up Docker configuration
2023/11/19 22:51:02 Logging in to registry: myregistry.azurecr.io
2023/11/19 22:51:03 Successfully logged in
2023/11/19 22:51:03 Executing step: build
2023/11/19 22:51:03 Obtaining source code and scanning for dependencies...
2023/11/19 22:51:05 Successfully obtained source code and scanned for dependencies
Sending build context to Docker daemon  23.04kB
Step 1/5 : FROM node:15-alpine
[...]
Step 5/5 : CMD ["node", "/src/server.js"]
 ---> Running in 7382eea2a56a
Removing intermediate container 7382eea2a56a
 ---> e33cd684027b
Successfully built e33cd684027b
Successfully tagged myregistry.azurecr.io/helloworld:da2
2023/11/19 22:51:11 Executing step: push
2023/11/19 22:51:11 Pushing image: myregistry.azurecr.io/helloworld:da2, attempt 1
The push refers to repository [myregistry.azurecr.io/helloworld]
4a853682c993: Preparing
[...]
4a853682c993: Pushed
[...]
da2: digest: sha256:c24e62fd848544a5a87f06ea60109dbef9624d03b1124bfe03e1d2c11fd62419 size: 1366
2023/11/19 22:51:21 Successfully pushed image: myregistry.azurecr.io/helloworld:da2
2023/11/19 22:51:21 Step id: build marked as successful (elapsed time in seconds: 7.198937)
2023/11/19 22:51:21 Populating digests for step id: build...
2023/11/19 22:51:22 Successfully populated digests for step id: build
2023/11/19 22:51:22 Step id: push marked as successful (elapsed time in seconds: 10.180456)
The following dependencies were found:
- image:
    registry: myregistry.azurecr.io
    repository: helloworld
    tag: da2
    digest: sha256:c24e62fd848544a5a87f06ea60109dbef9624d03b1124bfe03e1d2c11fd62419
  runtime-dependency:
    registry: registry.hub.docker.com
    repository: library/node
    tag: 9-alpine
    digest: sha256:8dafc0968fb4d62834d9b826d85a8feecc69bd72cd51723c62c7db67c6dec6fa
  git:
    git-head-revision: 68cdf2a37cdae0873b8e2f1c4d80ca60541029bf


Run ID: ca6 was successful after 27s

Bir taahhüt ile derleme tetiklemek

Görevi el ile çalıştırarak test etmiş olduğunuza göre, bir kaynak kodu değişikliğiyle otomatik olarak tetikleyin.

İlk olarak, deponun yerel kopyanızı içeren dizinde olduğunuzdan emin olun:

cd acr-build-helloworld-node

Ardından, GitHub'da depo çatalınıza yeni bir dosya oluşturmak, işlemek ve göndermek için aşağıdaki komutları yürütebilirsiniz:

echo "Hello World!" > hello.txt
git add hello.txt
git commit -m "Testing ACR Tasks"
git push origin main

Komutu yürütürken git push GitHub kimlik bilgilerinizi sağlamanız istenebilir. GitHub kullanıcı adınızı girin ve parola için daha önce oluşturduğunuz kişisel erişim belirtecini (PAT) girin.

Username for 'https://github.com': <github-username>
Password for 'https://githubuser@github.com': <personal-access-token>

Depoya bir commit gönderdiğinizde, ACR Görevleri tarafından oluşturulan web kancası tetiklenir ve Azure Container Registry'de bir derleme başlatılır. Yapı ilerlemesini doğrulamak ve izlemek için mevcut görevin günlüklerini görüntüleyin.

az acr task logs --registry $ACR_NAME

Çıktı, şu anda yürütülmekte olan (veya en son yürütülmüş) görevi gösteren aşağıdaki biçime benzerdir:

Showing logs of the last created run.
Run ID: ca7

[...]

Run ID: ca7 was successful after 38s

Derlemeleri listeleme

ACR Görevlerinin kayıt defterinizde tamamlamış olduğu görev çalıştırmalarının listesini görmek için az acr task list-runs komutunu çalıştırın:

az acr task list-runs --registry $ACR_NAME --output table

Komutun çıktısı aşağıdakine benzer şekilde görünmelidir. ACR Görevlerinin yürüttüğü çalıştırmalar görüntülenir ve en son görevin TRIGGER sütununda "Git Commit" görünür:

RUN ID    TASK            PLATFORM    STATUS     TRIGGER    STARTED               DURATION
--------  --------------  ----------  ---------  ---------  --------------------  ----------
ca7       taskhelloworld  linux       Succeeded  Commit     2023-11-19T22:54:34Z  00:00:29
ca6       taskhelloworld  linux       Succeeded  Manual     2023-11-19T22:51:47Z  00:00:24
ca5                       linux       Succeeded  Manual     2023-11-19T22:23:42Z  00:00:23

Sonraki Adımlar

Bu öğreticide, kaynak kodu bir Git deposuna işlerken Azure'da kapsayıcı görüntüsü derlemelerini otomatik olarak tetikleyen bir görevin nasıl kullanılacağını öğrendiniz. Kapsayıcı görüntüsünün temel görüntüsü güncellendiğinde derlemeleri tetikleyen görevlerin nasıl oluşturulacağını öğrenmek için bir sonraki eğitime geçin.