Megosztás:


Üzembe helyezés az Azure App Service-ben a GitHub Actions használatával

A GitHub Actions használatával automatizálhatja a munkafolyamatot, és üzembe helyezheti az Azure App Service-ben a GitHubról.

Prerequisites

A GitHub Actions üzembe helyezésének beállítása alkalmazás létrehozásakor

A GitHub Actions üzembe helyezése integrálva van az alapértelmezett webalkalmazás-létrehozási folyamatba. Állítsa a folyamatos üzembe helyezéstengedélyezésre az Üzembe helyezés lapon, és konfigurálja a kiválasztott szervezetet, adattárat és ágat.

Képernyőkép a GitHub Actions üzembe helyezésének engedélyezéséről az App Service Üzembe helyezés lapján.

A folyamatos üzembe helyezés engedélyezésekor a Webalkalmazás létrehozása folyamat automatikusan kiválasztja a hitelesítési módszert az alapszintű hitelesítés kiválasztása alapján, és ennek megfelelően konfigurálja az alkalmazást és a GitHub-adattárat:

Alapvető hitelesítés kiválasztása Hitelesítési módszer
Disable Felhasználó által hozzárendelt identitás (OpenID Connect) (ajánlott)
Enable Alapszintű hitelesítés

Note

Amikor létrehoz egy alkalmazást, hibaüzenet jelenhet meg, amely szerint az Azure-fiókja nem rendelkezik bizonyos engedélyekkel. Előfordulhat, hogy a fióknak szüksége van a felhasználó által hozzárendelt identitás létrehozásához és konfigurálásához szükséges engedélyekre. Másik lehetőségként tekintse meg a következő szakaszt.

A GitHub Actions üzembe helyezésének beállítása az Üzembe helyezési központból

Egy meglévő alkalmazás esetén gyorsan megkezdheti a GitHub Actions használatát az App Service Deployment Center használatával. Ez a kulcsrakész módszer létrehoz egy GitHub Actions-munkafolyamatfájlt az alkalmazás verem alapján, és véglegesíti azt a GitHub-adattárban.

Az Üzembe helyezési központ használatával egyszerűen konfigurálhatja a biztonságosabb OpenID Connect-hitelesítést egy felhasználó által hozzárendelt identitással. További információt a felhasználó által hozzárendelt identitásbeállításban talál.

Ha az Azure-fiókja rendelkezik a szükséges engedélyekkel, létrehozhat egy felhasználó által hozzárendelt identitást. Ellenkező esetben kiválaszthat egy meglévő felhasználó által hozzárendelt felügyelt identitást az Identitás legördülő menüben. Az Azure-rendszergazdával együttműködve létrehozhat egy felhasználó által hozzárendelt felügyelt identitást a webhely közreműködői szerepkörével.

További információ: Folyamatos üzembe helyezés Azure-alkalmazás szolgáltatásban.

GitHub Actions-munkafolyamat manuális beállítása

A munkafolyamatot az Üzembe helyezési központ használata nélkül is üzembe helyezheti. Hajtsa végre az alábbi három lépést:

  1. Üzembehelyezési hitelesítő adatok létrehozása.
  2. Konfigurálja a GitHub titkos kulcsát.
  3. Adja hozzá a munkafolyamat-fájlt a GitHub-adattárhoz.

Üzembehelyezési hitelesítő adatok létrehozása

Javasoljuk, hogy az OpenID Connect használatával hitelesítse magát az Azure App Service for GitHub Actions szolgáltatással. Ez a hitelesítési módszer rövid élettartamú tokeneket használ. Az OpenID Connect és a GitHub Actions beállítása összetettebb, de fokozott biztonságot nyújt.

Hitelesítést felhasználó által hozzárendelt felügyelt identitással, szolgáltatásnévvel vagy közzétételi profillal is végezhet.

