Az Azure Spring Apps CI/CD használata a GitHub Actions használatával

Feljegyzés

Az Azure Spring Apps az Azure Spring Cloud szolgáltatás új neve. Bár a szolgáltatásnak új neve van, bizonyos helyeken a régi nevet fogja látni egy darabig, miközben az eszközök, például képernyőképek, videók és diagramok frissítésével dolgozunk.

Ez a cikk a következőre vonatkozik: ✔️ Basic/Standard ✔️ Enterprise

Ez a cikk bemutatja, hogyan hozhat létre CI/CD-munkafolyamatot az Azure Spring Appshez a GitHub Actions használatával.

A GitHub Actions egy automatizált szoftverfejlesztési életciklus-munkafolyamatot támogat. Az Azure Spring Appshez készült GitHub Actions segítségével munkafolyamatokat hozhat létre az adattárban az Azure-ban való létrehozáshoz, teszteléshez, csomagoláshoz, kiadáshoz és üzembe helyezéshez.

Előfeltételek

Ehhez a példához az Azure CLI szükséges.

A GitHub-adattár beállítása és hitelesítése

Azure-szolgáltatásnév hitelesítő adataira van szüksége az Azure bejelentkezési művelet engedélyezéséhez. Azure-hitelesítő adatok beszerzéséhez hajtsa végre a következő parancsokat a helyi gépen:

az login
az ad sp create-for-rbac \
    --role contributor \
    --scopes /subscriptions/<SUBSCRIPTION_ID> \
    --json-auth

Egy adott erőforráscsoporthoz való hozzáféréshez csökkentheti a hatókört:

az ad sp create-for-rbac \
    --role contributor \
    --scopes /subscriptions/<SUBSCRIPTION_ID>/resourceGroups/<RESOURCE_GROUP> \
    --json-auth

A parancsnak ki kell kimenete egy JSON-objektumot:

{
    "clientId": "<GUID>",
    "clientSecret": "<GUID>",
    "subscriptionId": "<GUID>",
    "tenantId": "<GUID>",
    ...
}

Ez a példa a GitHub acéltómintáját használja. Az adattár elágazása, az elágazáshoz tartozó GitHub-adattár lap megnyitása, majd a Gépház lap kiválasztása. Nyissa meg a Titkos kódok menüt, és válassza az Új titkos kód lehetőséget:

Screenshot of the GitHub Actions secrets and variables page with the New repository secret button highlighted.

Állítsa be a titkos kód nevét AZURE_CREDENTIALS és értékét a GitHub-adattár beállítása és hitelesítése című címsorban található JSON-sztringre.

Screenshot of the GitHub Actions secrets / New secret page.

Az Azure bejelentkezési hitelesítő adatait a GitHub ActionsBen található Key Vaultból is beszerezheti az Azure Spring hitelesítése a GitHub Actionsben található Key Vault használatával című témakörben leírtak szerint.

Szolgáltatáspéldány kiépítése

Az Azure Spring Apps szolgáltatáspéldány üzembe helyezéséhez futtassa az alábbi parancsokat az Azure CLI használatával.

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

A munkafolyamat létrehozása

A munkafolyamat a következő beállításokkal van definiálva.

Felkészülés az üzembe helyezésre az Azure CLI-vel

A parancs az spring app create jelenleg nem idempotens. Miután egyszer futtatta, hibaüzenet jelenik meg, ha ugyanazt a parancsot futtatja újra. Ezt a munkafolyamatot a meglévő Azure Spring Apps-alkalmazásokban és -példányokban javasoljuk.

Az előkészítéshez használja az alábbi Azure CLI-parancsokat:

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

Üzembe helyezés közvetlenül az Azure CLI-vel

Hozza létre a .github/workflows/main.yml fájlt az adattárban az alábbi tartalommal. Cserélje le <az erőforráscsoport nevét> és <a szolgáltatásnevet> a megfelelő értékekre.

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 }}

A GitHub-adattár beállítása és hitelesítése

Azure-szolgáltatásnév hitelesítő adataira van szüksége az Azure bejelentkezési művelet engedélyezéséhez. Azure-hitelesítő adatok beszerzéséhez hajtsa végre a következő parancsokat a helyi gépen:

az login
az ad sp create-for-rbac \
    --role contributor \
    --scopes /subscriptions/<SUBSCRIPTION_ID> \
    --json-auth

Egy adott erőforráscsoporthoz való hozzáféréshez csökkentheti a hatókört:

az ad sp create-for-rbac \
    --role contributor \
    --scopes /subscriptions/<SUBSCRIPTION_ID>/resourceGroups/<RESOURCE_GROUP> \
    --json-auth

A parancsnak ki kell kimenete egy JSON-objektumot:

{
    "clientId": "<GUID>",
    "clientSecret": "<GUID>",
    "subscriptionId": "<GUID>",
    "tenantId": "<GUID>",
    ...
}

Ez a példa a GitHub PiggyMetrics mintáját használja. Fork the sample, uncheck Copy the Azure branch only, open the GitHub repository page, and select the Gépház tab. Open Secrets menu, and select Add a new secret:

Screenshot of the GitHub Actions secrets and variables page with the New repository secret button highlighted.

Állítsa be a titkos kód nevét AZURE_CREDENTIALS és értékét a GitHub-adattár beállítása és hitelesítése című címsorban található JSON-sztringre.

