Použití CI/CD azure Spring Apps s GitHub Actions
Poznámka:
Plány Basic, Standard a Enterprise budou od poloviny března 2025 vyřazeny ze 3letého období vyřazení. Doporučujeme přejít na Azure Container Apps. Další informace najdete v oznámení o vyřazení Azure Spring Apps.
Od 30. září 2024 bude od 30. září 2024 zastaralý plán s úplným vypnutím po šesti měsících. Doporučujeme přejít na Azure Container Apps. Další informace najdete v tématu Migrace spotřeby Azure Spring Apps Úrovně Standard a vyhrazeného plánu do Azure Container Apps.
Tento článek se vztahuje na: ✔️ Basic/Standard ✔️ Enterprise
V tomto článku se dozvíte, jak vytvořit pracovní postup CI/CD pro Azure Spring Apps pomocí GitHub Actions.
GitHub Actions podporuje pracovní postup automatizovaného životního cyklu vývoje softwaru. Pomocí GitHub Actions pro Azure Spring Apps můžete v úložišti vytvářet pracovní postupy pro sestavování, testování, balení, vydávání a nasazování do Azure.
Požadavky
Tento příklad vyžaduje Azure CLI.
Nastavení úložiště GitHub a ověření
K autorizaci akce přihlášení k Azure potřebujete přihlašovací údaje instančního objektu Azure. Pokud chcete získat přihlašovací údaje Azure, spusťte na místním počítači následující příkazy:
az login
az ad sp create-for-rbac \
--role contributor \
--scopes /subscriptions/<SUBSCRIPTION_ID> \
--json-auth
Pokud chcete získat přístup ke konkrétní skupině prostředků, můžete omezit rozsah:
az ad sp create-for-rbac \
--role contributor \
--scopes /subscriptions/<SUBSCRIPTION_ID>/resourceGroups/<RESOURCE_GROUP> \
--json-auth
Příkaz by měl vypíše objekt JSON:
{
"clientId": "<GUID>",
"clientSecret": "<GUID>",
"subscriptionId": "<GUID>",
"tenantId": "<GUID>",
...
}
Tento příklad používá ukázku steeltoe na GitHubu. Vytvořte fork úložiště, otevřete stránku úložiště GitHubu pro fork a vyberte kartu Nastavení. Otevřete nabídku Tajné kódy a vyberte Nový tajný kód:
Nastavte název tajného kódu na AZURE_CREDENTIALS
řetězec JSON a jeho hodnotu na řetězec JSON, který jste našli pod nadpisem Nastavení úložiště GitHub a ověření.
Přihlašovací údaje Azure můžete získat také ze služby Key Vault v GitHub Actions, jak je vysvětleno v části Ověřování Azure Spring ve službě Key Vault v GitHub Actions.
Zřízení instance služby
Pokud chcete zřídit instanci služby Azure Spring Apps, spusťte pomocí Azure CLI následující příkazy.
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
Sestavení pracovního postupu
Pracovní postup je definován pomocí následujících možností.
Příprava na nasazení pomocí Azure CLI
az spring app create
Příkaz aktuálně není idempotentní. Jakmile ho spustíte jednou, zobrazí se chyba, pokud znovu spustíte stejný příkaz. Tento pracovní postup doporučujeme pro existující aplikace a instance Azure Spring Apps.
K přípravě použijte následující příkazy Azure CLI:
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
Přímé nasazení pomocí Azure CLI
V úložišti vytvořte soubor .github/workflows/main.yml s následujícím obsahem. Nahraďte <název> skupiny prostředků a <název> služby správnými hodnotami.
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 }}
Nastavení úložiště GitHub a ověření
K autorizaci akce přihlášení k Azure potřebujete přihlašovací údaje instančního objektu Azure. Pokud chcete získat přihlašovací údaje Azure, spusťte na místním počítači následující příkazy:
az login
az ad sp create-for-rbac \
--role contributor \
--scopes /subscriptions/<SUBSCRIPTION_ID> \
--json-auth
Pokud chcete získat přístup ke konkrétní skupině prostředků, můžete omezit rozsah:
az ad sp create-for-rbac \
--role contributor \
--scopes /subscriptions/<SUBSCRIPTION_ID>/resourceGroups/<RESOURCE_GROUP> \
--json-auth
Příkaz by měl vypíše objekt JSON:
{
"clientId": "<GUID>",
"clientSecret": "<GUID>",
"subscriptionId": "<GUID>",
"tenantId": "<GUID>",
...
}
Tento příklad používá ukázku PiggyMetrics na GitHubu. Vytvořte fork ukázky, zrušte zaškrtnutí políčka Kopírovat jenom větev Azure, otevřete stránku úložiště GitHub a vyberte kartu Nastavení. Otevřete nabídku Tajné kódy a vyberte Přidat nový tajný kód:
Nastavte název tajného kódu na AZURE_CREDENTIALS
řetězec JSON a jeho hodnotu na řetězec JSON, který jste našli pod nadpisem Nastavení úložiště GitHub a ověření.
Přihlašovací údaje Azure můžete získat také ze služby Key Vault v GitHub Actions, jak je vysvětleno v části Ověřování Azure Spring ve službě Key Vault v GitHub Actions.
Zřízení instance služby
Pokud chcete zřídit instanci služby Azure Spring Apps, spusťte pomocí Azure CLI následující příkazy.
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
Kompletní ukázkové pracovní postupy
Následující příklady ukazují běžné scénáře použití.
Nasazování
Následující části ukazují různé možnosti nasazení aplikace.
Do produkčního prostředí
Azure Spring Apps podporuje nasazení do nasazení s sestavenými artefakty (například JAR nebo .NET Core ZIP) nebo archivem zdrojového kódu.
Následující příklad se nasadí do výchozího produkčního nasazení v Azure Spring Apps pomocí souboru JAR vytvořeného mavenem. Tento příklad je jediným možným scénářem nasazení při použití skladové položky Basic:
Poznámka:
Vzor vyhledávání balíčků by měl vracet pouze jeden balíček. Pokud úloha sestavení vytváří více balíčků JAR, jako jsou sources.jar a javadoc.jar, je potřeba upřesnit vzor hledání tak, aby odpovídal pouze binárnímu artefaktu aplikace.
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
Následující příklad se nasadí do výchozího produkčního nasazení v Azure Spring Apps pomocí zdrojového kódu.
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 }}
Následující příklad se nasadí do výchozího produkčního nasazení v Azure Spring Apps pomocí zdrojového kódu v plánu Enterprise. Pomocí této možnosti můžete určit, který tvůrce se má použít pro akce builder
nasazení.
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>
Následující příklad se nasadí do výchozího produkčního nasazení v Azure Spring Apps s existující imagí kontejneru.
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>
Během nasazování můžete dosáhnout více funkcí pomocí více argumentů. Další informace najdete v části Argumenty akce GitHubu pro nasazení do Azure Spring Apps.
Modrozelený
Následující příklady se nasadí do existujícího přípravného nasazení. Toto nasazení nepřijímá produkční provoz, dokud se nenastaví jako produkční nasazení. Můžete nastavit hodnotu true přípravného nasazení, abyste našli přípravné nasazení automaticky nebo pouze přidělte konkrétní název nasazení. Zaměříme se jenom na spring-apps-deploy
akci a ve zbytku článku vynecháme přípravné úlohy.
# 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
Další informace o nasazeních s modrou zelenou barvou, včetně alternativního přístupu, najdete v tématu Strategie nasazení s modrou zelenou barvou.
Nastavení produkčního nasazení
Následující příklad nastaví aktuální přípravné nasazení jako produkční a efektivně prohodí, které nasazení přijímá produkční provoz.
# 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
Odstranění přípravného nasazení
Akce Delete Staging Deployment
umožňuje odstranit nasazení, které nepřijímají produkční provoz. Toto odstranění uvolní prostředky používané tímto nasazením a vytvoří místo pro nové přípravné nasazení:
# 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>
Vytvoření nebo aktualizace sestavení (jenom plán Enterprise)
Následující příklad vytvoří nebo aktualizuje prostředek sestavení v plánu 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>
Odstranění sestavení (jenom plán Enterprise)
Následující příklad odstraní prostředek sestavení v plánu 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>
Nasazení s využitím modulu plug-in Maven
Další možností je použít modul plug-in Maven pro nasazení souboru Jar a aktualizaci nastavení aplikace. mvn azure-spring-apps:deploy
Příkaz je idempotentní a v případě potřeby automaticky vytvoří aplikace. Nemusíte předem vytvářet odpovídající aplikace.
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
Spuštění pracovního postupu
Akce GitHub Actions by se měly povolit automaticky po nasdílení .githubu, pracovního postupu nebo main.yml do GitHubu. Akce se aktivuje, když nasdílíte nové potvrzení. Pokud tento soubor vytvoříte v prohlížeči, vaše akce by už měla být spuštěná.
Pokud chcete ověřit, že je akce povolená, vyberte kartu Akce na stránce úložiště GitHub:
Pokud se vaše akce spustí omylem, například pokud jste nenastavili přihlašovací údaje Azure, můžete po opravě chyby znovu spustit kontroly. Na stránce úložiště GitHub vyberte Akce, vyberte konkrétní úlohu pracovního postupu a pak vyberte tlačítko Znovu spustit kontroly a spusťte kontroly znovu: