事件
使用 GitHub Actions 將自訂容器部署至 App Service
GitHub Actions 可讓您彈性地建置自動化軟體開發工作流程。 搭配 Azure Web 部署動作,您可以使用 GitHub Actions 將工作流程自動化,以將自訂容器部署至 App Service。
工作流程是由您存放庫內 /.github/workflows/
路徑中的 YAML (. yml) 檔案所定義的。 此定義包含工作流程中的各種步驟與參數。
針對 Azure App Service 容器工作流程,檔案有三個區段:
區段 | 工作 |
---|---|
驗證 | 1.擷取服務主體或發行設定檔。 2.建立 GitHub 祕密。 |
建立 | 1.建立環境。 2.建置容器映像。 |
部署 | 1.部署容器映像。 |
- 具有有效訂用帳戶的 Azure 帳戶。 免費建立帳戶
- GitHub 帳戶。 如果您沒有 Microsoft 帳戶,請免費註冊。 您必須在 GitHub 存放庫中擁有程式碼,才能部署至 Azure App Service。
- 適用於容器的工作容器登錄與 Azure App Service 應用程式。 此範例使用 Azure Container Registry。 請務必針對容器完成 Azure App Service 的完整部署。 不同於一般 Web 應用程式,適用於容器的 Web 應用程式沒有預設登陸頁面。 發佈容器以取得工作範例。
使用 GitHub Actions Azure App 服務 進行驗證的建議方式是使用 OpenID Connect。 您也可以使用服務主體或發行配置文件進行驗證。
將您的發行設定檔認證或服務主體儲存為 GitHub 祕密,以搭配 Azure 進行驗證。 您將存取工作流程中的祕密。
發行設定檔是應用程式層級認證。 將發行設定檔設定為 GitHub 祕密。
前往 Azure 入口網站中的 App Service。
在 [概觀] 頁面上,選取 [取得發行設定檔]。
注意
自 2020 年 10 月起,Linux Web 應用程式需要設定
true
為 的應用程式設定WEBSITE_WEBDEPLOY_USE_SCM
,才能下載檔案。 未來將移除此需求。 若要了解如何設定常見的 Web 應用程式設定,請參閱在 Azure 入口網站中設定 App Service 應用程式。儲存下載的檔案。 您將使用檔案的內容來建立 GitHub 祕密。
在 GitHub 中,瀏覽您的存放庫。 選取設定>安全性>秘密與變數>動作>新存放庫密碼。
若要使用應用程式層級認證,請將所下載發行設定檔內容貼到祕密的值欄位中。 將祕密命名為 AZURE_WEBAPP_PUBLISH_PROFILE
。
設定 GitHub 工作流程時,您會在部署 Azure Web 應用程式動作中使用 AZURE_WEBAPP_PUBLISH_PROFILE
。 例如:
- uses: azure/webapps-deploy@v2
with:
publish-profile: ${{ secrets.AZURE_WEBAPP_PUBLISH_PROFILE }}
定義要搭配 Docker 登入動作一起使用的祕密。 本文件中的範例會針對容器登錄使用 Azure Container Registry。
前往 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 中的自訂容器,請使用 azure/webapps-deploy@v2
動作。 此動作有七個參數:
參數 | 說明 |
---|---|
app-name | (必要) App Service 應用程式的名稱 |
publish-profile | (選用) 適用於 Web Apps (Windows 與 Linux) 及 Web App Containers (linux)。 不支援多容器案例。 包含 Web Deploy 祕密的發行設定檔 (*.publishsettings) 檔案內容 |
slot-name | (選擇性) 輸入生產位置以外的現有位置。 |
套件 | (選用) 僅適用於 Web 應用程式:套件或資料夾的路徑。 要部署的 *.zip、*.war、*.jar 或資料夾 |
images | (必要) 僅適用於 Web 應用程式容器:指定完整容器映像名稱。 例如:'myregistry.azurecr.io/nginx:latest' 或 'python:3.7.2-alpine/'。 針對多容器應用程式,可以提供多容器映像名稱 (多行分隔) |
configuration-file | (選用) 僅適用於 Web 應用程式容器: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 來進行 CI/CD,並將您的應用程式部署至 Azure。
其他資源
訓練
模組
使用 GitHub Actions 建置應用程式並將其部署至 Azure - Training
使用 GitHub Actions 和 Microsoft Azure 建立兩個部署工作流程。 了解如何觸發 CD 工作流程和儲存認證。
認證
Microsoft Certified: Azure Developer Associate - Certifications
在 Microsoft Azure 中建置端對端解決方案,以建立 Azure Functions、實作和管理 Web 應用程式、開發使用 Azure 儲存體的解決方案等等。