GitLab CI/CD

GitLab CI/CD є потужним інструментом для автоматизації процесів безперервної інтеграції та доставки програмного забезпечення. Основною складовою є файл .gitlab-ci.yml, який вказує, як виконувати різні завдання (наприклад, збірку, тестування та деплой). Цей файл розміщується в корені вашого репозиторію і складається з набору задач (jobs) та етапів (stages).
Формат файлу .gitlab-ci.yml
Файл .gitlab-ci.yml складається з таких основних компонентів:
- Stages (Етапи): Визначають основні етапи роботи, такі як збірка, тестування та деплой.
- Jobs (Завдання): Це конкретні завдання, які виконуються на кожному етапі.
- Variables (Змінні): Глобальні змінні, які використовуються у всьому файлі.
- Services (Сервіси): Додаткові служби, такі як бази даних, які потрібні для виконання завдань.
Приклад .gitlab-ci.yml для Java Spring Boot
Нижче наведений приклад файлу .gitlab-ci.yml для збірки Java Spring Boot додатку та його публікації у приватному реєстрі GitLab.
# Визначаємо етапи роботи
stages:
- build
- test
- deploy
# Задаємо загальні змінні
variables:
MAVEN_CLI_OPTS: "--batch-mode --errors --fail-at-end --show-version" # Змінна для параметрів Maven
DOCKER_TLS_CERTDIR: "/certs" # Параметр для docker-in-docker
# Виконуємо збірку
build-job:
stage: build
image: maven:3.8.4-jdk-11
script:
- mvn $MAVEN_CLI_OPTS clean package
artifacts:
paths:
- target/*.jar # Сохранение артефактов сборки
# Виконуємо тестування
test-job:
stage: test
image: maven:3.8.4-jdk-11
script:
- mvn $MAVEN_CLI_OPTS test
# Деплоїмо результат
deploy-job:
stage: deploy
image: docker:20.10.7
services:
- docker:20.10.7-dind
before_script:
- docker login -u "$CI_REGISTRY_USER" -p "$CI_REGISTRY_PASSWORD" $CI_REGISTRY
script:
- docker build -t $CI_REGISTRY_IMAGE:latest .
- docker push $CI_REGISTRY_IMAGE:latest
only:
- main # Запускати деплой лише при пушах в гілку main
Детальний розбір конфігурації
stages:
stages: - build - test - deployТут ми визначаємо три етапи:
build,test,deploy.variables:
variables: MAVEN_CLI_OPTS: "--batch-mode --errors --fail-at-end --show-version" DOCKER_TLS_CERTDIR: "/certs"Визначаємо загальні змінні, такі як параметри для Maven (
MAVEN_CLI_OPTS) та сертифікати для Docker (DOCKER_TLS_CERTDIR).build-job:
build-job: stage: build image: maven:3.8.4-jdk-11 script: - mvn $MAVEN_CLI_OPTS clean package artifacts: paths: - target/*.jarЗавдання збірки використовує Docker образ
maven:3.8.4-jdk-11. Воно виконує командуmvn clean package, після чого артефакт (збірка) зберігається для використання наступними етапами.test-job:
test-job: stage: test image: maven:3.8.4-jdk-11 script: - mvn $MAVEN_CLI_OPTS testЗавдання тестування також використовує Maven образ і виконує команду
mvn test.
deploy-job:
deploy-job: stage: deploy image: docker:20.10.7 services: - docker:20.10.7-dind before_script: - docker login -u "$CI_REGISTRY_USER" -p "$CI_REGISTRY_PASSWORD" $CI_REGISTRY script: - docker build -t $CI_REGISTRY_IMAGE:latest . - docker push $CI_REGISTRY_IMAGE:latest only: - mainЗавдання деплою використовує образ Docker (
docker:20.10.7) та запуск контейнера Docker-in-Docker (docker:20.10.7-dind), що дозволяє виконувати команди з використанням Docker.before_script:
before_script: - docker login -u "$CI_REGISTRY_USER" -p "$CI_REGISTRY_PASSWORD" $CI_REGISTRYЦей блок виконує вхід в Docker реєстр GitLab за допомогою облікових даних, заданих як змінні оточення
$CI_REGISTRY_USERта$CI_REGISTRY_PASSWORD.script:
script: - docker build -t $CI_REGISTRY_IMAGE:latest . - docker push $CI_REGISTRY_IMAGE:latestТут ми використовуючи Docker збираємо Docker образ нашого додатку та завантажуємо цей образ у приватний реєстр GitLab. Параметр
$CI_REGISTRY_IMAGEмістить шлях до реєстру та ім’я образу.only:
only: - mainЦей параметр визначає, що завдання деплою буде виконуватись тільки при змінах в гілці
main.
Підсумок
Наш файл .gitlab-ci.yml визначає три основні етапи: build, test та deploy. Кожне завдання на кожному етапі використовує відповідні образи Docker, щоб забезпечити ізольоване середовище для виконання команд.
- Етап
buildзбирає Java Spring Boot додаток за допомогою Maven. - Етап
testвиконує тести для переконання в коректності роботи коду. - Етап
deployзбирає Docker образ та відправляє його до приватного Docker реєстру GitLab.
Цей процес CI/CD дозволяє автоматизувати всі важливі кроки від розробки до деплою, зменшуючи кількість рутинних задач для розробників та забезпечуючи більш стабільний цикл виробництва.
Додаткові рекомендації
- Безпека: Переконайтеся, що ваші облікові дані (наприклад,
$CI_REGISTRY_USERта$CI_REGISTRY_PASSWORD) зберігаються у змінних оточення GitLab CI/CD та налаштовані як захищені. - Моніторинг: Використовуйте інструменти моніторингу для відстеження статусу ваших CI/CD процесів.
- Документація: Документуйте всі ваші пайплайни та етапи для легкого розуміння та підтримки колегами.
Цей приклад є хорошою відправною точкою для розгортання Java Spring Boot додатків за допомогою GitLab CI/CD, і ви можете легко розширити цю конфігурацію у відповідності до ваших специфічних потреб.