Найти тему

Шаги для настройки semantic-release с GitLab CI

semantic-release можно легко интегрировать с GitLab CI/CD для автоматического управления версиями и выпусков. Инструмент будет анализировать ваши коммиты, определять тип изменений (мажорный, минорный или патч) и автоматически выпускать новую версию, создавая соответствующий тег в Git и обновляя changelog.

Шаги для настройки semantic-release с GitLab CI

1. Установка semantic-release

В проекте, где используешь GitLab, необходимо сначала установить semantic-release как зависимость для проекта:

npm install --save-dev semantic-release
npm install --save-dev semantic-release

2. Создание .gitlab-ci.yml

Добавь в корневой каталог проекта файл .gitlab-ci.yml, в котором будет определён пайплайн для работы semantic-release. Пример базовой конфигурации:

stages:   - release

release:
  image: node:16
  stage: release
  script:
    - npm ci
    - npx semantic-release
  only:
    - main
stages: - release release: image: node:16 stage: release script: - npm ci - npx semantic-release only: - main

Здесь:

  • image: Используется образ Node.js для выполнения скриптов.
  • stage: Указывается этап пайплайна (здесь он называется release).
  • script: Запускаются команды для установки зависимостей (npm ci) и запуска semantic-release (npx semantic-release).
  • only: Пайплайн будет запускаться только при изменениях в ветке main.

3. Настройка переменных GitLab

Для того чтобы semantic-release мог создавать теги и выполнять изменения в репозитории, ему нужны доступы. Эти доступы можно предоставить через токен.

  1. Перейди в Settings → CI/CD → Variables в GitLab и добавь следующие переменные:GL_TOKEN: Создай Personal Access Token в GitLab с правами на создание тэгов и запись в репозиторий (Settings → Access Tokens). Добавь этот токен в переменные CI/CD как GL_TOKEN.
    GITLAB_TOKEN: Это может быть тот же токен, что и GL_TOKEN. Он нужен для аутентификации при работе с API GitLab.

4. Настройка файла .releaserc

Создай файл .releaserc в корне проекта для конфигурации semantic-release. Пример конфигурации для работы с GitLab:

{   
  "branches": ["main"],
  "plugins": [
    "@semantic-release/commit-analyzer",
    "@semantic-release/release-notes-generator",
    "@semantic-release/changelog",
    "@semantic-release/gitlab",
    "@semantic-release/npm",
    "@semantic-release/git",
    [
      "@semantic-release/gitlab",
      {
        "gitlabUrl": "https://gitlab.com"
      }
    ]
  ]
}
{ "branches": ["main"], "plugins": [ "@semantic-release/commit-analyzer", "@semantic-release/release-notes-generator", "@semantic-release/changelog", "@semantic-release/gitlab", "@semantic-release/npm", "@semantic-release/git", [ "@semantic-release/gitlab", { "gitlabUrl": "https://gitlab.com" } ] ] }

Здесь:

  • branches: Определяет, на каких ветках будет запускаться релиз.
  • plugins: Подключает различные плагины для анализа коммитов, генерации changelog и выпуска новых версий на GitLab.@semantic-release/commit-analyzer: Анализирует коммиты и определяет тип версии (мажорный, минорный, патч).
    @semantic-release/release-notes-generator: Генерирует заметки о релизе.
    @semantic-release/changelog: Обновляет файл CHANGELOG.md.
    @semantic-release/gitlab: Выпускает релиз на GitLab.
    @semantic-release/npm: Если это NPM-пакет, публикует его.
    @semantic-release/git: Коммитит изменения в changelog и версии.

5. Структура коммитов

Для правильной работы semantic-release, тебе нужно придерживаться conventional commits, чтобы коммиты соответствовали определённым шаблонам:

  • feat: — для добавления новой функциональности (минорная версия).
  • fix: — для исправления багов (патч).
  • BREAKING CHANGE: — для обозначения изменений, ломающих обратную совместимость (мажорная версия).

Пример коммитов:

feat: добавил поддержку новой функциональности 
fix: исправил баг с авторизацией
BREAKING CHANGE: изменил API взаимодействия
feat: добавил поддержку новой функциональности fix: исправил баг с авторизацией BREAKING CHANGE: изменил API взаимодействия

6. Запуск CI/CD пайплайна

При каждом пуше в ветку main пайплайн GitLab CI будет автоматически запускать semantic-release, который:

  1. Проанализирует коммиты.
  2. Определит тип версии, который необходимо выпустить (мажорная, минорная или патч).
  3. Обновит файл CHANGELOG.md.
  4. Выпустит новую версию, добавив тег в репозиторий.

7. Дополнительно: Настройка уведомлений

Ты можешь настроить уведомления о новых релизах, например, через Slack или Email, используя вебхуки GitLab.

Заключение

semantic-release с GitLab CI позволяет полностью автоматизировать процесс выпуска новых версий и обновления changelog, что значительно снижает вероятность ошибок и упрощает поддержку версионирования для сервисов.

Ваша поддержка имеет значение!

Если вам интересен контент, который я создаю, и вы хотите видеть больше статей на тему программирования и IT, мне очень важна ваша подписка. Она не только показывает, что мои усилия ценятся, но и мотивирует меня продолжать писать.

Понимание того, что есть люди, заинтересованные в моих материалах, вдохновляет меня делиться новыми идеями и полезными советами. Без вашей поддержки я не вижу смысла продолжать, поэтому подписывайтесь на блог, чтобы оставаться в курсе и поддерживать мой труд!