GitHub Actions ile Azure Spring Apps CI/CD kullanma
Not
Temel, Standart ve Kurumsal planları, 3 yıllık kullanımdan kaldırma süresiyle Mart 2025 ortasından itibaren kullanımdan kaldırılacaktır. Azure Container Apps'e geçiş yapmanızı öneririz. Daha fazla bilgi için bkz . Azure Spring Apps kullanımdan kaldırma duyurusu.
Standart tüketim ve ayrılmış plan, altı ay sonra tamamen kapatılarak 30 Eylül 2024'den itibaren kullanımdan kaldırılacaktır. Azure Container Apps'e geçiş yapmanızı öneririz. Daha fazla bilgi için bkz . Azure Spring Apps Standart tüketimini ve ayrılmış planı Azure Container Apps'e geçirme.
Bu makale şunlar için geçerlidir: ✔️ Temel/Standart ✔️ Kurumsal
Bu makalede, GitHub Actions ile Azure Spring Apps için CI/CD iş akışı oluşturma adımları gösterilmektedir.
GitHub Actions, otomatik yazılım geliştirme yaşam döngüsü iş akışını destekler. Azure Spring Apps için GitHub Actions ile deponuzda derlemek, test etmek, paketlemek, yayımlamak ve Azure'a dağıtmak için iş akışları oluşturabilirsiniz.
Önkoşullar
Bu örnekte Azure CLI gereklidir.
GitHub deposunu ayarlama ve kimlik doğrulaması
Azure oturum açma eylemini yetkilendirmek için bir Azure hizmet sorumlusu kimlik bilgilerine ihtiyacınız vardır. Azure kimlik bilgilerini almak için yerel makinenizde aşağıdaki komutları yürütebilirsiniz:
az login
az ad sp create-for-rbac \
--role contributor \
--scopes /subscriptions/<SUBSCRIPTION_ID> \
--json-auth
Belirli bir kaynak grubuna erişmek için kapsamı azaltabilirsiniz:
az ad sp create-for-rbac \
--role contributor \
--scopes /subscriptions/<SUBSCRIPTION_ID>/resourceGroups/<RESOURCE_GROUP> \
--json-auth
Komutun bir JSON nesnesi vermesi gerekir:
{
"clientId": "<GUID>",
"clientSecret": "<GUID>",
"subscriptionId": "<GUID>",
"tenantId": "<GUID>",
...
}
Bu örnekte GitHub'da steeltoe örneği kullanılmaktadır. Deponun çatalını oluşturun, çatalın GitHub deposu sayfasını açın ve Ayarlar sekmesini seçin. Gizli Diziler menüsünü açın ve Yeni gizli dizi'yi seçin:
Gizli dizi adını AZURE_CREDENTIALS
olarak ve değerini GitHub deponuzu ayarlama ve kimlik doğrulaması başlığı altında bulduğunuz JSON dizesi olarak ayarlayın.
GitHub Actions'ta Azure Spring'i Key Vault ile kimlik doğrulaması konusunda açıklandığı gibi GitHub Actions'ta Key Vault'tan Azure oturum açma kimlik bilgilerini de alabilirsiniz.
Hizmet örneği sağlama
Azure Spring Apps hizmet örneğinizi sağlamak için Azure CLI kullanarak aşağıdaki komutları çalıştırın.
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
İş akışını oluşturma
İş akışı aşağıdaki seçenekler kullanılarak tanımlanır.
Azure CLI ile dağıtıma hazırlanma
Komut az spring app create
şu anda bir kez etkili değildir. Bir kez çalıştırdıktan sonra, aynı komutu yeniden çalıştırırsanız bir hata alırsınız. Bu iş akışının mevcut Azure Spring Apps uygulamaları ve örneklerinde kullanılması önerilir.
Hazırlık için aşağıdaki Azure CLI komutlarını kullanın:
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
Azure CLI ile doğrudan dağıtma
Depoda .github/workflows/main.yml dosyasını aşağıdaki içerikle oluşturun. Kaynak grubu adınızı> ve <hizmet adınızı> doğru değerlerle değiştirin.<
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 }}
GitHub deposunu ayarlama ve kimlik doğrulaması
Azure oturum açma eylemini yetkilendirmek için bir Azure hizmet sorumlusu kimlik bilgilerine ihtiyacınız vardır. Azure kimlik bilgilerini almak için yerel makinenizde aşağıdaki komutları yürütebilirsiniz:
az login
az ad sp create-for-rbac \
--role contributor \
--scopes /subscriptions/<SUBSCRIPTION_ID> \
--json-auth
Belirli bir kaynak grubuna erişmek için kapsamı azaltabilirsiniz:
az ad sp create-for-rbac \
--role contributor \
--scopes /subscriptions/<SUBSCRIPTION_ID>/resourceGroups/<RESOURCE_GROUP> \
--json-auth
Komutun bir JSON nesnesi vermesi gerekir:
{
"clientId": "<GUID>",
"clientSecret": "<GUID>",
"subscriptionId": "<GUID>",
"tenantId": "<GUID>",
...
}
Bu örnekte GitHub'da PiggyMetrics örneği kullanılmaktadır. Örneğin çatalını oluşturun, Yalnızca Azure dalını kopyala'nın işaretini kaldırın, GitHub deposu sayfasını açın ve Ayarlar sekmesini seçin. Gizli Diziler menüsünü açın ve Yeni gizli dizi ekle'yi seçin:
Gizli dizi adını AZURE_CREDENTIALS
olarak ve değerini GitHub deponuzu ayarlama ve kimlik doğrulaması başlığı altında bulduğunuz JSON dizesi olarak ayarlayın.
GitHub Actions'ta Azure Spring'i Key Vault ile kimlik doğrulaması konusunda açıklandığı gibi GitHub Actions'ta Key Vault'tan Azure oturum açma kimlik bilgilerini de alabilirsiniz.
Hizmet örneği sağlama
Azure Spring Apps hizmet örneğinizi sağlamak için Azure CLI kullanarak aşağıdaki komutları çalıştırın.
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
Uçtan uca örnek iş akışları
Aşağıdaki örneklerde yaygın kullanım senaryoları gösterilmektedir.
Dağıtılıyor
Aşağıdaki bölümlerde uygulamanızı dağıtmak için çeşitli seçenekler gösterilmektedir.
Üretime
Azure Spring Apps, yerleşik yapıtlar (jar veya .NET Core ZIP gibi) veya kaynak kodu arşivi ile dağıtımlara dağıtmayı destekler.
Aşağıdaki örnek, Maven tarafından oluşturulan JAR dosyasını kullanarak Azure Spring Apps'te varsayılan üretim dağıtımına dağıtılır. Bu örnek, Temel SKU kullanılırken olası tek dağıtım senaryosudur:
Not
Paket arama düzeni yalnızca bir paket döndürmelidir. Derleme görevi sources.jar ve javadoc.jar gibi birden çok JAR paketi oluşturuyorsa, arama desenini yalnızca uygulama ikili yapıtıyla eşleşecek şekilde geliştirmeniz gerekir.
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
Aşağıdaki örnek, kaynak kodu kullanarak Azure Spring Apps'te varsayılan üretim dağıtımına dağıtılır.
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 }}
Aşağıdaki örnek, Kurumsal plandaki kaynak kodu kullanarak Azure Spring Apps'te varsayılan üretim dağıtımına dağıtılır. seçeneğini kullanarak dağıtım eylemleri için hangi oluşturucunun builder
kullanılacağını belirtebilirsiniz.
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>
Aşağıdaki örnek, mevcut bir kapsayıcı görüntüsüyle Azure Spring Apps'te varsayılan üretim dağıtımına dağıtılır.
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>
Dağıtım sırasında daha fazla bağımsız değişken kullanarak daha fazla işlevsellik elde edebilirsiniz. Daha fazla bilgi için Azure Spring Apps'e dağıtım için GitHub Eylemi'nin Bağımsız Değişkenler bölümüne bakın.
Mavi-yeşil
Aşağıdaki örnekler var olan bir hazırlama dağıtımına dağıtılır. Bu dağıtım, üretim dağıtımı olarak ayarlanana kadar üretim trafiği almaz. Hazırlama dağıtımını otomatik olarak bulmak için use-staging-deployment true ayarlayabilir veya yalnızca belirli bir dağıtım-adı ayırabilirsiniz. Yalnızca eyleme spring-apps-deploy
odaklanıyoruz ve makalenin geri kalanında hazırlık işlerini dışarıda bırakıyoruz.
# 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
Alternatif bir yaklaşım da dahil olmak üzere mavi-yeşil dağıtımlar hakkında daha fazla bilgi için bkz . Mavi-yeşil dağıtım stratejileri.
Üretim dağıtımlarını ayarlama
Aşağıdaki örnek, geçerli hazırlama dağıtımını üretim olarak ayarlar ve hangi dağıtımın üretim trafiğini aldığını etkili bir şekilde değiştirir.
# 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
Hazırlama dağıtımlarını silme
Eylem, Delete Staging Deployment
üretim trafiğini almayan dağıtımı silmenize olanak tanır. Bu silme işlemi, söz konusu dağıtım tarafından kullanılan kaynakları boşaltır ve yeni bir hazırlama dağıtımına yer sağlar:
# 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>
Derleme oluşturma veya güncelleştirme (yalnızca Kurumsal plan)
Aşağıdaki örnek, Kurumsal planda bir derleme kaynağı oluşturur veya güncelleştirir:
# 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>
Derlemeyi silme (yalnızca Kurumsal plan)
Aşağıdaki örnek, Kurumsal plandaki bir derleme kaynağını siler:
# 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>
Maven Eklentisi ile dağıtma
Bir diğer seçenek de Jar'ı dağıtmak ve Uygulama ayarlarını güncelleştirmek için Maven Eklentisi'ni kullanmaktır. Komutu mvn azure-spring-apps:deploy
bir kez etkili olur ve gerekirse uygulamaları otomatik olarak oluşturur. İlgili uygulamaları önceden oluşturmanız gerekmez.
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
İş akışını çalıştırma
.github/workflow/main.yml GitHub'a gönderildikten sonra GitHub Actions otomatik olarak etkinleştirilmelidir. Eylem, yeni bir işleme gönderdiğinizde tetikleniyor. Bu dosyayı tarayıcıda oluşturursanız eyleminiz zaten çalıştırılmalıdır.
Eylemin etkinleştirildiğini doğrulamak için GitHub deposu sayfasındaki Eylemler sekmesini seçin:
Eyleminiz hatayla çalışıyorsa, örneğin Azure kimlik bilgilerini ayarlamadıysanız, hatayı düzelttikkten sonra denetimleri yeniden çalıştırabilirsiniz. GitHub deposu sayfasında Eylemler'i seçin, belirli iş akışı görevini seçin ve ardından denetimleri yeniden çalıştırmak için Denetimleri yeniden çalıştır düğmesini seçin: