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:
Buka halaman pembuatan PAT di GitHub di https://github.com/settings/tokens/new
Masukkan deskripsi singkat untuk token, misalnya, "Demo Tugas ACR"
Pilih cakupan ACR untuk mengakses repositori. Untuk mengakses repositori publik seperti dalam tutorial ini, di bagian repositori, aktifkan repo:status dan public_repo
Catatan
Untuk membuat PAT untuk mengakses repositori privat, pilih cakupan untuk kontrol repositori penuh.
Pilih tombol Buat token (Anda mungkin diminta untuk mengonfirmasi kata sandi)
Salin dan simpan token yang dihasilkan di lokasi yang aman (Anda menggunakan token ini saat menentukan tugas di bagian berikut)
Persiapkan lingkungan Anda untuk Azure CLI
Gunakan lingkungan Bash di Azure Cloud Shell. Untuk informasi selengkapnya, lihat Mulai Cepat untuk Bash di Azure Cloud Shell.
Jika Anda lebih memilih untuk menjalankan perintah referensi CLI secara lokal, pasang Azure CLI. Jika Anda menjalankan Windows atau macOS, pertimbangkan untuk menjalankan Azure CLI dalam kontainer Docker. Untuk informasi lebih lanjut, lihat Cara menjalankan Azure CLI di kontainer Docker.
Jika Anda menggunakan instalasi lokal, masuk ke Azure CLI dengan menggunakan perintah login az. Untuk menyelesaikan proses autentikasi, ikuti langkah-langkah yang ditampilkan di terminal Anda. Untuk opsi masuk lainnya, lihat Masuk dengan Azure CLI.
Saat Anda diminta, instal ekstensi Azure CLI pada penggunaan pertama. Untuk informasi selengkapnya tentang ekstensi, lihat Menggunakan ekstensi dengan Azure CLI.
Jalankan versi az untuk menemukan versi dan pustaka dependen yang diinstal. Untuk meningkatkan ke versi terbaru, jalankan peningkatan az.
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.