Använda Azure Spring Apps CI/CD med GitHub Actions
Kommentar
Basic-, Standard- och Enterprise-planerna kommer att vara inaktuella från och med mitten av mars 2025, med en 3-årig pensionsperiod. Vi rekommenderar att du övergår till Azure Container Apps. Mer information finns i meddelandet om azure Spring Apps-pensionering.
Standardförbrukningen och den dedikerade planen kommer att vara inaktuell från och med den 30 september 2024, med en fullständig avstängning efter sex månader. Vi rekommenderar att du övergår till Azure Container Apps. Mer information finns i Migrera Azure Spring Apps Standard-förbrukning och dedikerad plan till Azure Container Apps.
Den här artikeln gäller för: ✔️ Basic/Standard ✔️ Enterprise
Den här artikeln visar hur du skapar ett CI/CD-arbetsflöde för Azure Spring Apps med GitHub Actions.
GitHub Actions stöder ett arbetsflöde för automatiserad programvaruutvecklingslivscykel. Med GitHub Actions för Azure Spring Apps kan du skapa arbetsflöden på lagringsplatsen för att skapa, testa, paketera, släppa och distribuera till Azure.
Förutsättningar
Det här exemplet kräver Azure CLI.
Konfigurera GitHub-lagringsplats och autentisera
Du behöver en autentiseringsuppgift för Azure-tjänstens huvudnamn för att auktorisera Azure-inloggningsåtgärden. Kör följande kommandon på den lokala datorn för att hämta en Azure-autentiseringsuppgift:
az login
az ad sp create-for-rbac \
--role contributor \
--scopes /subscriptions/<SUBSCRIPTION_ID> \
--json-auth
Om du vill få åtkomst till en specifik resursgrupp kan du minska omfånget:
az ad sp create-for-rbac \
--role contributor \
--scopes /subscriptions/<SUBSCRIPTION_ID>/resourceGroups/<RESOURCE_GROUP> \
--json-auth
Kommandot ska mata ut ett JSON-objekt:
{
"clientId": "<GUID>",
"clientSecret": "<GUID>",
"subscriptionId": "<GUID>",
"tenantId": "<GUID>",
...
}
I det här exemplet används steeltoe-exemplet på GitHub. Förgrena lagringsplatsen, öppna GitHub-lagringsplatsens sida för förgreningen och välj fliken Inställningar. Öppna menyn Hemligheter och välj Ny hemlighet:
Ange det hemliga namnet till AZURE_CREDENTIALS
och dess värde till den JSON-sträng som du hittade under rubriken Konfigurera din GitHub-lagringsplats och autentisera.
Du kan också hämta autentiseringsuppgifterna för Azure-inloggning från Key Vault i GitHub Actions enligt beskrivningen i Autentisera Azure Spring med Key Vault i GitHub Actions.
Etablera tjänstinstans
Om du vill etablera din Azure Spring Apps-tjänstinstans kör du följande kommandon med hjälp av Azure CLI.
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
Skapa arbetsflödet
Arbetsflödet definieras med hjälp av följande alternativ.
Förbereda för distribution med Azure CLI
Kommandot az spring app create
är för närvarande inte idempotent. När du har kört den en gång får du ett felmeddelande om du kör samma kommando igen. Vi rekommenderar det här arbetsflödet för befintliga Azure Spring Apps-appar och -instanser.
Använd följande Azure CLI-kommandon för förberedelse:
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
Distribuera med Azure CLI direkt
Skapa .github/workflows/main.yml-filen på lagringsplatsen med följande innehåll. Ersätt <resursgruppens namn> och <tjänstnamn> med rätt värden.
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 }}
Konfigurera GitHub-lagringsplats och autentisera
Du behöver en autentiseringsuppgift för Azure-tjänstens huvudnamn för att auktorisera Azure-inloggningsåtgärden. Kör följande kommandon på den lokala datorn för att hämta en Azure-autentiseringsuppgift:
az login
az ad sp create-for-rbac \
--role contributor \
--scopes /subscriptions/<SUBSCRIPTION_ID> \
--json-auth
Om du vill få åtkomst till en specifik resursgrupp kan du minska omfånget:
az ad sp create-for-rbac \
--role contributor \
--scopes /subscriptions/<SUBSCRIPTION_ID>/resourceGroups/<RESOURCE_GROUP> \
--json-auth
Kommandot ska mata ut ett JSON-objekt:
{
"clientId": "<GUID>",
"clientSecret": "<GUID>",
"subscriptionId": "<GUID>",
"tenantId": "<GUID>",
...
}
I det här exemplet används PiggyMetrics-exemplet på GitHub. Förgrena exemplet, avmarkera Kopiera endast Azure-grenen, öppna sidan GitHub-lagringsplats och välj fliken Inställningar. Öppna menyn Hemligheter och välj Lägg till en ny hemlighet:
Ange det hemliga namnet till AZURE_CREDENTIALS
och dess värde till den JSON-sträng som du hittade under rubriken Konfigurera din GitHub-lagringsplats och autentisera.
Du kan också hämta autentiseringsuppgifterna för Azure-inloggning från Key Vault i GitHub Actions enligt beskrivningen i Autentisera Azure Spring med Key Vault i GitHub Actions.
Etablera tjänstinstans
Om du vill etablera din Azure Spring Apps-tjänstinstans kör du följande kommandon med hjälp av Azure CLI.
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
Exempelarbetsflöden från slutpunkt till slutpunkt
I följande exempel visas vanliga användningsscenarier.
Distribuera
I följande avsnitt visas olika alternativ för att distribuera din app.
Till produktion
Azure Spring Apps stöder distribution till distributioner med byggda artefakter (till exempel JAR eller .NET Core ZIP) eller källkodsarkiv.
I följande exempel distribueras till standardproduktionsdistributionen i Azure Spring Apps med hjälp av JAR-filen som skapats av Maven. Det här exemplet är det enda möjliga distributionsscenariot när du använder Basic SKU:
Kommentar
Mönstret för paketsökning bör bara returnera exakt ett paket. Om byggaktiviteten genererar flera JAR-paket, till exempel sources.jar och javadoc.jar, måste du förfina sökmönstret så att det endast matchar programmets binära artefakt.
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
I följande exempel distribueras till standardproduktionsdistributionen i Azure Spring Apps med källkod.
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 }}
I följande exempel distribueras till standardproduktionsdistributionen i Azure Spring Apps med källkod i Enterprise-planen. Du kan ange vilken byggare som ska användas för att distribuera åtgärder med hjälp av builder
alternativet .
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>
I följande exempel distribueras till standardproduktionsdistributionen i Azure Spring Apps med en befintlig containeravbildning.
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>
Under distributionen kan du få fler funktioner med hjälp av fler argument. Mer information finns i avsnittet Argument i GitHub Action för distribution till Azure Spring Apps.
Blågrön
Följande exempel distribueras till en befintlig mellanlagringsdistribution. Den här distributionen tar inte emot produktionstrafik förrän den har angetts som en produktionsdistribution. Du kan ange use-staging-deployment true för att hitta mellanlagringsdistributionen automatiskt eller bara allokera ett specifikt distributionsnamn. Vi fokuserar bara på spring-apps-deploy
åtgärden och utelämnar de förberedande jobben i resten av artikeln.
# 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
Mer information om blågröna distributioner, inklusive en alternativ metod, finns i Blågröna distributionsstrategier.
Ställa in produktionsdistribution
I följande exempel anges den aktuella mellanlagringsdistributionen som produktion, vilket effektivt växlar vilken distribution som tar emot produktionstrafik.
# 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
Ta bort en mellanlagringsdistribution
Med Delete Staging Deployment
åtgärden kan du ta bort distributionen som inte tar emot produktionstrafik. Den här borttagningen frigör resurser som används av distributionen och ger utrymme för en ny mellanlagringsdistribution:
# 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>
Skapa eller uppdatera bygge (endast Enterprise-plan)
I följande exempel skapas eller uppdateras en byggresurs i Enterprise-planen:
# 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>
Ta bort version (endast Enterprise-plan)
I följande exempel tas en byggresurs bort i Enterprise-planen:
# 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>
Distribuera med Maven-plugin-programmet
Ett annat alternativ är att använda Maven-plugin-programmet för att distribuera jar-programmet och uppdatera appinställningarna. Kommandot mvn azure-spring-apps:deploy
är idempotent och skapar automatiskt Appar om det behövs. Du behöver inte skapa motsvarande appar i förväg.
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
Kör arbetsflödet
GitHub Actions ska aktiveras automatiskt när du har push-överfört .github/workflow/main.yml till GitHub. Åtgärden utlöses när du skickar en ny incheckning. Om du skapar den här filen i webbläsaren bör åtgärden redan ha körts.
Kontrollera att åtgärden har aktiverats genom att välja fliken Åtgärder på GitHub-lagringsplatsens sida:
Om åtgärden till exempel körs i fel, om du inte har angett Azure-autentiseringsuppgifterna, kan du köra kontroller igen när du har åtgärdat felet. På sidan GitHub-lagringsplats väljer du Åtgärder, väljer den specifika arbetsflödesuppgiften och väljer sedan knappen Kör kontroller igen för att köra kontroller igen: