Gunakan Azure Spring Apps CI/CD dengan Tindakan GitHub
Catatan
Paket Basic, Standard, dan Enterprise tidak digunakan lagi mulai pertengahan Maret 2025, dengan periode penghentian 3 tahun. Sebaiknya transisi ke Azure Container Apps. Untuk informasi selengkapnya, lihat pengumuman penghentian Azure Spring Apps.
Konsumsi Standar dan paket khusus akan ditolak mulai 30 September 2024, dengan pematian lengkap setelah enam bulan. Sebaiknya transisi ke Azure Container Apps. Untuk informasi selengkapnya, lihat Memigrasikan konsumsi Azure Spring Apps Standard dan paket khusus ke Azure Container Apps.
Artikel ini berlaku untuk: ✔️ Basic/Standard ✔️ Enterprise
Artikel ini menunjukkan kepada Anda cara membangun alur kerja CI/CD untuk Azure Spring Apps dengan GitHub Actions.
GitHub Actions mendukung alur kerja siklus hidup pengembangan perangkat lunak otomatis. Dengan GitHub Actions for Azure Spring Apps Anda dapat membuat alur kerja di repositori Anda untuk membangun, menguji, mengemas, merilis, dan menyebarkan ke Azure.
Prasyarat
Contoh ini memerlukan Azure CLI.
Menyiapkan repositori GitHub dan mengautentikasi
Anda memerlukan info masuk utama layanan Azure untuk mengotorisasi tindakan login Azure. Untuk mendapatkan info masuk Azure, jalankan perintah berikut ini di komputer lokal Anda:
az login
az ad sp create-for-rbac \
--role contributor \
--scopes /subscriptions/<SUBSCRIPTION_ID> \
--json-auth
Untuk mengakses grup sumber daya tertentu, Anda bisa mengurangi cakupan:
az ad sp create-for-rbac \
--role contributor \
--scopes /subscriptions/<SUBSCRIPTION_ID>/resourceGroups/<RESOURCE_GROUP> \
--json-auth
Perintah harus mengeluarkan objek JSON:
{
"clientId": "<GUID>",
"clientSecret": "<GUID>",
"subscriptionId": "<GUID>",
"tenantId": "<GUID>",
...
}
Contoh ini menggunakan sampel steeltoe pada GitHub. Fork repositori, buka halaman repositori GitHub untuk fork, dan pilih tab Pengaturan. Buka menu Rahasia, dan pilih Rahasia baru:
Atur nama rahasia ke AZURE_CREDENTIALS
dan nilainya ke string JSON yang Anda temukan di bawah judul Siapkan repositori GitHub Anda dan autentikasi.
Anda juga bisa mendapatkan info masuk login Azure dari Key Vault dalam Tindakan GitHub seperti yang dijelaskan dalam Mengautentikasi Azure Spring dengan Key Vault di Tindakan GitHub.
Memprovisikan instans layanan
Untuk menyediakan instans layanan Azure Spring Apps Anda, jalankan perintah berikut menggunakan CLI Azure.
az extension add --name spring
az group create \
--name <resource-group-name> \
--location eastus
az spring create \
--resource-group <resource-group-name> \
--name <service-instance-name>
az spring config-server git set \
--name <service-instance-name> \
--uri https://github.com/Azure-Samples/azure-spring-apps-samples \
--label main \
--search-paths steeltoe-sample/config
Menyusun alur kerja
Alur kerja ditentukan menggunakan opsi berikut.
Bersiap untuk penyebaran dengan Azure CLI
Perintah az spring app create
saat ini tidak idempotent. Setelah menjalankannya sekali, Anda mendapatkan kesalahan jika Menjalankan perintah yang sama lagi. Kami merekomendasikan alur kerja ini pada aplikasi dan instans Azure Spring Apps yang ada.
Gunakan perintah Cli Azure berikut ini untuk persiapan:
az config set defaults.group=<service-group-name>
az config set defaults.spring=<service-instance-name>
az spring app create --name planet-weather-provider
az spring app create --name solar-system-weather
Sebarkan dengan Azure CLI secara langsung
Buat file .github/workflows/main.yml di repositori dengan konten berikut. Ganti <nama grup sumber daya Anda> dan <nama layanan Anda> dengan nilai yang benar.
name: Steeltoe-CD
# Controls when the action runs. Triggers the workflow on push or pull request
# events but only for the main branch
on:
push:
branches: [ main]
# A workflow run is made up of one or more jobs that can run sequentially or in parallel
jobs:
# This workflow contains a single job called "build"
build:
# The type of runner that the job runs on
runs-on: ubuntu-latest
env:
working-directory: ./steeltoe-sample
resource-group-name: <your resource group name>
service-name: <your service name>
# Supported .NET Core version matrix.
strategy:
matrix:
dotnet: [ '3.1.x' ]
# Steps represent a sequence of tasks that is executed as part of the job
steps:
# Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it
- uses: actions/checkout@v2
# Set up .NET Core 3.1 SDK
- uses: actions/setup-dotnet@v1
with:
dotnet-version: ${{ matrix.dotnet }}
# Set credential for az login
- uses: azure/login@v1.1
with:
creds: ${{ secrets.AZURE_CREDENTIALS }}
- name: install Azure CLI extension
run: |
az extension add --name spring --yes
- name: Build and package planet-weather-provider app
working-directory: ${{env.working-directory}}/src/planet-weather-provider
run: |
dotnet publish
az spring app deploy -n planet-weather-provider --runtime-version NetCore_31 --main-entry Microsoft.Azure.SpringCloud.Sample.PlanetWeatherProvider.dll --artifact-path ./publish-deploy-planet.zip -s ${{ env.service-name }} -g ${{ env.resource-group-name }}
- name: Build solar-system-weather app
working-directory: ${{env.working-directory}}/src/solar-system-weather
run: |
dotnet publish
az spring app deploy -n solar-system-weather --runtime-version NetCore_31 --main-entry Microsoft.Azure.SpringCloud.Sample.SolarSystemWeather.dll --artifact-path ./publish-deploy-solar.zip -s ${{ env.service-name }} -g ${{ env.resource-group-name }}
Menyiapkan repositori GitHub dan mengautentikasi
Anda memerlukan info masuk utama layanan Azure untuk mengotorisasi tindakan login Azure. Untuk mendapatkan info masuk Azure, jalankan perintah berikut ini di komputer lokal Anda:
az login
az ad sp create-for-rbac \
--role contributor \
--scopes /subscriptions/<SUBSCRIPTION_ID> \
--json-auth
Untuk mengakses grup sumber daya tertentu, Anda bisa mengurangi cakupan:
az ad sp create-for-rbac \
--role contributor \
--scopes /subscriptions/<SUBSCRIPTION_ID>/resourceGroups/<RESOURCE_GROUP> \
--json-auth
Perintah harus mengeluarkan objek JSON:
{
"clientId": "<GUID>",
"clientSecret": "<GUID>",
"subscriptionId": "<GUID>",
"tenantId": "<GUID>",
...
}
Contoh ini menggunakan sampel PiggyMetrics di GitHub. Fork sampel, hapus centang Salin cabang Azure saja, buka halaman repositori GitHub, dan pilih tab Pengaturan . Buka menu Rahasia , dan pilih Tambahkan rahasia baru:
Atur nama rahasia ke AZURE_CREDENTIALS
dan nilainya ke string JSON yang Anda temukan di bawah judul Siapkan repositori GitHub Anda dan autentikasi.
Anda juga bisa mendapatkan info masuk login Azure dari Key Vault dalam Tindakan GitHub seperti yang dijelaskan dalam Mengautentikasi Azure Spring dengan Key Vault di Tindakan GitHub.
Memprovisikan instans layanan
Untuk menyediakan instans layanan Azure Spring Apps Anda, jalankan perintah berikut menggunakan CLI Azure.
az extension add --name spring
az group create --location eastus --name <resource group name>
az spring create -n <service instance name> -g <resource group name>
az spring config-server git set -n <service instance name> --uri https://github.com/xxx/piggymetrics --label config
Alur kerja sampel end-to-end
Contoh berikut menunjukkan skenario penggunaan yang umum.
Menyebarkan
Bagian berikut menunjukkan kepada Anda berbagai opsi untuk menyebarkan aplikasi Anda.
Ke produksi
Azure Spring Apps mendukung penyebaran ke penyebaran dengan artefak bawaan (misalnya, JAR atau .NET Core ZIP) atau arsip kode sumber.
Contoh berikut menyebar ke penyebaran produksi default di Azure Spring Apps menggunakan file JAR yang dibuat oleh Maven. Contoh ini adalah satu-satunya skenario penyebaran yang mungkin saat menggunakan SKU Dasar:
Catatan
Pola pencarian paket hanya boleh mengembalikan tepat satu paket. Jika tugas build menghasilkan beberapa paket JAR seperti sources.jar dan javadoc.jar, Anda perlu memperbaiki pola pencarian sehingga hanya cocok dengan artefak biner aplikasi.
name: AzureSpringApps
on: push
env:
ASC_PACKAGE_PATH: ${{ github.workspace }}
AZURE_SUBSCRIPTION: <azure subscription name>
jobs:
deploy_to_production:
runs-on: ubuntu-latest
name: deploy to production with artifact
steps:
- name: Checkout GitHub Action
uses: actions/checkout@v2
- name: Set up Java 11
uses: actions/setup-java@v3
with:
distribution: 'temurin'
java-version: '11'
- name: maven build, clean
run: |
mvn clean package
- name: Login via Azure CLI
uses: azure/login@v1
with:
creds: ${{ secrets.AZURE_CREDENTIALS }}
- name: deploy to production with artifact
uses: azure/spring-apps-deploy@v1
with:
azure-subscription: ${{ env.AZURE_SUBSCRIPTION }}
action: Deploy
service-name: <service instance name>
app-name: <app name>
use-staging-deployment: false
package: ${{ env.ASC_PACKAGE_PATH }}/**/*.jar
Contoh berikut menyebarkan ke penyebaran produksi default di Azure Spring Apps menggunakan kode sumber.
name: AzureSpringApps
on: push
env:
ASC_PACKAGE_PATH: ${{ github.workspace }}
AZURE_SUBSCRIPTION: <azure subscription name>
jobs:
deploy_to_production:
runs-on: ubuntu-latest
name: deploy to production with source code
steps:
- name: Checkout GitHub Action
uses: actions/checkout@v2
- name: Login via Azure CLI
uses: azure/login@v1
with:
creds: ${{ secrets.AZURE_CREDENTIALS }}
- name: deploy to production step with source code
uses: azure/spring-apps-deploy@v1
with:
azure-subscription: ${{ env.AZURE_SUBSCRIPTION }}
action: deploy
service-name: <service instance name>
app-name: <app name>
use-staging-deployment: false
package: ${{ env.ASC_PACKAGE_PATH }}
Contoh berikut menyebarkan ke penyebaran produksi default di Azure Spring Apps menggunakan kode sumber dalam paket Enterprise. Anda dapat menentukan penyusun mana yang akan digunakan untuk menyebarkan tindakan menggunakan builder
opsi .
name: AzureSpringApps
on: push
env:
ASC_PACKAGE_PATH: ${{ github.workspace }}
AZURE_SUBSCRIPTION: <azure subscription name>
jobs:
deploy_to_production:
runs-on: ubuntu-latest
name: deploy to production with source code
steps:
- name: Checkout GitHub Action
uses: actions/checkout@v2
- name: Login via Azure CLI
uses: azure/login@v1
with:
creds: ${{ secrets.AZURE_CREDENTIALS }}
- name: deploy to production step with source code in the Enterprise plan
uses: azure/spring-apps-deploy@v1
with:
azure-subscription: ${{ env.AZURE_SUBSCRIPTION }}
action: deploy
service-name: <service instance name>
app-name: <app name>
use-staging-deployment: false
package: ${{ env.ASC_PACKAGE_PATH }}
builder: <builder>
Contoh berikut menyebarkan ke penyebaran produksi default di Azure Spring Apps dengan gambar kontainer yang ada.
name: AzureSpringApps
on: push
env:
ASC_PACKAGE_PATH: ${{ github.workspace }}
AZURE_SUBSCRIPTION: <azure subscription name>
jobs:
deploy_to_production:
runs-on: ubuntu-latest
name: deploy to production with source code
steps:
- name: Checkout GitHub Action
uses: actions/checkout@v2
- name: Login via Azure CLI
uses: azure/login@v1
with:
creds: ${{ secrets.AZURE_CREDENTIALS }}
- name: Deploy Custom Image
uses: Azure/spring-apps-deploy@v1
with:
azure-subscription: ${{ env.AZURE_SUBSCRIPTION }}
action: deploy
service-name: <service instance name>
app-name: <app name>
deployment-name: <deployment name>
container-registry: <your container image registry>
registry-username: ${{ env.REGISTRY_USERNAME }}
registry-password: ${{ secrets.REGISTRY_PASSWORD }}
container-image: <your image tag>
Selama penyebaran, Anda dapat mencapai lebih banyak fungsionalitas dengan menggunakan lebih banyak argumen. Untuk informasi selengkapnya, lihat bagian Argumen dari GitHub Action untuk menyebarkan ke Azure Spring Apps.
Biru-hijau
Contoh berikut disebarkan ke penyebaran penahapan yang ada. Penyebaran ini tidak menerima lalu lintas produksi hingga ditetapkan sebagai penyebaran produksi. Anda dapat mengatur use-staging-deployment true untuk menemukan penyebaran penahapan secara otomatis atau hanya mengalokasikan nama penyebaran tertentu. Kami hanya fokus pada spring-apps-deploy
tindakan dan meninggalkan pekerjaan persiapan di sisa artikel.
# environment preparation configurations omitted
steps:
- name: blue green deploy step use-staging-deployment
uses: azure/spring-apps-deploy@v1
with:
azure-subscription: ${{ env.AZURE_SUBSCRIPTION }}
action: deploy
service-name: <service instance name>
app-name: <app name>
use-staging-deployment: true
package: ${{ env.ASC_PACKAGE_PATH }}/**/*.jar
# environment preparation configurations omitted
steps:
- name: blue green deploy step with deployment-name
uses: azure/spring-apps-deploy@v1
with:
azure-subscription: ${{ env.AZURE_SUBSCRIPTION }}
action: deploy
service-name: <service instance name>
app-name: <app name>
deployment-name: staging
package: ${{ env.ASC_PACKAGE_PATH }}/**/*.jar
Untuk informasi selengkapnya tentang penyebaran biru-hijau, termasuk pendekatan alternatif, lihat Strategi penyebaran biru-hijau.
Mengatur penyebaran produksi
Contoh berikut menetapkan penyebaran penahapan saat ini sebagai produksi, secara efektif menukar penyebaran mana yang menerima lalu lintas produksi.
# environment preparation configurations omitted
steps:
- name: set production deployment step
uses: azure/spring-apps-deploy@v1
with:
azure-subscription: ${{ env.AZURE_SUBSCRIPTION }}
action: set-production
service-name: <service instance name>
app-name: <app name>
use-staging-deployment: true
Menghapus penyebaran penahapan
Tindakan ini Delete Staging Deployment
memungkinkan Anda menghapus penyebaran yang tidak menerima lalu lintas produksi. Penghapusan ini membebaskan sumber daya yang digunakan oleh penyebaran tersebut dan memberikan ruang untuk penyebaran penahapan baru:
# environment preparation configurations omitted
steps:
- name: Delete staging deployment step
uses: azure/spring-apps-deploy@v1
with:
azure-subscription: ${{ env.AZURE_SUBSCRIPTION }}
action: delete-staging-deployment
service-name: <service instance name>
app-name: <app name>
Membuat atau memperbarui build (hanya paket Perusahaan)
Contoh berikut membuat atau memperbarui sumber daya build dalam paket Enterprise:
# environment preparation configurations omitted
steps:
- name: Create or update build
uses: azure/spring-apps-deploy@v1
with:
azure-subscription: ${{ env.AZURE_SUBSCRIPTION }}
action: build
service-name: <service instance name>
build-name: <build name>
package: ${{ env.ASC_PACKAGE_PATH }}
builder: <builder>
Hapus build (hanya paket Enterprise)
Contoh berikut menghapus sumber daya build dalam paket Enterprise:
# environment preparation configurations omitted
steps:
- name: Delete build
uses: azure/spring-apps-deploy@v1
with:
azure-subscription: ${{ env.AZURE_SUBSCRIPTION }}
action: delete-build
service-name: <service instance name>
build-name: <build name>
Sebarkan dengan Maven Plugin
Opsi lain adalah menggunakan Plugin Maven untuk menyebarkan Jar dan memperbarui pengaturan Aplikasi. Perintahnya mvn azure-spring-apps:deploy
idempogen dan secara otomatis membuat Aplikasi jika diperlukan. Anda tidak perlu membuat aplikasi yang sesuai terlebih dahulu.
name: AzureSpringApps
on: push
jobs:
build-and-deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@main
- name: Set up Java 11
uses: actions/setup-java@v3
with:
distribution: 'temurin'
java-version: '11'
- name: maven build, clean
run: |
mvn clean package -DskipTests
# Maven plugin can cosume this authentication method automatically
- name: Azure Login
uses: azure/login@v1
with:
creds: ${{ secrets.AZURE_CREDENTIALS }}
# Maven deploy, make sure you have correct configurations in your pom.xml
- name: deploy to Azure Spring Apps using Maven
run: |
mvn azure-spring-apps:deploy
Jalankan alur kerja
Tindakan GitHub harus diaktifkan secara otomatis setelah Anda mendorong .github/workflow/main.yml ke GitHub. Tindakan dipicu saat Anda mendorong penerapan baru. Jika Anda membuat file ini di browser, tindakan Anda seharusnya sudah berjalan.
Untuk memverifikasi bahwa tindakan telah diaktifkan, pilih tab Tindakan di halaman repositori GitHub:
Jika tindakan Anda berjalan dalam kesalahan, misalnya, jika Anda belum mengatur info masuk Azure, Anda dapat menjalankan ulang pemeriksaan setelah memperbaiki kesalahan. Pada halaman repositori GitHub, pilih Tindakan, pilih tugas alur kerja tertentu, lalu pilih tombol Jalankan ulang pemeriksaan untuk menjalankan ulang pemeriksaan: