
Привет, Хабр!
На проекте была одна довольно типичная и, мягко говоря, надоедливая проблема: разработчики вручную заполняли CHANGELOG при выкатке новой версии приложения. Иногда информация туда попадала точная и соответствующая реальным изменениям, иногда – частично верная, а иногда и вовсе напрочь забытая.
Решение нашлось довольно элегантное – интегрировать инструмент semantic-release в наш пайплайн CI/CD. Но оказалось, что найти полноценное руководство по его настройке, особенно с учетом корпоративного GitLab и плагина semantic-release/changelog, не так-то просто. Пришлось собирать информацию буквально по крупицам из различных источников, и вот теперь делеимся с вами проверенной пошаговой инструкцией.
Настройка
1. Установите необходимые пакеты в devDependencies:
"semantic-release": "^24.2.0", "@semantic-release/changelog": "^6.0.3", "@semantic-release/git": "^10.0.1", "@semantic-release/gitlab": "^10.0.1", "@semantic-release/npm": "^12.0.1"
2. Добавляем поле release в package.json:
Все, что написано в формате SCREAM_CASE, замените на свои значения.
"release": { "branches": [ "master" ], "repositoryUrl": "https://gitlab.COMPANY.ru/GROUP/SUBGROUP_1/SUBGROUP_2/PROJECT.git", "plugins": [ "@semantic-release/commit-analyzer", "@semantic-release/release-notes-generator", "@semantic-release/npm", "@semantic-release/changelog", [ "@semantic-release/gitlab", { "gitlabUrl": "https://gitlab.COMPANY.ru" } ], [ "@semantic-release/git", { "assets": [ "CHANGELOG.md", "package.json" ], "message": "YOUR_PROJECT_NAME: ${nextRelease.version} \n\n${nextRelease.notes}" } ] ] }
3. Создайте Access token для проекта
Создайте Access token с названием GL_TOKEN и следующими правами:
Scopes: api, read_api, read_repository, write_repository
Role: Maintainer
4. Добавьте переменные CI/CD в GitLab
В настройках CI/CD Variables проекта GitLab добавьте созданный токен под названием GL_TOKEN, а также обязательно задайте переменные:
GIT_AUTHOR_EMAIL
GIT_AUTHOR_NAME
GIT_COMMITTER_EMAIL
GIT_COMMITTER_NAME
Это важно, так как присутствует проверка на корпоративную почту при выполнении git config user.email.
5. Создайте задачу в .gitlab-ci.yml
create_tag_release:
image: node:20
stage: compile
tags:
- ci
only:
- master
script:
- yarn install
- yarn semantic-release
when: manual
6. Убедитесь, что последний тег начинается с буквы v, например, v3.2.11.
Инструкция по применению
Теперь, при создании коммитов в Merge Request обязательно используйте приставки:
fix: – для исправлений
feat: – для нового функционала
После двоеточия обязательно ставьте пробел!
Примеры:
fix: package.json bump vite
feat: добавлен семантик релиз
Ручной запуск (when: manual) нужен для создания релиза именно тогда, когда это необходимо, а не на каждый merge в master. После запуска задача автоматически создаст тег и релиз, обновит версию в package.json согласно семантической версии и аккуратно дополнит CHANGELOG.md подробным описанием версии.
Пример описания версии:
4.10.0 (2025-04-21) Bug Fixes · добавлен border к datepicker (95b2251) · правки по дизайну на странице dashboard (91e616d) · EML-10987 рефактор страницы рейтинга (ed2b4e5) Features · Добавлено обращение к API по ролям EML-10999 (689bebc)
Запускать задачу стоит, когда не идут другие пайплайны, так как semantic-release может падать с ошибкой в этот момент. Если упал – спокойно перезапустите, когда все остальные пайплайны завершатся.
Опыт использования semantic-release через полгода
Спустя шесть месяцев непрерывного использования команда окончательно сформировала мнение о данной технологии.
Какие сложности возникли?
На подключение и настройку ушло около двух рабочих дней.
Потребовалось еще две-три недели, чтобы вся команда привыкла правильно оформлять сообщения коммитов.
Но это все минусы, которые удалось обнаружить. Теперь перейдём к плюсам!
Преимущества автоматизации semantic-release:
Автоматизированы типовые операции: больше нет необходимости вручную заполнять CHANGELOG. Semantic-release автоматически формирует подробный лог изменений со ссылками на соответствующие коммиты.
Управление деплоем: менеджер видит точный перечень коммитов, входящих в каждый релиз.
Прозрачность и удобство анализа: легче обнаруживать изменения, приведшие к проблемам, даже если ошибка была выявлена спустя несколько релизов.
Повышение прозрачности процессов: четко обозначены даты релизов и авторы коммитов, что облегчает контроль сроков и производительности команды.
И приятный бонус: если у вас Jira интегрирована с GitLab, а в коммите указан номер задачи, то прямо в вашем changelog появится активная ссылка на задачу в Jira, позволяющая детально изучить контекст изменений буквально в один клик.
Подробнее ознакомиться с инструментом semantic-release вы можете на официальном сайте semantic-release.
Автор статьи – AJIb63PT.
