GitLab CI/CD

GitLab CI/CD

GitLab CI/CD є потужним інструментом для автоматизації процесів безперервної інтеграції та доставки програмного забезпечення. Основною складовою є файл .gitlab-ci.yml, який вказує, як виконувати різні завдання (наприклад, збірку, тестування та деплой). Цей файл розміщується в корені вашого репозиторію і складається з набору задач (jobs) та етапів (stages).

Формат файлу .gitlab-ci.yml

Файл .gitlab-ci.yml складається з таких основних компонентів:

  1. Stages (Етапи): Визначають основні етапи роботи, такі як збірка, тестування та деплой.
  2. Jobs (Завдання): Це конкретні завдання, які виконуються на кожному етапі.
  3. Variables (Змінні): Глобальні змінні, які використовуються у всьому файлі.
  4. 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

Детальний розбір конфігурації

  1. stages:

    stages:
      - build
      - test
      - deploy
    

    Тут ми визначаємо три етапи: build, test, deploy.

  2. 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).

  3. 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, після чого артефакт (збірка) зберігається для використання наступними етапами.

  4. test-job:

    test-job:
      stage: test
      image: maven:3.8.4-jdk-11
      script:
        - mvn $MAVEN_CLI_OPTS test
    

    Завдання тестування також використовує Maven образ і виконує команду mvn test.

  1. 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, і ви можете легко розширити цю конфігурацію у відповідності до ваших специфічних потреб.

results matching ""

    No results matching ""