在JSON文件中指定BitBucket提交ID

nsc4cvqm  于 2022-11-19  发布在  其他
关注(0)|答案(1)|浏览(112)

我正在开发一个部署到AWS中的Bitbucket管道。该管道构建一个Docker映像,将其推送到ECR,并最终将其部署到ECS Fargate中。在该管道中,我使用此Bitbucket pipe构建并推送到Docker映像。此管道具有一个属性TAGS,我在其中指定了'${BITBUCKET_COMMIT}',因此每次构建映像并推送到ECR时,映像将使用commit ID作为映像的标记。
当涉及到部署Fargate的步骤时,我遇到了一个拦截器。我使用这个pipe部署到Fargate。这个管道有一个TASK_DEFINITION的属性,需要在每次部署时指定该属性。正在部署的映像有一个不同的标记。task_definition文件是存储库中的一个JSON文件。在该文件中有一个用于映像的JSON对象。以下是包含所讨论对象的文件:

{
  "image": "xxxxxxxxxxxx.dkr.ecr.us-east-2.amazonaws.com/image:latest"
}

我曾尝试将此JSON对象更改为

{
  "image": "xxxxxxxxxxxx.dkr.ecr.us-east-2.amazonaws.com/image:${BITBUCKET_COMMIT}"
}

但这似乎破坏了整个JSON对象。我尝试过看看是否有一种解决方案可以在JSON值中指定变量,但似乎只有函数调用可以在这种上下文中完成。如果有人能给我提供正确的方向来解决这个问题,我将不胜感激。

xuo3flqw

xuo3flqw1#

或者:别这样!
用你的提交ID发布所有图片,这对跟踪很好。
对于部署管道,使用部署环境slug重新标记已经公开的映像,并将其用于任务定义:

definitions:
  yaml-anchors:

    - &deploy-step
        oidc: true
        image: amazon/aws-cli
        services:
          - docker
        caches:
          - docker
        script:
          - docker login your.registry.com
          # Retag images :BITBUCKET_BUILD_NUMBER as :BITBUCKET_DEPLOYMENT_ENVIRONMENT
          - docker pull your.registry.com/image:$BITBUCKET_BUILD_NUMBER
          - docker tag  your.registry.com/image:$BITBUCKET_BUILD_NUMBER your.registry.com/image:$BITBUCKET_DEPLOYMENT_ENVIRONMENT
          - docker push your.registry.com/image:$BITBUCKET_DEPLOYMENT_ENVIRONMENT
          - # update services with the new image

pipelines:
  branches:
    main:
      - step:
          <<: *deploy-step
          name: Deploy to testing
          deployment: test
          trigger: automatic

      - step:
          <<: *deploy-step
          name: Deploy to production
          deployment: production
          trigger: manual

我使用$BITBUCKET_BUILD_NUMBER而不是$BITBUCKET_COMMIT,因为我可能在同一个提交上运行不同的管道,并且还创建了一个更容易被人类理解的序列。
但这里的大想法是用部署弹头重新标记图像。

相关问题