Buat gambar komputer virtual kustom dengan Tindakan GitHub dan Azure
Mulai dengan GitHub Actions dengan membuat alur kerja untuk membuat dan memindai citra komputer virtual.
Dengan Tindakan GitHub, Anda dapat mempercepat proses CI/CD dengan membuat gambar mesin 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 mesin virtual dan set skala mesin virtual.
Tindakan gambar mesin virtual build menggunakan layanan Azure Image Builder.
Prasyarat
- Akun Azure dengan langganan aktif. Buat akun secara gratis.
- Akun GitHub dengan repositori aktif. Jika Anda belum memilikinya, daftar gratis.
- Contoh ini menggunakan Aplikasi Contoh 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:
Bagian | Tugas |
---|---|
Autentikasi | 1. Tambahkan identitas yang dikelola pengguna. 2. Siapkan perwakilan layanan atau Open ID Koneksi. 3. Buat rahasia GitHub. |
Build | 1. Siapkan lingkungan. 2. Buat aplikasi. |
Gambar | 1. Buat Citra VM. 2. Buat mesin virtual. |
Membuat identitas yang dikelola pengguna
Anda akan memerlukan identitas yang dikelola pengguna untuk Azure Image Builder(AIB) untuk mendistribusikan gambar. Identitas terkelola yang ditetapkan pengguna Azure Anda akan digunakan selama pembuatan gambar untuk membaca dan menulis gambar ke Shared Image Gallery.
Buat identitas yang dikelola pengguna dengan Azure CLI atau portal Azure. Tuliskan nama identitas terkelola Anda.
Sesuaikan kode JSON ini. Dalam contoh tersebut, 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 Azure, buka Azure Compute Gallery Anda dan buka Kontrol akses (IAM).
Pilih Tambahkan penetapan peran dan tetapkan Peran Pembuatan Gambar ke identitas yang dikelola pengguna Anda.
Membuat info masuk penyebaran
Buatlah perwakilan layanan dengan perintah az ad sp create-for-rbac di Azure CLI. Jalankan perintah ini dengan Azure Cloud Shell di portal Microsoft Azure atau dengan memilih tombol Coba.
az ad sp create-for-rbac --name "myML" --role contributor \
--scopes /subscriptions/<subscription-id>/resourceGroups/<group-name> \
--json-auth
Parameter --json-auth
tersedia dalam versi >Azure CLI = 2.51.0. Versi sebelum penggunaan --sdk-auth
ini dengan peringatan penghentian.
Pada contoh di atas, ganti tempat penampung dengan ID langganan, nama grup sumber daya, dan nama aplikasi Anda. Output adalah objek JSON dengan kredensial penetapan peran yang menyediakan akses ke App Service yang serupa di bawah ini. Salin objek JSON ini untuk nanti.
{
"clientId": "<GUID>",
"clientSecret": "<GUID>",
"subscriptionId": "<GUID>",
"tenantId": "<GUID>",
(...)
}
Membuat rahasia GitHub
Di GitHub, buka repositori Anda.
Buka Pengaturan di menu navigasi.
Pilih Tindakan Rahasia keamanan > dan variabel>.
Pilih Rahasia repositori baru.
Tempelkan seluruh output JSON dari perintah CLI Azure ke bidang nilai rahasia. Namai rahasia sebagai
AZURE_CREDENTIALS
.Pilih Tambahkan rahasia.
Gunakan tindakan masuk Azure
Gunakan rahasia GitHub Anda dengan tindakan Masuk Azure untuk mengautentikasi ke Azure.
Dalam alur kerja ini, Anda mengautentikasi menggunakan tindakan login Azure dengan detail perwakilan layanan yang disimpan di secrets.AZURE_CREDENTIALS
. Kemudian, Anda menjalankan tindakan Azure CLI. Untuk informasi selengkapnya tentang merujuk rahasia GitHub dalam file alur kerja, lihat Menggunakan rahasia terenkripsi dalam alur kerja di GitHub Docs.
on: [push]
name: Create Custom VM Image
jobs:
build-image:
runs-on: ubuntu-latest
steps:
- name: Log in with Azure
uses: azure/login@v1
with:
creds: '${{ secrets.AZURE_CREDENTIALS }}'
Konfigurasikan Java
Siapkan lingkungan Java dengan tindakan Java Setup SDK. Untuk contoh ini, Anda akan mengatur lingkungan, membangun dengan Maven, dan kemudian mengeluarkan artefak.
Artefak GitHub adalah cara untuk berbagi file dalam alur kerja di antara pekerjaan. Anda akan membuat artefak untuk menahan file JAR dan kemudian menambahkannya ke gambar mesin 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@v1
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 Anda, nama grup sumber daya, dan nama identitas terkelola. Ganti nilai {galleryName}
dan {imageName}
dengan nama galeri gambar dan nama gambar Anda.
Catatan
Jika tindakan Buat Gambar Panggang Aplikasi gagal dengan kesalahan izin, verifikasi bahwa Anda telah menetapkan Peran Pembuatan Gambar 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
Input | Wajib | Deskripsi |
---|---|---|
resource-group-name |
Ya | Grup sumber daya yang digunakan untuk penyimpanan dan menyimpan artefak selama proses pembuatan. |
image-builder-template-name |
No | Nama sumber daya templat builder gambar yang digunakan. |
location |
Ya | Lokasi tempat Azure Image Builder akan berjalan. Lihat lokasi yang didukung. |
build-timeout-in-minutes |
No | Waktu setelah build dibatalkan. Default ke 240. |
vm-size |
Opsional | Secara default, Standard_D1_v2 akan digunakan. Lihat ukuran komputer virtual. |
managed-identity |
Ya | Identitas terkelola yang Anda buat sebelumnya. Gunakan pengidentifikasi lengkap jika identitas Anda berada dalam grup sumber daya yang berbeda. Gunakan nama tersebut jika berada dalam grup sumber daya yang sama. |
source-os |
Ya | Jenis OS dari gambar dasar (Linux atau Windows) |
source-image-type |
Ya | Jenis gambar dasar yang akan digunakan untuk membuat gambar kustom. |
source-image |
Ya | Pengenal sumber daya untuk gambar dasar. Gambar sumber harus ada di wilayah Azure yang sama yang ditetapkan dalam nilai input lokasi. |
customizer-source |
No | Direktori tempat Anda dapat menyimpan semua artefak yang perlu ditambahkan ke gambar dasar untuk penyesuaian. Secara default, nilainya adalah ${{ GITHUB.WORKSPACE }}/workflow-artifacts. |
customizer-destination |
No | Ini adalah direktori dalam gambar yang disesuaikan tempat salinan artefak. |
customizer-windows-update |
No | Hanya untuk Windows. Nilai boolean. Jika true , pembuat gambar akan menjalankan pembaruan Windows di akhir penyesuaian. |
dist-location |
No | Untuk SharedImageGallery, ini adalah dist-type . |
dist-image-tags |
No | Ini adalah tag yang ditentukan pengguna yang ditambahkan ke gambar kustom yang dibuat (contoh: version:beta ). |
Hapus mesin virtual Anda
Sebagai langkah terakhir, buat mesin virtual dari gambar Anda.
Ganti tempat penampung untuk
{rgName}
dengan nama grup sumber daya Anda.Tambahkan rahasia GitHub dengan kata sandi mesin virtual (
VM_PWD
). Pastikan untuk menuliskan kata sandi karena Anda tidak akan dapat melihatnya lagi. Nama penggunanya 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 }}"
YAML lengkap
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@v1
with:
creds: ${{secrets.AZURE_CREDENTIALS}}
- 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 berikutnya
- Pelajari cara menyebarkan ke Azure.