我有一个 Bitbucket 存储库,它使用管道构建我的代码并将 Docker 镜像推送到 Docker Hub。到目前为止,一切都很好。现在我想继续将最新映像部署到 Azure 上的Container App。我的选择似乎是:
我对 2. 的问题是,Atlassian 看起来没有这个支持
这给我留下了一些创建的服装管道,我想用Azure CLI来做到这一点,但我超出了我的深度。
有人对如何自动更新我的容器应用程序有建议吗?
感谢 simen@edgeworks 帮助我找到可行的解决方案:
首先要注意的是:登录私有存储库的 dockerhub 使用“registry.hub.docker.com”而不是“docker.io”。有点难找。
创建服务主体
我们需要做的第一件事是为容器创建一个服务主体。您可以使用门户上提供的 Azure CLI 来执行此操作。
在控制台中,更新并发布以下脚本:
az ad sp create-for-rbac --name [PRINCIPAL_NAME] --scope /subscriptions/[SUBSCRIPTION_ID]/resourceGroups/[RESOURCE_GROUP]/providers/Microsoft.App/containerapps/[CONTAINER_APP_NAME]--role contributor
您将在应用程序的概述页面上找到所有这些信息。回复将为您提供 3 个密钥,您需要将其添加到您的 bitbucket 工作区
使用服务主体设置 Bitbucket
选择右上角的设置
向下滚动到左侧菜单底部,找到工作空间变量。
从 Azure CLI 的输出中添加 AZURE_APP_ID、AZURE_PASSWORD 和 AZURE_TENANT_ID。我还添加了在我的管道中使用的 DockerHub 用户名和密码的秘密。
image: node:18
pipelines:
branches:
'master':
- step:
name: Build and Test code
caches:
- node
script:
- npm install
- npm run lint
- npm run build
- npm run test
- step:
name: Create Docker image
script:
- echo "$HUB_PASSWORD" | docker login --username $HUB_USERNAME --password-stdin
- VERSION=$(npm run version --silent)
- IMAGE=[USERNAME/PROJECT]/[APPLICATION_NAME]:${VERSION}
- echo ${IMAGE}
- docker build . -t ${IMAGE}
- docker push ${IMAGE}
caches:
- node
- step:
name: Deploy to Prod
script:
- VERSION=$(npm run version --silent)
- IMAGE=registry.hub.docker.com/[USERNAME/PROJECT]/[APPLICATION_NAME]:${VERSION}
- pipe: atlassian/azure-cli-run:1.2.0
variables:
AZURE_APP_ID: $AZURE_APP_ID
AZURE_PASSWORD: $AZURE_PASSWORD
AZURE_TENANT_ID: $AZURE_TENANT_ID
AZURE_RESOURCE_GROUP: ['RESOURCE_GROUP']
AZURE_APP_NAME: ['CONTAINER_APP_NAME']
CLI_COMMAND: 'az containerapp update -n [CONTAINER_APP_NAME] -g [RESOURCE_GROUP] --image $IMAGE'
options:
docker: true
在我的管道中,我从 pacakage.json 获取版本并将其设置在 dockerimage 上。
我希望您能发现本文内容丰富,并且对您的项目有所帮助。