Screenshot of the GitHub Actions secrets / New secret page.

Az Azure bejelentkezési hitelesítő adatait a GitHub ActionsBen található Key Vaultból is beszerezheti az Azure Spring hitelesítése a GitHub Actionsben található Key Vault használatával című témakörben leírtak szerint.

Szolgáltatáspéldány kiépítése

Az Azure Spring Apps szolgáltatáspéldány üzembe helyezéséhez futtassa az alábbi parancsokat az Azure CLI használatával.

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

Végpontok közötti minta-munkafolyamatok

Az alábbi példák a gyakori használati forgatókönyveket mutatják be.

Üzembe helyezés

Az alábbi szakaszok az alkalmazás üzembe helyezésének különböző lehetőségeit mutatják be.

Éles környezetbe

Az Azure Spring Apps támogatja az üzembe helyezést beépített összetevőkkel (például JAR vagy .NET Core ZIP) vagy forráskódarchívummal.

Az alábbi példa a Maven által létrehozott JAR-fájl használatával települ az Azure Spring Apps alapértelmezett éles üzembe helyezésére. Ez a példa az egyetlen lehetséges üzembehelyezési forgatókönyv az alapszintű termékváltozat használatakor:

Feljegyzés

A csomagkeresési mintának csak egy csomagot kell visszaadnia. Ha a buildelési feladat több JAR-csomagot hoz létre, például sources.jar és javadoc.jar, pontosítania kell a keresési mintát, hogy az csak az alkalmazás bináris összetevőjének feleljen meg.

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

Az alábbi példa forráskód használatával telepítheti az Azure Spring Apps alapértelmezett éles üzembe helyezését.

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 }}

Az alábbi példa az Azure Spring Apps alapértelmezett éles üzembe helyezésére helyezi üzembe a Nagyvállalati csomag forráskódját használva. A beállítással megadhatja, hogy melyik szerkesztőt használja a builder műveletek üzembe helyezéséhez.

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>

Az alábbi példa az Azure Spring Apps alapértelmezett éles üzembe helyezésére helyez üzembe egy meglévő tárolórendszerképet.

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>

Az üzembe helyezés során több funkciót érhet el több argumentum használatával. További információkért tekintse meg a GitHub Action Argumentumok szakaszát az Azure Spring Appsben való üzembe helyezéshez.

Kék-zöld

Az alábbi példák egy meglévő előkészítési üzembe helyezésre telepítendők. Ez az üzembe helyezés csak akkor kapja meg az éles forgalmat, ha éles üzembe helyezésként van beállítva. A use-staging-deployment igaz beállításával automatikusan megtalálhatja az átmeneti üzembe helyezést, vagy egyszerűen lefoglalhat egy adott üzembe helyezési nevet. Csak a spring-apps-deploy cselekvésre összpontosítunk, és a cikk többi részében kihagyjuk az előkészítő feladatokat.

# 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

A kék-zöld üzembe helyezésekkel kapcsolatos további információkért, beleértve az alternatív megközelítést is, tekintse meg a kék-zöld üzembe helyezési stratégiákat.

Éles üzembe helyezés beállítása

Az alábbi példa az aktuális előkészítési üzembe helyezést állítja be éles környezetként, hatékonyan felcserélve, hogy melyik üzemelő példány fogadja az éles forgalmat.

# 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

Átmeneti üzembe helyezés törlése

A Delete Staging Deployment művelet lehetővé teszi az éles forgalmat nem fogadó üzemelő példány törlését. Ez a törlés felszabadítja az üzembe helyezés által használt erőforrásokat, és helyet biztosít az új átmeneti üzembe helyezésnek:

# 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>

Build létrehozása vagy frissítése (csak vállalati csomag esetén)

Az alábbi példa létrehoz vagy frissít egy builderőforrást a Vállalati csomagban:

# 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>

Build törlése (csak vállalati csomag esetén)

Az alábbi példa töröl egy builderőforrást a Vállalati csomagban:

# 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>

Üzembe helyezés a Maven beépülő modullal

Egy másik lehetőség a Maven beépülő modul használata a Jar üzembe helyezéséhez és az alkalmazásbeállítások frissítéséhez. A parancs mvn azure-spring-apps:deploy idempotens, és szükség esetén automatikusan létrehozza az alkalmazásokat. Nem kell előre létrehoznia a megfelelő alkalmazásokat.

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

A munkafolyamat futtatása

A GitHub Actions automatikusan engedélyezve lesz, miután leküldte a .github/workflow/main.yml a GitHubra. A művelet egy új véglegesítés leküldésekor aktiválódik. Ha ezt a fájlt a böngészőben hozza létre, a műveletnek már le kellett volna futnia.

A művelet engedélyezésének ellenőrzéséhez válassza a GitHub-adattár lap Műveletek lapját:

Screenshot of the GitHub Actions tab showing the All workflows section.

Ha a művelet hibásan fut, például ha nem állította be az Azure hitelesítő adatait, a hiba kijavítása után újra futtathatja az ellenőrzéseket. A GitHub-adattár lapján válassza a Műveletek lehetőséget, válassza ki az adott munkafolyamat-feladatot, majd válassza az Újrafuttatás gombot az ellenőrzések újrafuttatásához:

Screenshot of the GitHub Actions tab with the Re-run checks button highlighted.

Következő lépések