使用 GitHub 動作部署至 Azure 容器應用程式
Azure 容器應用程式可讓您使用 GitHub Actions 將修訂發佈至您的容器應用程式。 當提交被推送到您的 GitHub 存放庫時,會觸發一個工作流程來更新容器登錄中的容器映像。 「Azure 容器應用程式」會根據更新的容器映像來建立新的修訂版。
GitHub Actions 工作流程會透過提交到存放庫中的特定分支來觸發。 建立工作流程時,您可決定哪個分支觸發該工作流程。
本文說明如何建立可完全自定義的工作流程。 若要使用 Azure CLI 產生入門 GitHub Actions 工作流程,請參閱 使用 Azure CLI 產生 GitHub Actions 工作流程。
Azure Container Apps GitHub 動作
若要建置及部署容器應用程式,請將動作新增 azure/container-apps-deploy-action
至 GitHub Actions 工作流程。
此動作支援下列案例:
- 從 Dockerfile 建置並部署至容器應用程式
- 從不含 Dockerfile 的原始程式碼建置,並部署至 Container Apps。 支援的語言包括 .NET、Java、Node.js、PHP 和 Python
- 將現有的容器映射部署至 Container Apps
使用範例
以下是使用動作的一些常見案例。 如需詳細資訊,請參閱 動作的 GitHub Marketplace 頁面。
建置並部署至容器應用程式
下列代碼段示範如何從原始程式碼建置容器映像,並將其部署至 Container Apps。
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
原始程式碼建置容器映射。
將現有的容器映射部署至 Container Apps
下列代碼段示範如何將現有的容器映射部署至 Container Apps。
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 Container Apps 動作必須向 Azure Container Registry 進行驗證,才能推送容器映像。 容器應用程式也需要向 Azure Container Registry 進行驗證,才能提取容器映像。
若要推送映像,動作會自動使用提供給azure/login
動作的認證,向 中指定的acrName
容器登錄進行驗證。
若要提取映像,Azure Container Apps 會使用受控識別(建議)或系統管理員認證向 Azure Container Registry 進行驗證。 若要使用受控識別,您必須 將動作部署的容器應用程式設定為使用受控識別。 若要使用登錄的系統管理員認證進行驗證,請設定動作的 acrUsername
和 acrPassword
輸入。
組態
您可以採取下列步驟來設定 GitHub Actions 工作流程以部署至 Azure Container Apps。
- 為您的應用程式建立 GitHub 存放庫
- 建立已啟用受控識別的容器應用程式
- 將
AcrPull
Azure Container Registry 的角色指派給容器應用程式的受控識別 - 在 GitHub 存放庫中設定秘密
- 建立 GitHub Actions 工作流程
必要條件
需求 | 指示 |
---|---|
Azure 帳戶 | 如果您沒有帳戶,可免費建立帳戶。 您需要 Azure 訂用帳戶的參與者 或 擁有者 許可權才能繼續。 如需詳細資訊,請參閱使用 Azure 入口網站 指派 Azure 角色。 |
GitHub 帳戶 | 免費註冊。 |
Azure CLI | 安裝 Azure CLI。 |
建立 GitHub 存放庫並複製原始程式碼
建立工作流程之前,應用程式的原始程式碼必須位於 GitHub 存放庫中。
使用 Azure CLI 登入 Azure。
az login
接下來,安裝 CLI 的最新 Azure Container Apps 擴充功能。
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 \ --output tsv
請注意命令輸出中受控識別的主體標識碼。
AcrPull
將 Azure Container Registry 的角色指派給容器應用程式的受控識別。az role assignment create \ --assignee <MANAGED_IDENTITY_PRINCIPAL_ID> \ --role AcrPull \ --scope <ACR_RESOURCE_ID>
將 取代為受控識別的主體標識碼,並以
<ACR_RESOURCE_ID>
Azure Container Registry 的資源識別碼取代<MANAGED_IDENTITY_PRINCIPAL_ID>
。將容器應用程式設定為使用受控識別從 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 存放庫中,流覽至 [設定> Secrets Actions]>,然後選取 [新增存放庫密碼]。
輸入
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 名稱。 確認、containerAppName
和appSourcePath
值底下的branches
分支名稱,並resourceGroup
符合存放庫和 Azure 資源的值。認可主要分支的變更。
GitHub Actions 工作流程執行應該會開始建置和部署您的容器應用程式。 若要檢查其進度,請流覽至 [動作]。
若要部署應用程式的新修訂,請將新的認可推送至 main 分支。