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:

Snímek obrazovky se stránkou tajných kódů a proměnných GitHub Actions se zvýrazněným tlačítkem Nový tajný kód úložiště

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í.

Snímek obrazovky s tajnými kódy GitHub Actions / novou stránkou tajných kódů

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:

Snímek obrazovky se stránkou tajných kódů a proměnných GitHub Actions se zvýrazněným tlačítkem Nový tajný kód úložiště

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í.

Snímek obrazovky s tajnými kódy GitHub Actions / novou stránkou tajných kódů

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:

Snímek obrazovky s kartou GitHub Actions zobrazující oddíl Všechny pracovní postupy

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:

Snímek obrazovky s kartou GitHub Actions se zvýrazněným tlačítkem Znovu spustit kontroly

Další kroky