Az alábbi eljárás ismerteti a Microsoft Entra-alkalmazás, a szolgáltatásnév és az összevont hitelesítő adatok Azure CLI-utasítások használatával történő létrehozásának lépéseit. Ha tudni szeretné, hogyan hozhat létre Microsoft Entra-alkalmazást, szolgáltatásnevet és összevont hitelesítő adatokat az Azure Portalon, olvassa el a GitHub és az Azure összekapcsolása című témakört.

  1. Ha nem rendelkezik meglévő alkalmazással, regisztráljon egy új Microsoft Entra-alkalmazást és szolgáltatásnevet, amely hozzáfér az erőforrásokhoz. Hozza létre a Microsoft Entra alkalmazást.

    az ad app create --display-name myApp
    

    Ez a parancs egy olyan JSON-kimenetet ad vissza, amely appId az Öné client-id. Mentse később GitHub-titkos kódként AZURE_CLIENT_ID használni kívánt értéket.

    Ezt az objectId értéket akkor használja, ha összevont hitelesítő adatokat hoz létre a Graph API-val, és erre hivatkozik APPLICATION-OBJECT-ID néven.

  2. Hozzon létre egy szolgáltatásnevet. Cserélje le a $appID-t az appId-re a JSON-kimenetből.

    Ez a parancs létrehoz egy JSON-kimenetet egy másik objectId-vel, amelyet a következő lépésben lehet használni. Az új objectId a assignee-object-id.

    Másolja le a appOwnerTenantId GitHub titkos kulcsként későbbi felhasználásra a AZURE_TENANT_ID-hez.

    az ad sp create --id $appId
    
  3. Hozzon létre egy új szerepkör-hozzárendelést előfizetés és objektum szerint. Alapértelmezés szerint a szerepkör-hozzárendelés az alapértelmezett előfizetéshez van kötve. Cserélje le $subscriptionId az előfizetés azonosítójára, $resourceGroupName az erőforráscsoport nevére, $webappName a webalkalmazás nevére, és $assigneeObjectId a létrehozott id-ra. Megtudhatja, hogyan kezelheti az Azure-előfizetéseket az Azure CLI-vel.

    az role assignment create --role "Website Contributor" --subscription $subscriptionId --assignee-object-id  $assigneeObjectId --scope /subscriptions/$subscriptionId/resourceGroups/$resourceGroupName/providers/Microsoft.Web/sites/$webappName --assignee-principal-type ServicePrincipal
    
  4. Futtassa a következő parancsot egy új összevont identitás hitelesítő adatainak létrehozásához a Microsoft Entra-alkalmazáshoz.

    • Cserélje le APPLICATION-OBJECT-ID az appId Active Directory-alkalmazás alkalmazás létrehozása során létrehozottra.

    • Adjon meg egy értéket a CREDENTIAL-NAME későbbi hivatkozáshoz.

    • Állítsa be a subject. A GitHub a munkafolyamattól függően határozza meg az értékét:

      • A GitHub Actions-környezetben lévő feladatokhoz használja a következőket: repo:< Organization/Repository >:environment:< Name >
      • A környezethez nem kapcsolódó feladatok esetében adja hozzá az ág/címke referenciaútvonalát a munkafolyamat aktiválásához használt referenciaútvonal alapján: repo:< Organization/Repository >:ref:< ref path>. Például, repo:n-username/ node_express:ref:refs/heads/my-branch vagy repo:n-username/ node_express:ref:refs/tags/my-tag.
      • A lekéréses kérelem eseménye által aktivált munkafolyamatok esetében használja a következőt: repo:< Organization/Repository >:pull_request.
    az ad app federated-credential create --id <APPLICATION-OBJECT-ID> --parameters credential.json
    ("credential.json" contains the following content)
    {
        "name": "<CREDENTIAL-NAME>",
        "issuer": "https://token.actions.githubusercontent.com",
        "subject": "repo:organization/repository:ref:refs/heads/main",
        "description": "Testing",
        "audiences": [
            "api://AzureADTokenExchange"
        ]
    }     
    

A GitHub titkos kódjának konfigurálása

Meg kell adnia az alkalmazás ügyfél-azonosítóját, bérlőazonosítóját és előfizetés-azonosítóját a Azure/login művelethez. Ezek az értékek közvetlenül a munkafolyamatban is megadhatók, vagy a GitHub titkokban tárolhatók, és a munkafolyamatban hivatkozhatók. Az értékek GitHub-titkos kulcsként való mentése a biztonságosabb megoldás.

  1. Nyissa meg a GitHub-adattárat, és lépjen a Beállítások>biztonsági>titkos kulcsok és változók> MűveletekÚj tárház titkos> elemre.

  2. Titkos kulcsok létrehozása a következőhöz AZURE_CLIENT_ID: , AZURE_TENANT_IDés AZURE_SUBSCRIPTION_ID. Használja ezeket az értékeket az Active Directory-alkalmazásból a GitHub-titkos kulcsokhoz:

    GitHub-titkos kód Active Directory-alkalmazás
    AZURE_CLIENT_ID Alkalmazás (ügyfél) azonosítója
    AZURE_TENANT_ID Címtár (ügyfél) azonosítója
    AZURE_SUBSCRIPTION_ID Előfizetés azonosító
  3. Válassza a Titkos kód hozzáadása lehetőséget az egyes titkos kódok mentéséhez.

Munkafolyamat-fájl hozzáadása a GitHub-adattárhoz

A GitHub-adattár elérési /.github/workflows/ útjának egyik YAML-fájlja (.yml) definiál egy munkafolyamatot. Ez a definíció a munkafolyamatot alkotó különböző lépéseket és paramétereket tartalmazza.

A munkafolyamat-fájl legalább a következő különböző lépésekkel rendelkezik:

  1. Hitelesítés az App Service-ben a létrehozott GitHub-titkos kóddal.
  2. A webalkalmazás létrehozása.
  3. A webalkalmazás üzembe helyezése.

A kód App Service-alkalmazásokban való üzembe helyezéséhez használja a azure/webapps-deploy@v3 műveletet. A művelethez meg kell adni a webalkalmazás nevét a app-name helyen, és a nyelvi veremtől függően meg kell adni egy *.zip, *.war, *.jar, vagy mappa elérési útját, amelyet a package helyen kell üzembe helyezni. A azure/webapps-deploy@v3 művelet lehetséges bemeneteinek teljes listáját lásd a action.yml fájlban.

Az alábbi példák a webalkalmazást összeállító munkafolyamat különböző támogatott nyelveken történő részét mutatják be.

Ha az OpenID Connect használatával szeretné üzembe helyezni a konfigurált felügyelt identitást, használja a azure/login@v2 műveletet a client-id, tenant-idés subscription-id a kulcsokkal. Hivatkozzon a korábban létrehozott GitHub-titkos kódokra.

name: .NET Core

on: [push]

permissions:
      id-token: write
      contents: read

env:
  AZURE_WEBAPP_NAME: my-app    # Set this to your application's name
  AZURE_WEBAPP_PACKAGE_PATH: '.'      # Set this to the path to your web app project, defaults to the repository root
  DOTNET_VERSION: '6.0.x'           # Set this to the dot net version to use

jobs:
  build:
    runs-on: ubuntu-latest

    steps:
      # Check out the repo
      - uses: actions/checkout@main
      - uses: azure/login@v2
        with:
          client-id: ${{ secrets.AZURE_CLIENT_ID }}
          tenant-id: ${{ secrets.AZURE_TENANT_ID }}
          subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}

      
      # Setup .NET Core SDK
      - name: Setup .NET Core
        uses: actions/setup-dotnet@v3
        with:
          dotnet-version: ${{ env.DOTNET_VERSION }} 
      
      # Run dotnet build and publish
      - name: dotnet build and publish
        run: |
          dotnet restore
          dotnet build --configuration Release
          dotnet publish -c Release --property:PublishDir='${{ env.AZURE_WEBAPP_PACKAGE_PATH }}/myapp' 
          
      # Deploy to Azure Web apps
      - name: 'Run Azure webapp deploy action using publish profile credentials'
        uses: azure/webapps-deploy@v3
        with: 
          app-name: ${{ env.AZURE_WEBAPP_NAME }} # Replace with your app name
          package: '${{ env.AZURE_WEBAPP_PACKAGE_PATH }}/myapp'
      
      - name: logout
        run: |
          az logout

Gyakori kérdések

Hogyan helyezhetek üzembe WAR-fájlt a Maven beépülő modulon keresztül?

Ha a Java Tomcat-projektet a Maven beépülő modullal konfigurálta, ezen a beépülő modulon keresztül is üzembe helyezheti az Azure App Service-ben. Ha az Azure CLI GitHub-műveletet használja, az az Azure-beli hitelesítő adatait használja.

    - name: Azure CLI script file
      uses: azure/cli@v2
      with:
        inlineScript: |
          mvn package azure-webapp:deploy

A Maven beépülő modul használatáról és konfigurálásáról további információt az Azure App Service-hez készült Maven beépülő modul wikijében talál.

Hogyan helyezhetek üzembe WAR-fájlokat az Azure CLI-vel?

Ha inkább az Azure CLI-t szeretné használni az App Service-ben való üzembe helyezéshez, használhatja az Azure CLI-hez készült GitHub-műveletet.

- name: Azure CLI script
  uses: azure/cli@v2
  with:
    inlineScript: |
      az webapp deploy --src-path '${{ github.workspace }}/target/yourpackage.war' --name ${{ env.AZURE_WEBAPP_NAME }} --resource-group ${{ env.RESOURCE_GROUP }}  --async true --type war

Az Azure CLI GitHub-műveletének használatáról és konfigurálásáról további információt az Azure CLI GitHub-műveletében talál.

A paranccsal kapcsolatos további információkért, beleértve annak az webapp deploy használatát és a paraméter részleteit, tekintse meg a dokumentációtaz webapp deploy.

Hogyan helyezhetek üzembe indítási fájlt?

Használja a GitHub-műveletet az Azure CLI-hez. Például:

- name: Deploy startup script
  uses: azure/cli@v2
  with:
    inlineScript: |
      az webapp deploy --src-path ${{ github.workspace }}/src/main/azure/createPasswordlessDataSource.sh --name ${{ env.AZURE_WEBAPP_NAME }} --resource-group ${{ env.RESOURCE_GROUP }} --type startup --track-status false

Hogyan telepíthetek egy konténerbe?

Az Azure Web Deploy művelettel automatizálhatja a munkafolyamatot, hogy egyéni tárolókat helyezzen üzembe az App Service-ben a GitHub Actions használatával. További információ: Üzembe helyezés tárolóban.

Hogyan helyezhetek üzembe egy üzembehelyezési slotra?

A művelet paraméterével üzembe helyezheti az éles pont helyett egy slot-nameazure/webapps-deploy@v3. Ha egy helyre szeretne telepíteni, adja hozzá a slot-name paramétert a munkafolyamat ütemlésekor a telepítési lépéshez.

- name: Deploy to Azure Web App
  uses: azure/webapps-deploy@v3
  with:
    app-name: 'my-app-name'
    slot-name: 'staging'  # Deploy to the 'staging' slot instead of production
    package: './output'

Note

OpenID Connect vagy szolgáltatás főhitelesítés használata esetén győződjön meg arról, hogy az identitás rendelkezik a webhely-hozzájáruló szerepkörével mind az alkalmazáson, mind a telepítési példányon. A közzétételi profil hitelesítéséhez töltse le az adott ponthoz tartozó közzétételi profilt az Azure Portalról (az üzembehelyezési>pontok> közül válassza ki a > pontot).

Hogyan frissíthetem a Tomcat-konfigurációt az üzembe helyezés után?

Ha az üzembe helyezés után bármelyik webalkalmazás-beállítást frissíteni szeretné, használhatja az App Service beállítási műveletét.

    - uses: azure/appservice-settings@v1
      with:
        app-name: 'my-app'
        slot-name: 'staging'  # Optional and needed only if the settings have to be configured on the specific deployment slot
        app-settings-json: '[{ "name": "CATALINA_OPTS", "value": "-Dfoo=bar" }]' 
        connection-strings-json: '${{ secrets.CONNECTION_STRINGS }}'
        general-settings-json: '{"alwaysOn": "false", "webSocketsEnabled": "true"}' #'General configuration settings as Key Value pairs'
      id: settings

A művelet használatáról és konfigurálásáról további információt az App Service beállítási adattárában talál.

Tekintse meg a következő hivatkozásokat az Azure GitHub Actions és munkafolyamatok esetében: