将容器应用从 Bitbucket 部署到 Azure

Deploy Container App from Bitbucket to Azure

提问人:R. Gulbrandsen 提问时间:11/14/2023 更新时间:11/17/2023 访问量:83

问:

我有一个 Bitbucket 存储库,它使用管道构建我的代码并将 docker 映像推送到 Docker Hub。目前为止,一切都好。现在,我想继续将最新映像部署到 Azure 上的容器应用。我的选择似乎是:

  1. 在 Azure 中设置持续部署
  2. 在 bitbucket 中创建管道步骤,以使用 Azure CLI 将创建的新映像推送到 Azure

我的问题 1.是它似乎只支持需要的 GitHub。Azure continuous deployment

还有我对 2 的问题。是看起来 Atlassian 不支持这个

Atlassian azure pipes

这给我留下了一些 costum 创建的管道,我应该使用 Azure CLI 来做到这一点,我超出了我的深度。

answer from other question

有没有人对我如何自动更新我的容器应用有建议?

Azure Docker Bitbucket 管道 azure-container-apps

评论


答:

1赞 R. Gulbrandsen 11/16/2023 #1

感谢 simon@edgeworks 帮助我找到可行的解决方案:

首先要注意的是:私有仓库的 dockerhub 登录使用“registry.hub.docker.com”而不是“docker.io”。有点难找。

创建服务主体

我们需要做的第一件事是为容器创建服务主体。可以使用门户中提供的 Azure CLI 执行此操作。enter image description here

在控制台中,更新并发布以下脚本:

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 工作区

使用服务主体设置 BitbucketSetup Bitbucket with Service Principal

选择右上角的设置

enter image description here

向下滚动到左侧菜单底部,找到工作区变量

在 Azure CLI 中添加输出中的 AZURE_APP_IDAZURE_PASSWORDAZURE_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上。

我希望你觉得这能给你带来很多帮助,并能帮助你完成你的项目。