Автоматизація релізів та створення changelog
Автоматизація релізів та створення 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"
prepare_job
:- Виконується лише для тегів, що відповідають паттерну версій (наприклад,
v1.2.3
). - Встановлює
curl
іjq
для роботи з API GitLab. - Викликає API для отримання changelog та зберігає його у
release_notes.md
. - Зберігає файл
release_notes.md
як артефакт для наступних job-ів.
- Виконується лише для тегів, що відповідають паттерну версій (наприклад,
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