Öğretici: Kaynak kodu işlerken bulutta kapsayıcı görüntüsü derlemelerini 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.

Not

ACR Görevleri şu anda GitHub Enterprise depolarında işleme veya çekme isteği tetikleyicilerini desteklememektedir.

Bu öğreticide, ACR göreviniz bir Git deposuna kaynak kodu kaydettiğinizde dockerfile içinde belirtilen tek bir kapsayıcı görüntüsü oluşturur ve gönderir. 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 bakış için bkz . ACR Görevleri ile işletim sistemi ve çerçeve düzeltme eki uygulamayı otomatikleştirme

Bu öğreticide:

  • Görev oluştur
  • Görevi test etme
  • Görev durumunu görüntüleme
  • Kod işlemesi ile görevi tetikleme

Bu öğreticide, önceki öğreticide yer alan 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.

Önkoşullar

Örnek kodu alma

Bu öğreticide, önceki öğreticide yer alan adımları zaten tamamladığınız ve örnek deponun çatalını ve kopyasını oluşturduğunuz varsayılır. Henüz yapmadıysanız, devam etmeden önce önceki öğreticinin Önkoşullar bölümündeki adımları tamamlayın.

Kapsayıcı kayıt defteri

Bu öğreticiyi tamamlamak için Azure aboneliğinizde bir Azure kapsayıcı kayıt defteri olması gerekir. Bir 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 üzerinde https://github.com/settings/tokens/new adresindeki PAT oluşturma sayfasında 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. Bu öğreticide olduğu gibi bir genel depoya erişmek için depo altında depo:status ve public_repo

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

    Not

    Ö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ın ve güvenli bir konuma kaydedin (bu belirteci sonraki bölümde bir görev tanımlarken kullanacaksınız)

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

Ortamınızı Azure CLI’ye hazırlama

  • Azure Cloud Shell'de Bash ortamını kullanın. Daha fazla bilgi için bkz . Azure Cloud Shell'de Bash için hızlı başlangıç.

  • CLI başvuru komutlarını yerel olarak çalıştırmayı tercih ediyorsanız Azure CLI'yı yükleyin . Windows veya macOS üzerinde çalışıyorsanız Azure CLI’yi bir Docker kapsayıcısında çalıştırmayı değerlendirin. Daha fazla bilgi için bkz . Docker kapsayıcısında Azure CLI'yi çalıştırma.

    • Yerel yükleme kullanıyorsanız az login komutunu kullanarak Azure CLI ile oturum açın. Kimlik doğrulama işlemini tamamlamak için terminalinizde görüntülenen adımları izleyin. Diğer oturum açma seçenekleri için bkz . Azure CLI ile oturum açma.

    • İstendiğinde, ilk kullanımda Azure CLI uzantısını yükleyin. Uzantılar hakkında daha fazla bilgi için bkz. Azure CLI ile uzantıları kullanma.

    • Yüklü sürümü ve bağımlı kitaplıkları bulmak için az version komutunu çalıştırın. En son sürüme yükseltmek için az upgrade komutunu çalıştırın.

Derleme görevi oluşturma

ACR Görevlerinin işleme durumunu okumasını etkinleştirmek ve bir depoda web kancaları oluşturmak için gereken adımları tamamladıktan sonra, depoya işleme yapılması üzerine kapsayıcı görüntüsü 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ın yapılması kesinlikle zorunlu 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 .

Not

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, tarafından --contextbelirtilen depodaki ana dala herhangi bir zaman kodunun işlendiğini belirtir. ACR Görevleri bu daldaki koddan kapsayıcı görüntüsünü oluşturur. Tarafından depo kökünden belirtilen --file Dockerfile, görüntüyü oluşturmak için kullanılır. --image bağımsız değişkeni, görüntü etiketinin sürüm kısmı için parametreli {{.Run.ID}} değeri belirtir ve derlenen görüntünün belirli bir derleme ile ilişkili olmasını ve benzersiz şekilde etiketlenmesini sağlar.

Başarılı bir az acr task create komutundaki çıktı aşağıdakilere 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 derlemenizi tanımlayan bir göreviniz var. Derleme işlem hattını test etmek için, az acr task run komutunu yürüterek el ile bir derleme tetikleyin:

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

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

2020/11/19 22:51:00 Using acb_vol_9ee1f28c-4fd4-43c8-a651-f0ed027bbf0e as the home volume
2020/11/19 22:51:00 Setting up Docker configuration...
2020/11/19 22:51:02 Successfully set up Docker configuration
2020/11/19 22:51:02 Logging in to registry: myregistry.azurecr.io
2020/11/19 22:51:03 Successfully logged in
2020/11/19 22:51:03 Executing step: build
2020/11/19 22:51:03 Obtaining source code and scanning for dependencies...
2020/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
2020/11/19 22:51:11 Executing step: push
2020/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
2020/11/19 22:51:21 Successfully pushed image: myregistry.azurecr.io/helloworld:da2
2020/11/19 22:51:21 Step id: build marked as successful (elapsed time in seconds: 7.198937)
2020/11/19 22:51:21 Populating digests for step id: build...
2020/11/19 22:51:22 Successfully populated digests for step id: build
2020/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

İşleme ile derleme tetikleme

Görevi el ile çalıştırarak test ettikten sonra, bir kaynak kodu değişikliği ile otomatik olarak tetikleyin.

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

cd acr-build-helloworld-node

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

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

git push komutunu yürüttüğünüzde GitHub kimlik bilgilerinizi sağlamanız istenebilir. GitHub kullanıcı adınızı sağlayın 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>

Bir işlemeyi deponuza gönderdikten sonra, ACR Görevleri tarafından oluşturulan web kancası başlatılır ve Azure Container Registry’de bir derleme başlatır. Derlemenin ilerleme durumunu doğrulamak ve izlemek için o anda devam eden görevin günlüklerini görüntüleyin:

az acr task logs --registry $ACR_NAME

Çıktı aşağıdakine benzer ve o anda yürütülen (veya son yürütülen) görevi gösterir:

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

[...]

Run ID: ca7 was successful after 38s

Derlemeleri listeleme

az acr task list-runs komutunu çalıştırarak ACR Görevlerinin kayıt defteriniz için tamamladığı çalıştırmaları listeleyebilirsiniz:

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

Komut çıktısı aşağıdakine benzer şekilde görünmelidir. ACR Görevlerinin yürüttüğü çalıştırmalar gösterilir ve en son görev için TRIGGER sütununda "Git İşleme" ifadesi görünür:

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

Sonraki adımlar

Bu öğreticide, bir Git deposuna kaynak kodu işlediğinizde Azure’da kapsayıcı görüntü derlemelerini otomatik olarak tetiklemek üzere bir görev kullanmayı öğrendiniz. Bir kapsayıcı görüntüsünün temel görüntüsü güncelleştirildiğinde derlemeleri tetikleyen görevler oluşturmak için sonraki öğreticiye geçin.