Tutorial: Mengotomatiskan build gambar kontainer di cloud saat Anda menerapkan kode sumber

Selain tugas cepat, ACR Tasks mendukung build gambar kontainer Docker otomatis di cloud saat Anda melakukan kode sumber ke repositori Git. Konteks Git yang didukung untuk ACR Tasks mencakup GitHub publik atau pribadi atau Azure Repos.

Catatan

Saat ini, Tugas ACR tidak mendukung pemicu penerapan atau permintaan pull di repos GitHub Enterprise.

Dalam tutorial ini, tugas ACR Anda membangun dan mendorong satu gambar kontainer yang ditentukan dalam Dockerfile ketika Anda melakukan kode sumber ke repo Git. Untuk membuat tugas multi-langkah yang menggunakan file YAML untuk menentukan langkah-langkah untuk menyusun, mendorong, dan secara opsional menguji beberapa kontainer pada commit kode, lihat Tutorial: Menjalankan alur kerja kontainer multi-langkah di cloud saat Anda menerapkan kode sumber. Untuk gambaran umum ACR Tasks, lihat Mengotomatiskan OS dan penambalan kerangka kerja dengan ACR Tasks

Dalam tutorial ini:

  • Buat tugas
  • Uji tugas
  • Tampilkan status tugas
  • Picu tugas dengan penerapan kode

Tutorial ini mengasumsikan Anda telah menyelesaikan langkah-langkah dalam tutorial sebelumnya. Jika Anda belum melakukannya, selesaikan langkah-langkah di bagian Prasyarat dari tutorial sebelumnya sebelum melanjutkan.

Prasyarat

Mendapatkan contoh kode

Tutorial ini mengasumsikan Anda telah menyelesaikan langkah-langkah dalam tutorial sebelumnya dan telah melakukan fork dan klon contoh repositori. Jika Anda belum melakukannya, selesaikan langkah-langkah di bagian Prasyarat dari tutorial sebelumnya sebelum melanjutkan.

Registri kontainer

Anda harus memiliki registri kontainer Azure di langganan Azure Anda untuk menyelesaikan tutorial ini. Jika Anda memerlukan registri, lihat tutorial sebelumnya, atau Mulai Cepat: Membuat registri kontainer menggunakan Azure CLI.

Membuat token akses pribadi GitHub

Untuk memicu tugas pada penerapan ke repositori Git, Tugas ACR memerlukan token akses pribadi (PAT) untuk mengakses repositori. Jika Anda belum memiliki PAT, ikuti langkah-langkah berikut untuk membuatnya di GitHub:

  1. Buka halaman pembuatan PAT di GitHub di https://github.com/settings/tokens/new

  2. Masukkan deskripsi singkat untuk token, misalnya, "Demo Tugas ACR"

  3. Pilih cakupan ACR untuk mengakses repositori. Untuk mengakses repositori publik seperti dalam tutorial ini, di bagian repositori, aktifkan repo:status dan public_repo

    Cuplikan layar halaman pembuatan Token Akses Pribadi di GitHub

    Catatan

    Untuk membuat PAT untuk mengakses repositori privat, pilih cakupan untuk kontrol repositori penuh.

  4. Pilih tombol Buat token (Anda mungkin diminta untuk mengonfirmasi kata sandi)

  5. Salin dan simpan token yang dihasilkan di lokasi yang aman (Anda menggunakan token ini saat menentukan tugas di bagian berikut)

    Cuplikan layar Token Akses Pribadi yang dihasilkan di GitHub

Persiapkan lingkungan Anda untuk Azure CLI

Membuat tugas build

Sekarang setelah Anda menyelesaikan langkah-langkah yang diperlukan untuk mengaktifkan ACR Tasks untuk membaca status penerapan dan membuat webhook di repositori, Anda dapat membuat tugas yang memicu build gambar kontainer pada penerapan ke repo.

