使用 GitHub 動作部署至 Azure 容器應用程式
Azure 容器應用程式可讓您使用 GitHub Actions 將修訂發佈至您的容器應用程式。 當提交被推送到您的 GitHub 存放庫時,會觸發一個工作流程來更新容器登錄中的容器映像。 「Azure 容器應用程式」會根據更新的容器映像來建立新的修訂版。
GitHub Actions 工作流程會透過提交到存放庫中的特定分支來觸發。 建立工作流程時,您可決定哪個分支觸發該工作流程。
本文說明如何建立可完全自訂的工作流程。 若要使用 Azure CLI 產生入門 GitHub Actions 工作流程,請參閱使用 Azure CLI 產生 GitHub Actions 工作流程。
Azure 容器應用程式 GitHub 動作
若要建置和部署容器應用程式,請將 azure/container-apps-deploy-action
動作新增至您的 GitHub Actions 作流程。
此動作可支援下列案例:
- 從 Dockerfile 建置並部署至容器應用程式
- 在沒有 Dockerfile 的情況下從原始程式碼建置,並部署至容器應用程式。 支援的語言包括 .NET、JAVA、Node.js、PHP 和 Python
- 將現有的容器映像部署至容器應用程式
使用範例
以下是使用此動作的一些常見案例。 如需詳細資訊,請參閱動作的 GitHub Marketplace 頁面。
建置並部署至容器應用程式
下列程式碼片段說明如何從原始程式碼建置容器映像,並將其部署至容器應用程式。
steps:
- name: Log in to Azure
uses: azure/login@v1
with:
creds: ${{ secrets.AZURE_CREDENTIALS }}
- name: Build and deploy Container App
uses: azure/container-apps-deploy-action@v1
with:
appSourcePath: ${{ github.workspace }}/src
acrName: myregistry
containerAppName: my-container-app
resourceGroup: my-rg
此動作會使用 appSourcePath
中的 Dockerfile 來建置容器映像。 如果找不到 Dockerfile,此動作會嘗試從 appSourcePath
中的原始程式碼建置容器映像。
將現有的容器映像部署至容器應用程式
下列程式碼片段說明如何將現有的容器映像部署至容器應用程式。
steps:
- name: Log in to Azure
uses: azure/login@v1
with:
creds: ${{ secrets.AZURE_CREDENTIALS }}
- name: Build and deploy Container App
uses: azure/container-apps-deploy-action@v1
with:
acrName: myregistry
containerAppName: my-container-app
resourceGroup: my-rg
imageToDeploy: myregistry.azurecr.io/app:${{ github.sha }}
重要
如果您要在個別步驟中建置容器映像,請確定您使用唯一的標籤,例如認可 SHA,而不是 latest
這類穩定標籤。 如需詳細資訊,請參閱映像標籤最佳做法。
向 Azure Container Registry 進行驗證
Azure 容器應用程式動作需要向您的 Azure Container Registry 進行驗證,才能推送容器映像。 容器應用程式也需要向您的 Azure Container Registry 進行驗證,才能提取容器映像。
為了推送映像,此動作會使用 azure/login
動作中所提供的認證,自動向 acrName
中指定的容器登錄進行驗證。
為了提取映像,Azure 容器應用程式會使用受控識別 (建議) 或管理員認證,向 Azure Container Registry 進行驗證。 若要使用受控識別,此動作要部署的容器應用程式必須設定為使用受控識別。 若要使用登錄的管理員認證進行驗證,請設定動作的 acrUsername
和 acrPassword
輸入。
組態
您可以執行下列步驟來設定 GitHub Actions 工作流程,用於部署至 Azure 容器應用程式。
- 為應用程式建立 GitHub 存放庫
- 建立已啟用受控識別的容器應用程式
- 將 Azure Container Registry 的
AcrPull
角色指派給容器應用程式的受控識別 - 在 GitHub 存放庫中設定秘密
- 建立 GitHub Actions 工作流程
必要條件
需求 | 指示 |
---|---|
Azure 帳戶 | 如果您沒有帳戶,可免費建立帳戶。 您需要 Azure 訂用帳戶的「參與者」或「擁有者」權限才能繼續。 如需詳細資料,請參閱使用 Azure 入口網站指派 Azure 角色。 |
GitHub 帳戶 | 免費註冊。 |
Azure CLI | 安裝 Azure CLI。 |
建立 GitHub 存放庫並複製原始程式碼
建立工作流程之前,您應用程式的原始程式碼必須位於 GitHub 存放庫中。
使用 Azure CLI 登入 Azure。
az login
接下來,安裝最新版 CLI 的 Azure 容器應用程式擴充功能。
az extension add --name containerapp --upgrade
如果您沒有自己的 GitHub 存放庫,請從範例建立一個存放庫。
- 瀏覽至下列位置以建立新的存放庫:
- 將您的存放庫命名為
my-container-app
。
將存放庫複製到本機電腦。
git clone https://github.com/<YOUR_GITHUB_ACCOUNT_NAME>/my-container-app.git
建立已啟用受控識別的容器應用程式
在下列步驟中使用 az containerapp up
命令來建立容器應用程式。 此命令會建立 Azure 資源、建置容器映像、將映像儲存在登錄中,以及部署至容器應用程式。
建立應用程式之後,您可以將受控識別新增至您的應用程式,並將身分識別指派給 AcrPull
角色,以允許身分識別從登錄中提取映像。
變更為所複製存放庫的 src 資料夾。
cd my-container-app cd src
使用
az containerapp up
命令建立 Azure 資源並部署容器應用程式。az containerapp up \ --name my-container-app \ --source . \ --ingress external
在命令輸出中,記下 Azure Container Registry 的名稱。
取得容器登錄的完整資源識別碼。
az acr show --name <ACR_NAME> --query id --output tsv
以您的登錄名稱取代
<ACR_NAME>
。啟用容器應用程式的受控識別。
az containerapp identity assign \ --name my-container-app \ --resource-group my-container-app-rg \ --system-assigned
請記下命令輸出中受控識別的主體識別碼。
將 Azure Container Registry 的
AcrPull
角色指派給容器應用程式的受控識別。az role assignment create \ --assignee <MANAGED_IDENTITY_PRINCIPAL_ID> \ --role AcrPull \ --scope <ACR_RESOURCE_ID>
將
<MANAGED_IDENTITY_PRINCIPAL_ID>
取代為受控識別的主體識別碼,以及將<ACR_RESOURCE_ID>
取代為 Azure Container Registry 的資源識別碼。將容器應用程式設定為使用受控識別,從 Azure Container Registry 提取映像。
az containerapp registry set \ --name my-container-app \ --resource-group my-container-app-rg \ --server <ACR_NAME>.azurecr.io \ --identity system
將
<ACR_NAME>
取代為您 Azure Container Registry 的名稱。
在 GitHub 存放庫中設定秘密
GitHub 工作流程需要名為 AZURE_CREDENTIALS
的秘密,才能向 Azure 進行驗證。 秘密包含服務主體的認證,該服務主體具有包含容器應用程式和容器登錄之資源群組上的參與者角色。
建立一個服務主體,該服務主體具有包含容器應用程式和容器登錄之資源群組上的參與者角色。
az ad sp create-for-rbac \ --name my-app-credentials \ --role contributor \ --scopes /subscriptions/<SUBSCRIPTION_ID>/resourceGroups/my-container-app-rg \ --json-auth \ --output json
將
<SUBSCRIPTION_ID>
取代為 Azure 訂用帳戶的識別碼。 如果您的容器登錄位於不同資源群組中,請在--scopes
參數中指定這兩個資源群組。從命令複製 JSON 輸出。
在 GitHub 存放庫中,瀏覽至 [設定] > [秘密] > [動作],然後選取 [新增存放庫秘密]。
名稱輸入
AZURE_CREDENTIALS
,值則貼上 JSON 輸出的內容。選取 [新增祕密]。
建立 GitHub Actions 工作流程
在 GitHub 存放庫中,瀏覽至 [動作],然後選取 [新增工作流程]。
選取 [自行設定工作流程]。
將下列 YAML 貼到編輯器中。
name: Azure Container Apps Deploy on: push: branches: - main jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - name: Log in to Azure uses: azure/login@v1 with: creds: ${{ secrets.AZURE_CREDENTIALS }} - name: Build and deploy Container App uses: azure/container-apps-deploy-action@v1 with: appSourcePath: ${{ github.workspace }}/src acrName: <ACR_NAME> containerAppName: my-container-app resourceGroup: my-container-app-rg
將
<ACR_NAME>
取代為您 Azure Container Registry 的名稱。 確認branches
底下的分支名稱,以及appSourcePath
、containerAppName
和resourceGroup
的值與存放庫和 Azure 資源的值一致。認可對主分支所做的變更。
GitHub Actions 工作流程執行應該會開始建置和部署容器應用程式。 若要查看進度,請瀏覽至 [動作]。
若要部署應用程式的新修訂,請將新的認可推送至主分支。