Запустите команду на CircleCI только один раз для ветви - PullRequest
0 голосов
/ 28 июня 2018

Я сейчас настраиваю свою конфигурацию Circleci, чтобы попытаться развернуть промежуточную сборку для каждой новой ветви, а затем отправляю сообщение моей слабой команде со ссылкой на демонстрационную версию.

Я сделал отправку сообщения в слабую часть, но теперь CircleCI отправляет сообщение, чтобы ослабить каждый раз, когда я нажимаю. Я хотел бы ограничить это случиться только один раз для конкретной отрасли. Я знаю, что есть CIRCLE_BRANCH env, который я могу использовать для идентификации текущей ветви, но как мне сохранить эту переменную в каком-то кеше, чтобы я мог выполнить условную проверку этой переменной, чтобы избежать выполнения одной и той же команды дважды?

Я проверил документы CircleCI, и они предложили кэшировать файлы, но ничего не упомянул о сохранении переменной в качестве кэша.

Мой файл config.yml для CircleCI выглядит так:

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 голосов
/ 02 июля 2018

Очень крутой вопрос. Я поделюсь некоторыми идеями, которые могут сработать.

Итак, URL промежуточного сайта создан на основе имени ветви? Будет ли он всегда генерироваться одинаково?

Если это так, в CircleCI я бы сначала проверил наличие промежуточного URL. Если он есть, он уже создан, что означает, что эта ветка уже опубликована в Slack, и выполнение может закончиться прямо здесь.

Другой идеей было бы touch .staging-created файл в FS и сохранение его в кеше CircleCI с использованием имени ветви ({{ .Branch }}) как части ключа. Затем, перед отправкой сообщения в Slack, проверьте этот файл после восстановления кэша.

...