透過 GitHub Actions 部署自訂容器到 App Service。

你可以使用 GitHub Actions 建立自動化軟體開發工作流程。 你可以使用 Azure Web 部署動作 自動化工作流程,並將自訂容器部署到 Azure App Service。

工作流程是由您存放庫內 /.github/workflows/ 路徑中的 YAML (. yml) 檔案所定義的。 此定義包含工作流程中的各種步驟與參數。

對於 App Service 容器工作流程,該檔案包含三個區塊:

區段 工作
驗證 1. 擷取服務主體或發行設定檔。
2.建立 GitHub 祕密。
建置 1. 建立環境。
2. 建置容器映像。
部署 1. 部署容器映像。

先決條件

產生部署認證

我們建議您使用 OpenID Connect 與 Azure App Services 進行 GitHub Actions 驗證。 您也可以使用服務主體或發行設定檔進行驗證。

要用 Azure 驗證,請將你的發佈設定檔憑證或服務主體存成 GitHub 秘密。 你在工作流程中取得這個秘密。

發行設定檔是應用程式層級認證。 將發行設定檔設定為 GitHub 祕密。

  1. 移至 Azure 入口網站中的 App Service。

  2. 在 概覽 面板中,選擇 「取得發佈個人資料」。

    附註

    截至 2020 年 10 月,使用者必須在WEBSITE_WEBDEPLOY_USE_SCM將 Linux 網頁應用程式true的應用程式設定設定為 要了解如何設定常見的網頁應用程式設定,請前往 Azure 入口網站的「配置 App Service 應用程式」。

  3. 儲存下載的檔案。 你可以利用檔案內容來建立 GitHub 祕密。

設定用於驗證的 GitHub 祕密

在 GitHub 中,瀏覽您的存放庫。 選取 [設定]> [安全性]> [祕密和變數]> [動作]> [新存放庫祕密]。

若要使用應用程式層級認證,請將所下載發行設定檔內容貼到祕密的值欄位中。 將祕密命名為 AZURE_WEBAPP_PUBLISH_PROFILE。

當你設定 GitHub 工作流程時,請在部署 Azure Web App 動作中使用秘密 AZURE_WEBAPP_PUBLISH_PROFILE 。 例如:

- uses: azure/webapps-deploy@v2
  with:
    publish-profile: ${{ secrets.AZURE_WEBAPP_PUBLISH_PROFILE }}

設定登錄的 GitHub 祕密

定義要搭配 Docker 登入動作一起使用的祕密。 本文範例使用 Azure 容器登錄檔作為容器登錄檔。

  1. 前往 Azure 入口網站或 Docker 中的容器,並複製使用者名稱與密碼。 您可以在 Azure 入口網站中的 [設定] > [存取金鑰] 下找到用於登錄的 Azure Container Registry 使用者名稱與密碼。

  2. 為名為 REGISTRY_USERNAME 的登錄使用者名稱定義新的祕密。

  3. 為名為 REGISTRY_PASSWORD 的登錄密碼定義新的祕密。

建置容器映像

以下範例展示了建立 Node.js Docker 映像的部分工作流程。 使用 Docker 登入 來登入私人容器登錄檔。 此範例會使用 Azure Container Registry,但相同的動作也適用於其他登錄。

name: Linux Container Node Workflow

on: [push]

jobs:
  build:
    runs-on: ubuntu-latest

    steps:
    - uses: actions/checkout@v2
    - uses: azure/docker-login@v1
      with:
        login-server: mycontainer.azurecr.io
        username: ${{ secrets.REGISTRY_USERNAME }}
        password: ${{ secrets.REGISTRY_PASSWORD }}
    - run: |
        docker build . -t mycontainer.azurecr.io/myapp:${{ github.sha }}
        docker push mycontainer.azurecr.io/myapp:${{ github.sha }}     

你也可以用 Docker 登入 同時登入多個容器登錄檔。 此範例包含兩個新的 GitHub 祕密,用於使用 docker.io 進行驗證。 此範例假設登錄的根層級有 Dockerfile。

name: Linux Container Node Workflow

on: [push]

jobs:
  build:
    runs-on: ubuntu-latest

    steps:
    - uses: actions/checkout@v2
    - uses: azure/docker-login@v1
      with:
        login-server: mycontainer.azurecr.io
        username: ${{ secrets.REGISTRY_USERNAME }}
        password: ${{ secrets.REGISTRY_PASSWORD }}
    - uses: azure/docker-login@v1
      with:
        login-server: index.docker.io
        username: ${{ secrets.DOCKERIO_USERNAME }}
        password: ${{ secrets.DOCKERIO_PASSWORD }}
    - run: |
        docker build . -t mycontainer.azurecr.io/myapp:${{ github.sha }}
        docker push mycontainer.azurecr.io/myapp:${{ github.sha }}     

