Назад к вопросам
Junior
547
questionbank

Как выполнить деплой на GitLab?

Sobes Copilot

Получайте ответы в реальном времени

Ответ от нейросети

sobes.tech AI

Деплой в GitLab CI/CD выполняется через конфигурирование файла .gitlab-ci.yml в корневом каталоге проекта. В этом файле определяются пайплайны, стейджи и джобы.

Типичный процесс деплоя включает:

  • Сборка: Создание артефактов (образов Docker, исполняемых файлов и т.д.).
  • Тестирование: Выполнение Unit, Integration и End-to-End тестов.
  • Деплой: Развертывание артефактов на целевых окружениях.

Пример .gitlab-ci.yml для деплоя Docker образа:

stages:
  - build
  - deploy

build:
  stage: build
  image: docker:latest
  services:
    - docker:dind
  script:
    - docker login -u "$CI_REGISTRY_USER" -p "$CI_REGISTRY_PASSWORD" $CI_REGISTRY
    - docker build -t "$CI_REGISTRY_IMAGE:$CI_COMMIT_SHORT_SHA" .
    - docker push "$CI_REGISTRY_IMAGE:$CI_COMMIT_SHORT_SHA"

deploy_staging:
  stage: deploy
  image: registry.gitlab.com/gitlab-org/cloud-native/gitlab-agent/agentk/kubectl:latest # Использование kubectl
  script:
    - kubectl config use-context my-kubernetes-context # Переключение на нужный контекст
    - kubectl apply -f kubernetes/deployment-staging.yaml # Деплой YAML файла
  environment:
    name: staging
  only:
    - main # Запуск джобы только при коммите в ветку main

deploy_production:
  stage: deploy
  image: registry.gitlab.com/gitlab-org/cloud-native/gitlab-agent/agentk/kubectl:latest
  script:
    - kubectl config use-context my-kubernetes-context
    - kubectl apply -f kubernetes/deployment-production.yaml
  environment:
    name: production
  when: manual # Ручной запуск джобы
  only:
    - main

Ключевые концепции:

  • Stages: Определяют последовательность выполнения джоб.
  • Jobs: Конкретные задачи, выполняемые в стейджах. Могут использовать различные Docker образы.
  • Runners: Агенты, выполняющие джобы. Могут быть shared, specific, or group.
  • Variables: Используются для хранения чувствительных данных или конфигурации. Могут быть предопределенными или пользовательскими (в настройках CI/CD).
  • Environments: Позволяют связывать деплои с конкретными окружениями (staging, production). Упрощают отслеживание версий и откаты.
  • Rules/Only/Except: Определяют, когда должна выполняться джоба.

Для деплоя на различные платформы используются соответствующие инструменты:

Платформа Инструмент Пример использования в .gitlab-ci.yml
Kubernetes kubectl, Helm Использование образа с kubectl или Helm
Docker Swarm docker Использование образа docker
Cloud Platforms (AWS, GCP, Azure) AWS CLI, gcloud, az Использование образов с соответствующими CLI
SSH ssh Использование образа с ssh и выполнением команд

Оптимизация деплоя включает:

  • Кеширование: Ускоряет сборку.
  • Параллельное выполнение джоб: Сокращает время пайплайна.
  • Blue/Green или Canary деплой: Для снижения рисков.

Конфиденциальные данные (пароли, ключи API) следует хранить в CI/CD переменных с маской.