Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Mulai menggunakan GitHub Actions dengan membuat alur kerja untuk membangun gambar komputer virtual.
Dengan GitHub Actions, Anda dapat mempercepat proses CI/CD dengan membuat gambar komputer virtual kustom dengan artefak dari alur kerja Anda. Anda dapat membuat gambar dan mendistribusikannya ke Shared Image Gallery.
Anda kemudian dapat menggunakan gambar-gambar ini untuk membuat komputer virtual dan set skala komputer virtual.
Tindakan pembuatan citra mesin virtual menggunakan layanan Azure Image Builder.
Prasyarat
- Sebuah akun Azure dengan langganan aktif. Buat akun secara gratis.
- Akun GitHub dengan repositori aktif. Jika Anda belum memilikinya, daftar gratis.
- Contoh ini menggunakan Aplikasi Sampel Java Spring PetClinic.
- Azure Compute Gallery dengan gambar.
Gambaran umum file alur kerja
Sebuah alur kerja ditentukan oleh file YAML (.yml) pada jalur /.github/workflows/ di dalam repositori Anda. Definisi ini berisi berbagai langkah dan parameter yang membentuk alur kerja.
File memiliki tiga bagian:
| Section | Tasks |
|---|---|
| Authentication | 1. Tambahkan identitas yang dikelola pengguna. 2. Siapkan service principal atau Open ID Connect. 3. Buat rahasia GitHub. |
| Membangun | 1. Siapkan lingkungan. 2. Bangun aplikasi. |
| Gambar | 1. Buat Gambar VM. 2. Buat komputer virtual. |
Membuat identitas yang dikelola pengguna
Anda memerlukan identitas yang dikelola pengguna untuk Azure Image Builder (AIB) untuk mendistribusikan gambar. Identitas terkelola yang ditetapkan pengguna Azure Anda akan digunakan selama pembangunan citra untuk membaca dan menulis citra ke Shared Image Gallery.
Buat identitas yang dikelola pengguna dengan Azure CLI atau portal Microsoft Azure. Tuliskan nama identitas terkelola Anda.
Sesuaikan kode JSON ini. Ganti tempat penampung untuk
{subscriptionID}dan{rgName}dengan ID langganan dan nama grup sumber daya Anda.{ "properties": { "roleName": "Image Creation Role", "IsCustom": true, "description": "Azure Image Builder access to create resources for the image build", "assignableScopes": [ "/subscriptions/{subscriptionID}/resourceGroups/{rgName}" ], "permissions": [ { "actions": [ "Microsoft.Compute/galleries/read", "Microsoft.Compute/galleries/images/read", "Microsoft.Compute/galleries/images/versions/read", "Microsoft.Compute/galleries/images/versions/write", "Microsoft.Compute/images/write", "Microsoft.Compute/images/read", "Microsoft.Compute/images/delete" ], "notActions": [], "dataActions": [], "notDataActions": [] } ] } }Gunakan kode JSON ini untuk membuat peran kustom baru dengan JSON.
Di portal Microsoft Azure, buka Azure Compute Gallery Anda dan buka Kontrol akses (IAM).
Pilih opsi Tambahkan penetapan peran. Tetapkan Peran Pembuat Citra ke identitas yang dikelola pengguna Anda.
Menghasilkan kredensial penyebaran
Untuk menggunakan tindakan Azure Login dengan OIDC, Anda perlu mengonfigurasi kredensial identitas gabungan pada aplikasi Microsoft Entra atau identitas terkelola yang ditetapkan pengguna.
Opsi 1: Aplikasi Microsoft Entra
- Buat aplikasi Microsoft Entra dengan principal layanan menggunakan portal Azure, Azure CLI, atau Azure PowerShell.
- Salin nilai untuk ID Klien, ID Langganan, dan ID Direktori (penyewa) untuk digunakan nanti di alur kerja GitHub Actions Anda.
- Tetapkan peran yang sesuai untuk perwakilan layanan Anda dengan portal Azure, Azure CLI, atau Azure PowerShell.
- Mengonfigurasi kredensial identitas federasi pada aplikasi Microsoft Entra untuk mempercayai token yang dikeluarkan oleh GitHub Actions ke repositori GitHub Anda.
Opsi 2: Identitas terkelola yang ditetapkan pengguna
- Buat identitas terkelola yang ditetapkan oleh pengguna.
- Salin nilai untuk ID Klien, ID Langganan, dan ID Direktori (penyewa) untuk digunakan nanti di alur kerja GitHub Actions Anda.
- Tetapkan peran yang sesuai ke identitas terkelola yang ditetapkan penggunaAnda.
- Konfigurasikan kredensial identitas federasi pada identitas terkelola yang ditetapkan pengguna untuk mempercayai token yang dikeluarkan oleh GitHub Actions ke repositori GitHub Anda.
Membuat rahasia GitHub
Anda perlu memberikan ID Klien, ID Direktori (penyewa), dan ID Langganan aplikasi Anda ke tindakan masuk. Nilai ini bisa disediakan secara langsung di alur kerja atau bisa disimpan di rahasia GitHub dan direferensikan dalam alur kerja Anda. Menyimpan nilai sebagai GitHub rahasia adalah opsi yang lebih aman.
Di GitHub, buka repositori Anda.
Pilih Keamanan > Rahasia dan variabel > Tindakan.
Pilih Rahasia repositori baru.
Membuat rahasia untuk
AZURE_CLIENT_ID,AZURE_TENANT_ID, danAZURE_SUBSCRIPTION_ID. Salin nilai-nilai ini dari aplikasi Microsoft Entra atau identitas terkelola yang ditetapkan pengguna untuk rahasia GitHub Anda:Rahasia GitHub Aplikasi Microsoft Entra atau identitas terkelola yang ditetapkan pengguna AZURE_CLIENT_ID ID Pelanggan AZURE_SUBSCRIPTION_ID (ID Langganan Azure) Identifikasi Langganan AZURE_TENANT_ID (ID Penyewa Azure) ID Direktori (Penyewa) Nota
Untuk alasan keamanan, sebaiknya gunakan Rahasia GitHub daripada meneruskan nilai langsung ke alur kerja.
Gunakan tindakan masuk Azure
Gunakan rahasia GitHub Anda dengan tindakan Masuk Azure untuk mengautentikasi ke Azure.
Untuk Open ID Connect, Anda akan menggunakan kredensial federasi yang terkait dengan aplikasi Direktori Aktif Anda.
Untuk informasi selengkapnya tentang merujuk rahasia GitHub dalam file alur kerja, lihat Menggunakan rahasia terenkripsi dalam alur kerja di Dokumen GitHub.
on: [push]
name: Create Custom VM Image
jobs:
build-image:
runs-on: ubuntu-latest
steps:
- name: Log in with Azure
uses: azure/login@v2
with:
client-id: ${{ secrets.AZURE_CLIENT_ID }}
tenant-id: ${{ secrets.AZURE_TENANT_ID }}
subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
Konfigurasikan Java
Siapkan lingkungan Java dengan tindakan Java Setup SDK. Untuk contoh ini, Anda akan menyiapkan lingkungan, membangun dengan Maven, lalu menghasilkan artefak.
Artefak GitHub adalah cara untuk berbagi file dalam alur kerja antar pekerjaan. Anda akan membuat artefak untuk menyimpan file JAR lalu menambahkannya ke gambar komputer virtual.
on: [push]
name: Create Custom VM Image
jobs:
build-image:
runs-on: ubuntu-latest
strategy:
matrix:
java: [ '17' ]
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Login via Az module
uses: azure/login@v2
with:
creds: ${{secrets.AZURE_CREDENTIALS}}
- name: Set up JDK ${{matrix.java}}
uses: actions/setup-java@v2
with:
java-version: ${{matrix.java}}
distribution: 'adopt'
cache: maven
- name: Build with Maven Wrapper
run: ./mvnw -B package
- name: Build Java
run: mvn --batch-mode --update-snapshots verify
- run: mkdir staging && cp target/*.jar staging
- uses: actions/upload-artifact@v2
with:
name: Package
path: staging
Membuat citra
Gunakan tindakan Build Azure Virtual Machine Image untuk membuat gambar komputer virtual kustom.
Ganti tempat penampung untuk {subscriptionID}, {rgName}dan {Identity} dengan ID langganan, nama grup sumber daya, dan nama identitas terkelola Anda. Ganti nilai {galleryName} dan {imageName} dengan nama galeri gambar dan nama gambar Anda.
Nota
Jika tindakan Membuat Citra yang Sudah Dibuat Aplikasi gagal dengan kesalahan izin, verifikasi bahwa Anda telah menetapkan Peran Pembuat Citra ke identitas yang dikelola pengguna Anda.
- name: Create App Baked Image
id: imageBuilder
uses: azure/build-vm-image@v0
with:
location: 'eastus2'
resource-group-name: '{rgName}'
managed-identity: '{Identity}' # Managed identity
source-os-type: 'windows'
source-image-type: 'platformImage'
source-image: MicrosoftWindowsServer:WindowsServer:2019-Datacenter:latest #unique identifier of source image
dist-type: 'SharedImageGallery'
dist-resource-id: '/subscriptions/{subscriptionID}/resourceGroups/{rgName}/providers/Microsoft.Compute/galleries/{galleryName}/images/{imageName}/versions/0.1.${{ GITHUB.RUN_ID }}' #Replace with the resource id of your shared image gallery's image definition
dist-location: 'eastus2'
Argumen tindakan Mesin Virtual
| Masukan | Diperlukan | Description |
|---|---|---|
resource-group-name |
Yes | Grup sumber daya yang digunakan untuk penyimpanan dan pengelolaan artefak selama proses pembangunan. |
image-builder-template-name |
Tidak. | Nama sumber daya templat penyusun gambar yang digunakan. |
location |
Yes | Lokasi tempat Azure Image Builder akan berjalan. Lihat lokasi yang didukung. |
build-timeout-in-minutes |
Tidak. | Waktu setelah build dibatalkan. Diatur ke 240. |
vm-size |
Fakultatif | Secara default, Standard_D1_v2 akan digunakan. Lihat ukuran mesin virtual. |
managed-identity |
Yes | Identitas yang dikelola pengguna yang Anda buat sebelumnya. Gunakan pengidentifikasi lengkap jika identitas Anda berada dalam grup sumber daya yang berbeda. Gunakan nama jika berada dalam grup sumber daya yang sama. |
source-os |
Yes | Jenis OS gambar dasar (Linux atau Windows) |
source-image-type |
Yes | Jenis gambar dasar yang akan digunakan untuk membuat gambar kustom. |
source-image |
Yes | Pengidentifikasi sumber daya untuk gambar dasar. Gambar sumber harus berada di wilayah Azure yang sama dengan yang ditetapkan dalam nilai input lokasi. |
customizer-source |
Tidak. | Direktori tempat Anda dapat menyimpan semua artefak yang perlu ditambahkan ke gambar dasar untuk kustomisasi. Secara default, nilainya adalah ${{ GITHUB.WORKSPACE }}/workflow-artifacts. |
customizer-destination |
Tidak. | Ini adalah direktori dalam gambar yang disesuaikan tempat artefak disalin. |
customizer-windows-update |
Tidak. | Hanya untuk Windows. Nilai Boolean. Jika true, penyusun gambar akan menjalankan pembaruan Windows di akhir kustomisasi. |
dist-location |
Tidak. | Untuk SharedImageGallery, ini adalah dist-type. |
dist-image-tags |
Tidak. | Ini adalah tag yang ditentukan pengguna yang ditambahkan ke gambar kustom yang dibuat (misalnya: version:beta). |
Membuat komputer virtual Anda
Sebagai langkah terakhir, buat komputer virtual dari gambar Anda.
Ganti pengganti
{rgName}dengan nama grup sumber daya Anda.Tambahkan rahasia GitHub dengan kata sandi komputer virtual (
VM_PWD). Pastikan untuk menuliskan kata sandi karena Anda tidak akan dapat melihatnya lagi. Nama pengguna adalahmyuser.
- name: CREATE VM
uses: azure/CLI@v1
with:
azcliversion: 2.0.72
inlineScript: |
az vm create --resource-group ghactions-vMimage --name "app-vm-${{ GITHUB.RUN_NUMBER }}" --admin-username myuser --admin-password "${{ secrets.VM_PWD }}" --location eastus2 \
--image "${{ steps.imageBuilder.outputs.custom-image-uri }}"
Lengkapi YAML
on: [push]
name: Create Custom VM Image
jobs:
build-image:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v2
- name: Login via Az module
uses: azure/login@v2
with:
client-id: ${{ secrets.AZURE_CLIENT_ID }}
tenant-id: ${{ secrets.AZURE_TENANT_ID }}
subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
- name: Setup Java 1.8.x
uses: actions/setup-java@v1
with:
java-version: '1.8.x'
- name: Build Java
run: mvn --batch-mode --update-snapshots verify
- run: mkdir staging && cp target/*.jar staging
- uses: actions/upload-artifact@v2
with:
name: Package
path: staging
- name: Create App Baked Image
id: imageBuilder
uses: azure/build-vm-image@v0
with:
location: 'eastus2'
resource-group-name: '{rgName}'
managed-identity: '{Identity}' # Managed identity
source-os-type: 'windows'
source-image-type: 'platformImage'
source-image: MicrosoftWindowsServer:WindowsServer:2019-Datacenter:latest #unique identifier of source image
dist-type: 'SharedImageGallery'
dist-resource-id: '/subscriptions/{subscriptionID}/resourceGroups/{rgName}/providers/Microsoft.Compute/galleries/{galleryName}/images/{imageName}/versions/0.1.${{ GITHUB.RUN_ID }}' #Replace with the resource id of your shared image gallery's image definition
dist-location: 'eastus2'
- name: CREATE VM
uses: azure/CLI@v1
with:
azcliversion: 2.0.72
inlineScript: |
az vm create --resource-group ghactions-vMimage --name "app-vm-${{ GITHUB.RUN_NUMBER }}" --admin-username myuser --admin-password "${{ secrets.VM_PWD }}" --location eastus2 \
--image "${{ steps.imageBuilder.outputs.custom-image-uri }}"
Langkah selanjutnya
- Pelajari cara menyebarkan ke Azure.