下列範例會顯示組建 Windows Docker 映像的工作流程的一部分。 使用 Docker 登入 來登入私人容器登錄檔。 此範例會使用 Azure Container Registry,但相同的動作也適用於其他登錄。

name: Windows Container Workflow
on: [push]
jobs:
  build:
    runs-on: windows-latest
    steps:
    - uses: actions/checkout@v2
    - uses: azure/docker-login@v1
      with:
        login-server: mycontainer.azurecr.io
        username: ${{ secrets.REGISTRY_USERNAME }}
        password: ${{ secrets.REGISTRY_PASSWORD }}
    - run: |
        docker build . -t mycontainer.azurecr.io/myapp:${{ github.sha }}
        docker push mycontainer.azurecr.io/myapp:${{ github.sha }}     

你也可以使用 Docker 登入 同時登入多個容器登錄檔。 此範例包含兩個新的 GitHub 祕密,用於使用 docker.io 進行驗證。 此範例假設登錄的根層級有 Dockerfile。

name: Windows Container Workflow
on: [push]
jobs:
  build:
    runs-on: windows-latest
    steps:
    - uses: actions/checkout@v2
    - uses: azure/docker-login@v1
      with:
        login-server: mycontainer.azurecr.io
        username: ${{ secrets.REGISTRY_USERNAME }}
        password: ${{ secrets.REGISTRY_PASSWORD }}
    - uses: azure/docker-login@v1
      with:
        login-server: index.docker.io
        username: ${{ secrets.DOCKERIO_USERNAME }}
        password: ${{ secrets.DOCKERIO_PASSWORD }}
    - run: |
        docker build . -t mycontainer.azurecr.io/myapp:${{ github.sha }}
        docker push mycontainer.azurecr.io/myapp:${{ github.sha }}     

部署至 App Service 容器

若要將映像部署至 App Service 中的自訂容器,請使用 azure/webapps-deploy@v2 動作。 此動作有七個參數:

參數 說明
app-name (必填) App Service 應用程式名稱。
publish-profile (可選)用於網頁應用程式(Windows與Linux)及網頁應用程式容器(Linux)。 不支援多容器情境。 發佈設定檔\*.publishsettings文件內容,其中包含 Web Deploy 機密。
slot-name (選擇性) 輸入生產位置以外的現有位置。
package (可選)僅用於網頁應用程式:導向套件或資料夾的路徑。 \*.zip、、 \*.war、 \*.jar,或一個資料夾來部署。
images (必修)僅用於網頁應用程式容器:指定完全限定的容器影像名稱。 例如,myregistry.azurecr.io/nginx:latest 或 python:3.12.12-alpine/。 對於多容器應用程式,可以提供多個容器影像名稱(多行分隔)。
configuration-file (可選)僅用於網頁應用程式容器:Docker Compose 檔案的路徑。 應該是完整路徑或預設工作目錄的相對路徑。 多容器應用程式的必要項目。
startup-command (可選)輸入啟動指令。 例如:dotnet run 或 dotnet filename.dll。
name: Linux Container Node Workflow

on: [push]

jobs:
  build:
    runs-on: ubuntu-latest

    steps:
    - uses: actions/checkout@v2

    - uses: azure/docker-login@v1
      with:
        login-server: mycontainer.azurecr.io
        username: ${{ secrets.REGISTRY_USERNAME }}
        password: ${{ secrets.REGISTRY_PASSWORD }}

    - run: |
        docker build . -t mycontainer.azurecr.io/myapp:${{ github.sha }}
        docker push mycontainer.azurecr.io/myapp:${{ github.sha }}     

    - uses: azure/webapps-deploy@v2
      with:
        app-name: 'myapp'
        publish-profile: ${{ secrets.AZURE_WEBAPP_PUBLISH_PROFILE }}
        images: 'mycontainer.azurecr.io/myapp:${{ github.sha }}'
name: Windows_Container_Workflow

on: [push]

jobs:
  build:
    runs-on: windows-latest

    steps:
    - uses: actions/checkout@v2

    - uses: azure/docker-login@v1
      with:
        login-server: mycontainer.azurecr.io
        username: ${{ secrets.REGISTRY_USERNAME }}
        password: ${{ secrets.REGISTRY_PASSWORD }}

    - run: |
        docker build . -t mycontainer.azurecr.io/myapp:${{ github.sha }}
        docker push mycontainer.azurecr.io/myapp:${{ github.sha }}     

    - uses: azure/webapps-deploy@v2
      with:
        app-name: 'myapp'
        publish-profile: ${{ secrets.AZURE_WEBAPP_PUBLISH_PROFILE }}
        images: 'mycontainer.azurecr.io/myapp:${{ github.sha }}'

你可以在 GitHub 上找到我們的操作集合,這些集合被分組到不同的存儲庫中。 每個儲存庫都包含文件和範例,幫助你使用 GitHub for CI/CD 並將應用程式部署到 Azure。