TGViewer
Сочный DevOps Сочный DevOps @andtree_sec · 420 subscribers
Post #154 143
Версионирование CI шаблонов

У нас репозиторий, где хранится вся CI/CD логика. Как правило так у всех. Репу можно версионировать с помощью bump2version. Для его работы нужен файл VERSION в корне проекта с изначальной версий CI
1.0.0


И конфигурационный файл .bumpversion.cfg:
[bumpversion]
current_version = 1.0.0
commit = True
tag = False

[bumpversion:file:VERSION]


В эти два файла bump2version будет комитить сам, если pipeline запускается из default branch и увеличивать патч версию на один. Во всех остальных случаях, мы просто читаем текущий VERSION, без обновления патч версии и добавляем ему postfix CI_COMMIT_SHORT_SHA, создавая только git tag.

Основной .gitlab-ci.yml:
include:
- { local: "gitlab/default.yml" }
- { local: "gitlab/utils.yml"}

stages:
- bump_and_tag

bump_version_and_tag:
stage: bump_and_tag
before_script:
- !reference [".ci_bump_version", "before_script"]
script:
- !reference [".ci_bump_version", "script"]
rules:
- if: '$CI_COMMIT_REF_NAME == $CI_DEFAULT_BRANCH'
when: always
- if: '$CI_MERGE_REQUEST_IID && $CI_COMMIT_REF_NAME != $CI_DEFAULT_BRANCH'
when: always
- if: '$CI_COMMIT_REF_NAME != $CI_DEFAULT_BRANCH && $CI_OPEN_MERGE_REQUESTS'
when: never
- if: '$CI_COMMIT_REF_NAME != $CI_DEFAULT_BRANCH'
when: always
- when: never


Подключаемый utils.yml
.ci_bump_version:
before_script:
- pip install bump2version
- git config --global --add safe.directory '*'
- git config --global user.email "${GITLAB_USER_EMAIL}"
- git config --global user.name "${GITLAB_USER_NAME}"
- git remote set-url origin https://tag_token:${TAG_TOKEN}@${CI_SERVER_HOST}/${CI_PROJECT_PATH}.git
- git fetch
- git checkout $CI_COMMIT_REF_NAME
- git reset --hard "origin/$CI_COMMIT_REF_NAME"
script:
- |
if [[ "$CI_COMMIT_REF_NAME" == "$CI_DEFAULT_BRANCH" ]];then
bump2version patch
VERSION=$(cat VERSION)
TAG="v$VERSION"
else
VERSION=$(cat VERSION)
TAG="v$VERSION-$CI_COMMIT_SHORT_SHA"
fi;
echo "Generated tag: $TAG"
git tag -f -a "$TAG" -m "Version $TAG. Created by $GITLAB_USER_NAME"
git push origin "${TAG}" -o ci.skip
if [[ "$CI_COMMIT_REF_NAME" == "$CI_DEFAULT_BRANCH" ]];then
git push origin HEAD:$CI_COMMIT_REF_NAME -o ci.skip
fi;


Для работы нужно создать ACCESS_TOKEN с правами на api и пуш. Также добавить переменную, например в CI/CD variables с именем TAG_TOKEN.

#gitlab
  • 🔥 1
More from @andtree_sec
  1. Sep 7, 2026Давненько не было сообщений. Скорее всего в будущем они уйдут в telegraf, который я еще не…
  2. Jul 6, 2026Последнее время на работе часто приходится работать с apache flink и даже что-то писать на…
  3. Jun 4, 2026Немножко про молекула тесты... У нас принято использовать в переменных lookup плагин для д…
  4. May 20, 2026Очередной небольшой проект. Веб-приложение, которое агрегирует через стандартный механиз g…
  5. May 15, 2026Включаем профилирование в ansible Профилирование, это вывод даты, времени запуска и итогов…
  6. Apr 17, 2026Так выглядит общий dashbord работы с инцидентами.
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →