Автоматизація релізів та створення changelog
Автоматизація релізів та створення changelog

Автоматизація релізів та створення changelog

Інше 06.04.2025 3 min read

Автоматизація релізів та створення changelog є важливими аспектами DevOps-підходу. Це дозволяє спростити керування версіями, забезпечити прозорість змін та зменшити кількість помилок.

Коли ви розробляєте програмне забезпечення, на яке покладаються користувачі, повідомлення про зміни, які відбулися в кожному новому релізі має важливе значення. Інформуючи користувачів про нові функції та будь-які зміни чи видалення, ви гарантуєте, що вони максимізують переваги програмного забезпечення та уникають неприємних сюрпризів під час оновлень.

За допомогою GitLab Changelog API ви можете автоматизувати створення артефактів випуску, приміток до випуску та повного журналу змін із детальним описом усіх орієнтованих на користувача модифікацій програмного забезпечення. GitLab надає потужні інструменти для цього, зокрема CI/CD, теги, релізи та інтеграцію зі сторонніми сервісами.

У цій статті ми заглибимося в автоматизацію випусків за допомогою GitLab, охоплюючи генерацію артефактів випуску, примітки до випуску та журнал змін із детальним описом усіх орієнтованих на користувача модифікацій програмного забезпечення.

Релізи в GitLab

Спочатку нумо розбиратися, як працюють релізи в GitLab.

У GitLab реліз — це конкретна версія вашого коду, позначена тегом, яка містить відомості про зміни з моменту останнього випуску (і примітки до релізу) та будь-які пов’язані артефакти, створені з цієї версії коду, наприклад, Docker, інсталяційні пакети та документація.

Ви можете створювати та відстежувати релізи в GitLab за допомогою інтерфейсу користувача, використовуючи Release API або визначивши спеціальне завдання випуску в конвеєрі CI. У цій статті ми використаємо конвеєр CI/CD для створення релізів, що дозволяє нам розширити автоматизацію, яку ми використовуємо в наших конвеєрах для тестування, сканування коду і т.д.

Щоб автоматизувати процеси релізів, нам потрібно відповісти на таке запитання: де ми збираємося отримати інформацію про зміни, внесені до наших приміток до релізу та журналу змін? Вся потрібна інформація знаходиться в нашому репозиторії git, який надає нам багату історію активності розробки через повідомлення комітів та історію їх злиття.

Автоматизація створення changelog

Використання Conventional Commits

Щоб генерувати changelog автоматично, команда повинна дотримуватись узгодженого формату комітів (наприклад, Conventional Commits). Приклад комітів:

feat: додано підтримку нового API
fix: виправлено помилку відображення кнопки
chore: оновлено залежності

Це дозволяє автоматично визначати типи змін та групувати їх у changelog.

Використання git-chglog або standard-version

GitLab CI/CD можна налаштувати для автоматичного створення changelog за допомогою git-chglog або standard-version:

Приклад для git-chglog:

stages:
  - changelog
generate_changelog:
  stage: changelog
  image: alpine:3.18
  script:
    - apk add --no-cache git git-chglog
    - git-chglog -o CHANGELOG.md
  artifacts:
    paths:
      - CHANGELOG.md

Приклад для standard-version:

stages:
  - changelog
generate_changelog:
  stage: changelog
  image: node:18
  script:
    - npm install -g standard-version
    - standard-version
  artifacts:
    paths:
      - CHANGELOG.md

Автоматичний реліз у GitLab

GitLab дозволяє створювати релізи через API або CI/CD.

Оновлений код пайплайну для релізу: gitlab-ci.yml:

stages:
  - prepare
  - release
prepare_job:
  stage: prepare
  image: alpine:3.18
  rules:
    - if: '$CI_COMMIT_TAG =~ /^v?\d+\.\d+\.\d+$/'
  script:
    - apk add curl jq
    - 'curl -H "Authorization: Bearer $CI_API_TOKEN" "$CI_API_V4_URL/projects/$CI_PROJECT_ID/repository/changelog?version=$CI_COMMIT_TAG" | jq -r .notes > release_notes.md'
  artifacts:
    paths:
      - release_notes.md
release_job:
  stage: release
  image: registry.gitlab.com/gitlab-org/release-cli:v0.15.0
  needs:
    - job: prepare_job
      artifacts: true
  rules:
    - if: '$CI_COMMIT_TAG =~ /^v?\d+\.\d+\.\d+$/'
  script:
    - echo "Creating release"
  release:
    name: 'Release $CI_COMMIT_TAG'
    description: "$(cat release_notes.md)"
    tag_name: $CI_COMMIT_TAG
    ref: $CI_COMMIT_SHA
    assets:
      links:
        - name: 'Container Image $CI_COMMIT_TAG'
          url: "https://$CI_REGISTRY_IMAGE/$CI_COMMIT_REF_SLUG:$CI_COMMIT_SHA"

  1. prepare_job:
    • Виконується лише для тегів, що відповідають паттерну версій (наприклад, v1.2.3).
    • Встановлює curl і jq для роботи з API GitLab.
    • Викликає API для отримання changelog та зберігає його у release_notes.md.
    • Зберігає файл release_notes.md як артефакт для наступних job-ів.
  2. release_job:
    • Використовує образ release-cli для роботи з релізами.
    • Очікує завершення prepare_job і отримує артефакти (release_notes.md).
    • Виконується лише для тегів версій.
    • Створює реліз у GitLab з описом із release_notes.md.
    • Додає посилання на контейнерний образ відповідної версії.

Автоматизація релізів та створення changelog у GitLab спрощує процеси розробки та забезпечує прозорість змін. Використання стандартизованих комітів, CI/CD-пайплайнів та GitLab API дозволяє автоматизувати ці задачі, зменшуючи кількість ручної роботи та мінімізуючи ризики помилок.

Ця методика підходить як для невеликих команд, так і для великих проєктів, що мають складний цикл релізів.

Використані джерела: Tutorial: Automate releases and release notes with GitLab, Git: Documentation

5 1 голос
Рейтинг статті
Поширити

, , , , , , , , , , , , , , , , , , ,

Отримувати нові коментарі
Повідомляти про
guest
0 коментарів
по даті
спочатку нові за популярністю
Міжтекстові Відгуки
Переглянути всі коментарі