你可以使用 GitHub Actions 建立自動化軟體開發工作流程。 你可以使用 Azure Web 部署動作 自動化工作流程,並將自訂容器部署到 Azure App Service。
工作流程是由您存放庫內 /.github/workflows/ 路徑中的 YAML (. yml) 檔案所定義的。 此定義包含工作流程中的各種步驟與參數。
對於 App Service 容器工作流程,該檔案包含三個區塊:
| 區段 | 工作 |
|---|---|
| 驗證 | 1. 擷取服務主體或發行設定檔。 2.建立 GitHub 祕密。 |
| 建置 | 1. 建立環境。 2. 建置容器映像。 |
| 部署 | 1. 部署容器映像。 |
先決條件
- 具有有效訂用帳戶的 Azure 帳戶。 免費建立帳戶。
- GitHub 帳戶。 如果您沒有帳戶,請免費註冊。 您必須在 GitHub 存放庫中擁有程式碼,才能部署至 Azure App Service。
- 適用於容器的工作容器登錄與 Azure App Service 應用程式。 此範例使用 Azure Container Registry。 務必完成完整的 Azure App Service 容器部署。 不同於一般 Web 應用程式,適用於容器的 Web 應用程式沒有預設登陸頁面。 發佈容器以取得工作範例。
- 完成這些任務: 學習如何使用 Docker 建立容器化的 Node.js 應用程式,將容器映像推送到登錄檔,然後部署到 Azure App Service。
產生部署認證
我們建議您使用 OpenID Connect 與 Azure App Services 進行 GitHub Actions 驗證。 您也可以使用服務主體或發行設定檔進行驗證。
要用 Azure 驗證,請將你的發佈設定檔憑證或服務主體存成 GitHub 秘密。 你在工作流程中取得這個秘密。
發行設定檔是應用程式層級認證。 將發行設定檔設定為 GitHub 祕密。
移至 Azure 入口網站中的 App Service。
在 概覽 面板中,選擇 「取得發佈個人資料」。
附註
截至 2020 年 10 月,使用者必須在
WEBSITE_WEBDEPLOY_USE_SCM將 Linux 網頁應用程式true的應用程式設定設定為 要了解如何設定常見的網頁應用程式設定,請前往 Azure 入口網站的「配置 App Service 應用程式」。儲存下載的檔案。 你可以利用檔案內容來建立 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 容器登錄檔作為容器登錄檔。
前往 Azure 入口網站或 Docker 中的容器,並複製使用者名稱與密碼。 您可以在 Azure 入口網站中的 [設定] > [存取金鑰] 下找到用於登錄的 Azure Container Registry 使用者名稱與密碼。
為名為
REGISTRY_USERNAME的登錄使用者名稱定義新的祕密。為名為
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。