共用方式為


透過 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:latestpython:3.12.12-alpine/。 對於多容器應用程式,可以提供多個容器影像名稱(多行分隔)。
configuration-file (可選)僅用於網頁應用程式容器:Docker Compose 檔案的路徑。 應該是完整路徑或預設工作目錄的相對路徑。 多容器應用程式的必要項目。
startup-command (可選)輸入啟動指令。 例如:dotnet rundotnet 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。