Bitbucket to Gitlab Webhook для запуска конвейера

Bitbucket to Gitlab Webhook для запуска конвейера

У нас есть подписчикина местесценарий: разработчики работают в Bitbucket над приложениями, операторы работают в Gitlab над вещами "Gitops". Мы хотели бы автоматизировать сборки и развертывание через наш конвейер Gitlab и ищем способы реализации. Часть сборки уже работает. Но мы хотели бы различать ветви — не каждая ветвь должна быть развернута — особенно производство будет развернуто вручную.

Поскольку веб-хук содержит ветку, которую я попытался установить на этапе развертывания:

only:
  - dev

а также

  rules:
    - if: '$TOKEN_BRANCH != $PROD_BRANCH'

Но в обоих случаях конвейер развертывания все равно запускается.

Мне в голову пришли два решения:

Одним из вариантов было бы зеркалирование репозитория Bitbucket с помощью «перехвата после коммита», но, с одной стороны, этот плагин платный, а с другой стороны, для зеркалирования нужен второй плагин, а единственный, который я смог найти, больше не поддерживается.

Вторым вариантом было бы лицензирование Gitlab Ultimate для возможности использования «pull-зеркалирования», которое также можно было бы запустить через Bitbucket webhook.

Поскольку нам не нужно зеркалирование репозитория, и единственным вариантом использования будет возможность использовать конвейер Gitlab в «локальном репозитории», где все вышеперечисленные способы отличить ветку для развертывания должны работать, я бы предпочел найти способ с уже имеющимися ресурсами.

Рад услышать ваши мысли по этому поводу!

РЕДАКТИРОВАТЬ: части трубопровода:

variables:
  PROD_BRANCH: main

before_script:
  - TOKEN_BRANCH=$(cat $TRIGGER_PAYLOAD | jq -r '.changes[0].ref.displayId')

deploy:
  stage: deploy
  tags:
    - openshift
  rules:
    - if: $TOKEN_BRANCH != $PROD_BRANCH
  • echo $TOKEN_BRANCH возвращает «main».
  • в правилах: эта часть конвейера срабатывает только в том случае, если следующее утверждение верно.
  • Поскольку «main == main», а не «!=", этап «deploy» конвейера не должен выполняться. Но это...

несколько вариантов

rules:
  - if: '$TOKEN_BRANCH !~ $PROD_BRANCH'

rules:
  - if: '$TOKEN_BRANCH =~ $PROD_BRANCH'
    when: never

в этих случаях происходит обратное — конвейер никогда не имеет стадии развертывания — он даже не показывает эту стадию в представлении «конвейеры» в Gitlab.

решение1

Нашел работающее решение:

После того, как "правила" не сработали, я теперь использую "цикл if" в скриптовой части этапа развертывания. Таким образом, этап развертывания запускается каждый раз, но логика (= развертывание) выполняется только в том случае, если токен содержит соответствующий этап.

deploy-to-test:
  stage: deploy
  variables:
    PROD: master
  tags:
    - openshift
  script:
    - >
      if [ "$TOKEN_BRANCH" != "$PROD" ]; then
      ---logic---
      else
        echo "skipping ..."
      fi

Связанный контент