如何从Bitbucket自动部署镜像至Azure Container App?
实现Bitbucket到Azure Container App的自动部署
核心方案:通过Bitbucket Pipeline结合Azure CLI完成部署
由于Azure Container App内置的持续部署暂不支持Bitbucket,直接在Bitbucket流水线中添加Azure CLI部署步骤是最可行的方案,以下是具体操作步骤:
1. 准备Azure服务主体凭证
- 在Azure门户或通过Azure CLI创建一个服务主体,并为其分配目标Container App所在资源组的
Contributor权限。 - 记录该服务主体的三个关键信息:
租户ID(Tenant ID)、客户端ID(Client ID)、客户端密钥(Client Secret)。
2. 配置Bitbucket仓库环境变量
进入Bitbucket仓库的Repository settings > Repository variables,添加以下环境变量(所有值均从步骤1获取或自定义):
AZURE_TENANT_IDAZURE_CLIENT_IDAZURE_CLIENT_SECRETAZURE_RESOURCE_GROUP:目标资源组名称AZURE_CONTAINER_APP_NAME:目标Container App名称DOCKER_HUB_USERNAME、DOCKER_HUB_PASSWORD:Docker Hub账号凭证(如果需要在流水线中构建镜像)
3. 编写Bitbucket流水线配置文件
在仓库根目录创建bitbucket-pipelines.yml,包含构建推送镜像(可选)和部署到Azure的步骤:
完整示例(含镜像构建推送)
pipelines: default: # 步骤1:构建并推送Docker镜像到Docker Hub - step: name: Build & Push Docker Image image: docker:latest services: - docker script: # 用提交哈希作为镜像标签,避免latest缓存问题 - IMAGE_TAG=${BITBUCKET_COMMIT} - docker build -t your-dockerhub-username/your-image:$IMAGE_TAG . - echo $DOCKER_HUB_PASSWORD | docker login -u $DOCKER_HUB_USERNAME --password-stdin - docker push your-dockerhub-username/your-image:$IMAGE_TAG # 步骤2:部署更新Azure Container App - step: name: Deploy to Azure Container App image: mcr.microsoft.com/azure-cli:latest script: # 登录Azure - az login --service-principal -u $AZURE_CLIENT_ID -p $AZURE_CLIENT_SECRET --tenant $AZURE_TENANT_ID # 更新Container App的镜像版本 - IMAGE_TAG=${BITBUCKET_COMMIT} - az containerapp update --resource-group $AZURE_RESOURCE_GROUP --name $AZURE_CONTAINER_APP_NAME --image your-dockerhub-username/your-image:$IMAGE_TAG
仅部署步骤(如果镜像已提前推送)
image: mcr.microsoft.com/azure-cli:latest pipelines: default: - step: name: Deploy to Azure Container App script: - az login --service-principal -u $AZURE_CLIENT_ID -p $AZURE_CLIENT_SECRET --tenant $AZURE_TENANT_ID - az containerapp update --resource-group $AZURE_RESOURCE_GROUP --name $AZURE_CONTAINER_APP_NAME --image your-dockerhub-username/your-image:${BITBUCKET_COMMIT}
关键注意事项
- 避免使用
latest标签:用Bitbucket内置的BITBUCKET_COMMIT环境变量作为镜像标签,确保每次部署的镜像与代码提交一一对应,防止缓存导致的部署不一致。 - 权限控制:服务主体仅需分配目标资源组的
Contributor权限,遵循最小权限原则。 - 部署验证:可在部署步骤后添加验证逻辑,例如用
az containerapp show --resource-group $AZURE_RESOURCE_GROUP --name $AZURE_CONTAINER_APP_NAME --query properties.provisioningState检查部署状态,或调用应用的健康检查接口确认服务正常。
内容的提问来源于stack exchange,提问作者R. Gulbrandsen
相关产品推荐
相关产品推荐

