在CircleCI上为分支仅运行一次命令

时间:2018-06-27 21:44:24

标签: continuous-integration yaml geometry continuous-deployment circleci

我现在正在配置Circleci配置,以尝试为每个新分支部署一个暂存版本,然后通过暂存演示的链接向我的懈怠团队发送一条消息。

我已经完成了向松弛部分发送消息的操作,但是现在CircleCI每次按下时都会向松弛部分发送消息。我想限制为特定分支只发生一次。我知道可以使用CIRCLE_BRANCH env来标识当前分支,但是如何将该变量保存在某种缓存中,以便可以对该变量运行条件检查以避免两次运行同一命令?

我检查了CircleCI文档,他们为文件提供了缓存,但是没有提及将变量另存为缓存。

我的CircleCI的config.yml文件如下:

slackMessage:
    docker:
      - image: circleci/node
    working_directory: ~/client
    steps:
      - attach_workspace:
          at: ~/client
      # - run: echo "$CIRCLE_BRANCH" > _branch_check
      # - restore_cache:
      #     keys:
      #       - pr-{{ checksum "_branch_check" }}
      - run:
          command: |
            PR_NUMBER=${CIRCLE_PULL_REQUEST##*/}
            # yolo=pr-`echo -n $CIRCLE_PULL_REQUEST | md5sum`
            # if [ -f "$yolo" ]; then

            # touch $yolo
            curl -X POST <Slack API webhook curl url>
            # fi
      # - save_cache:
      #     key: pr-{{ checksum "_branch_check" }}
      #     paths:
      #       - pr-{{ checksum "_branch_check" }}

被注释的行是保存到缓存部分。有了这些评论,CircleCI将在每次推送时向Slack发送一条消息。没有注释,CircleCI的预期行为是每个分支名称仅发送一次松弛消息。

1 个答案:

答案 0 :(得分:0)

非常酷的问题。我将分享一些可行的想法。

那么,过渡站点URL是否基于分支名称创建?会始终以相同的方式生成吗?

如果是这样,我将在CircleCI上首先检查暂存URL的存在。如果已存在,则说明它已经创建,这意味着该分支已经发布到Slack,执行可以就此结束。

另一个想法是将文件touch .staging-created放入FS,并使用分支名称({{ .Branch }})作为密钥的一部分将其保存到CircleCI缓存中。然后,在将消息发送到Slack之前,请在恢复缓存后检查该文件。