Pertama, isi variabel lingkungan shell ini dengan nilai yang sesuai untuk lingkungan Anda. Langkah ini tidak benar-benar diperlukan, tetapi membuat menjalankan perintah CLI Azure multibaris dalam tutorial ini sedikit lebih mudah. Jika tidak mengisi variabel lingkungan ini, Anda harus mengganti setiap nilai secara manual di mana pun variabel tersebut muncul dalam perintah contoh.

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

Sekarang,buat tugas dengan menjalankan perintah az acr task create berikut.

Catatan

Dockerfile yang digunakan dalam contoh berikut bergantung pada gambar kontainer dasar publik dari Docker Hub. Untuk meningkatkan keandalan saat menggunakan konten publik, impor, dan mengelola gambar dalam registri kontainer Azure pribadi, serta memperbarui Dockerfile Anda untuk menggunakan gambar dasar yang dikelola secara pribadi. Pelajari selengkapnya tentang bekerja dengan gambar publik.

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

Tugas ini menentukan bahwa setiap kali kode berkomitmen pada cabang utama dalam repositori yang ditentukan oleh --context, ACR Tasks akan menyusun gambar kontainer dari kode di cabang tersebut. Dockerfile yang ditentukan oleh --file dari root repositori digunakan untuk menyusun gambar. Argumen --image menentukan nilai parameter {{.Run.ID}} untuk bagian versi tag gambar, memastikan gambar yang dibuat berkorelasi dengan build tertentu, dan ditandai secara unik.

Output dari perintah az acr task create yang berhasil serupa dengan yang berikut ini:

{
  "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"
}

Menguji tugas build

Sekarang Anda memiliki tugas yang mendefinisikan build Anda. Untuk menguji pipeline build, picu build secara manual dengan menjalankan perintah az acr task run:

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

Secara default, perintah az acr task run mengalirkan output log ke konsol Anda saat Anda menjalankan perintah. Output dikondensasikan untuk menunjukkan langkah-langkah kunci.

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

Memicu build dengan penerapan

Sekarang setelah Anda menguji tugas dengan menjalankannya secara manual, picu secara otomatis dengan perubahan kode sumber.

Pertama, pastikan Anda berada di direktori yang berisi klon lokal repositori:

cd acr-build-helloworld-node

Selanjutnya, jalankan perintah berikut untuk membuat, menerapkan, dan mendorong file baru ke fork repo Anda di GitHub:

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

Anda dapat diminta untuk memberikan kredensial GitHub Anda saat menjalankan perintah git push. Berikan nama pengguna GitHub Anda, dan masukkan token akses pribadi (PAT) yang Anda buat sebelumnya untuk kata sandi.

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

Setelah Anda mendorong penerapan ke repositori Anda, webhook yang dibuat oleh ACR Tasks menembak dan memulai tugas di Azure Container Registry. Tampilkan log untuk tugas yang sedang berjalan untuk memverifikasi dan memantau kemajuan build:

az acr task logs --registry $ACR_NAME

Output mirip dengan yang berikut ini, memperlihatkan tugas yang saat ini dijalankan (atau yang terakhir dijalankan):

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

[...]

Run ID: ca7 was successful after 38s

Mencantumkan build

Untuk melihat daftar tugas yang dijalankan agar ACR Tasks telah selesai untuk registri Anda, jalankan perintah az acr task list-runs:

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

Output dari perintah akan tampak serupa dengan yang berikut ini. Pengoperasian yang dijalankan ACR Tasks ditampilkan, dan "Git Commit" muncul di kolom TRIGGER untuk tugas terbaru:

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

Langkah berikutnya

Dalam tutorial ini, Anda belajar cara menggunakan tugas untuk secara otomatis memicu build gambar kontainer di Azure ketika Anda melakukan kode sumber ke repositori Git. Beralih ke tutorial berikutnya untuk mempelajari cara membuat tugas yang memicu build saat gambar dasar dari gambar kontainer diperbarui.