在Github中创建标签时触发CodePipeline

z9ju0rcb  于 2023-10-14  发布在  Git
关注(0)|答案(1)|浏览(116)

我在CodePipeline中使用Github版本1作为源代码(由于组织限制,无法使用版本2)。我需要CodePipeline仅在创建标记时触发,而不是在每次提交时触发。我已经在CodePipeline中设置了使用Webhooks选项的触发器,在Webhooks中,我选择了“让我选择单个事件”,在下面我选中了Branch or tag creationReleases。但是当我创建一个新标签时,CodePipeline不会触发。当我使用Pushes选项时,它工作得很好,并在提交时触发管道。
当我检查Recent Deliveries时,我可以看到发布操作得到了200个响应,但是管道没有触发。
我甚至尝试通过CLI创建webhook,就像在这个堆栈溢出中提到的那样,但它不起作用:Trigger AWS CodePipeline by GitHub release Webhook
有谁可以帮助我配置webhook,以便在创建标记时触发AWS CodePipeline?

vcirk6k6

vcirk6k61#

好消息是,这是可能的!坏消息是,您需要AWS之外的其他工具。里面全是黑客
CodePipeline的github集成似乎只适用于分支-它没有查找标记的方法。
CodePipeline能够监视ECR repo的更改,但它只监视特定的标记(默认为latest)。
我想要的是能够创建一个具有一定前缀的标签(例如。我想部署到的环境的名称),并让它自动登陆到那里。
我在CircleCI上创建了一个git tag工作流(github操作也应该可以工作),并让它为链接到我的环境的ECR repo推送latest标签(例如:分级)。
./.circleci/config.yml

version: 2.1

jobs:
  deploy-staging:
    docker:
      - image: cimg/aws:2023.09
    steps:
      - checkout
      - setup_remote_docker:
          docker_layer_caching: true
          version: 19.03.13
      - run:
          name: build-and-deploy
          command: |
            ./.circleci/push-ecr.sh "staging" "latest"
workflows:
  build-and-deploy:
    jobs:
      - deploy-staging:
          filters:
            branches:
              ignore: /.*/
            tags:
              only: /^staging\/.*$/

./.circleci/push-ecr.sh

#!/bin/bash
ECR_REPO="$1"
TAG="$2"

ECR_URL="$AWS_ACCOUNT_ID.dkr.ecr.$AWS_REGION.amazonaws.com/$ECR_REPO"
ECR_RESOURCE="$ECR_URL:$TAG"

docker build -t $ECR_RESOURCE .
aws ecr get-login-password --region $AWS_REGION | docker login --username AWS --password-stdin $AWS_ACCOUNT_ID.dkr.ecr.$AWS_REGION.amazonaws.com
docker push $ECR_RESOURCE

Codepipeline的Source阶段有两个部分:

  1. ECR回购(触发管道)
  2. github仓库(buildspec.yml文件所在的地方)。
    Codepipeline的Build阶段从两个输入源读取,github存储库被设置为primary源,这就是它如何找到buildspec. yml文件的唯一目的是为部署阶段创建工件。我很想完全跳过构建阶段,但是如果它在s3中找不到工件,那么它甚至不会尝试部署。
version: 0.2

phases:
  build:
    commands:
      - printf '[{"name":"%s","imageUri":"%s"}]' $ECS_CONTAINER_NAME $AWS_ACCOUNT_ID.dkr.ecr.$AWS_REGION.amazonaws.com/$IMAGE_REPO_NAME:$IMAGE_TAG > imagedefinitions.json

artifacts:
  files: imagedefinitions.json

CodePipeline的部署阶段不需要任何额外的考虑
Pipeline

相关问题