
У нас есть подписчикина местесценарий: разработчики работают в 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