【问题标题】:Run a command on CircleCI only once for a branch只为一个分支在 CircleCI 上运行一次命令
【发布时间】:2018-06-27 21:44:24
【问题描述】:

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

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

我查看了 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 的预期行为是只为每个分支名称发送一次松弛消息。

【问题讨论】:

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


    【解决方案1】:

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

    那么,暂存站点 URL 是根据分支名称创建的吗?它总是以相同的方式生成吗?

    如果是这样,在 CircleCI 上,我会首先检查暂存 URL 的存在。如果它在那里,它已经被创建,这意味着这个分支已经发布到 Slack,并且执行可以在那里结束。

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

    【讨论】:

    • 是的,是的,它是用$CIRCLE_BRANCH和$PR_NUMBER生成的,同一个分支的所有demo都在同一个url上。
    • 我已经尝试了第二种方法,我想我已经非常接近了,但是我的 yaml 中有些地方不对,我会用我现在所拥有的来更新这个问题。
    • 您目前遇到的问题是什么?
    猜你喜欢
    • 2021-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-12
    相关资源
    最近更新 更多