Встречается на 20% собеседований по DevOps

Как делается деплой на гитлабе

Деплой в GitLab — это автоматизированный процесс развертывания приложения, который настраивается через файл .gitlab-ci.yml и выполняется в рамках пайплайна CI/CD. Основная идея: вы описываете этапы (стадии) сборки, тестирования и деплоя, а GitLab Runner выполняет их при каждом пуше в репозиторий или по расписанию. Для управления окружениями (staging, production) используются специальные секции в конфигурации, а для секретов — переменные CI/CD.

Как это работает

Пайплайн в GitLab состоит из джоб (jobs), каждая из которых принадлежит определенной стадии (stage). Стадии выполняются последовательно: сначала build, затем test, и только потом deploy. Если какая-то джоба завершается с ошибкой, последующие стадии не запускаются. Это позволяет гарантировать, что в продакшн попадает только протестированный код.

Для деплоя обычно создается отдельная джоба, которая запускает скрипты развертывания. Например, это может быть SSH-подключение к серверу, обновление Docker-образа, вызов API или использование Kubernetes.

Пример конфигурации

Базовый файл .gitlab-ci.yml для деплоя выглядит так:

yaml
stages:
  - build
  - test
  - deploy

build_job:
  stage: build
  script:
    - echo "Building the application..."
    # команды сборки, например: docker build -t myapp .

test_job:
stage: test
script:
- echo "Running tests..."
# команды тестирования, например: pytest

deploy_job:
stage: deploy
script:
- echo "Deploying to production..."
# команды деплоя, например: docker push myapp && ssh server 'docker pull && docker run'
environment:
name: production
url: https://yourproduction.url

text

Здесь `environment` определяет имя окружения и его URL. Это позволяет отслеживать деплои в интерфейсе GitLab и откатываться к предыдущим версиям.

## Управление окружениями и секретами

Окружения (environments) — это логические сущности, которые представляют целевые серверы или кластеры. Вы можете определить несколько окружений, например `staging` и `production`, и настроить автоматический деплой в зависимости от ветки. Для этого используются правила `only` или `rules`:

```yaml
deploy_staging:
  stage: deploy
  script:
    - echo "Deploy to staging"
  environment:
    name: staging
  only:
    - develop

deploy_production:
  stage: deploy
  script:
    - echo "Deploy to production"
  environment:
    name: production
  only:
    - main

Секреты (API-ключи, пароли) хранятся в переменных CI/CD. Их можно задать в настройках проекта (Settings → CI/CD → Variables) и использовать в скриптах как обычные переменные окружения:

yaml
deploy_job:
  stage: deploy
  script:
    - curl -X POST -H "Authorization: Bearer $API_KEY" https://api.example.com/deploy
  environment:
    name: production

Переменные можно помечать как protected (доступны только для защищенных веток) и masked (скрыты в логах).

Подводные камни

  • Права доступа: для деплоя на сервер нужен SSH-ключ или токен, который должен быть добавлен в переменные CI/CD. Не храните секреты прямо в .gitlab-ci.yml.
  • Идемпотентность: скрипты деплоя должны быть безопасны для повторного запуска. Если деплой упал на середине, повторный запуск не должен ломать систему.
  • Откаты: GitLab позволяет откатить деплой на предыдущую версию через интерфейс, но для этого нужно правильно настроить environment и использовать механизм деплоя, поддерживающий версионирование (например, Docker-образы с тегами).
  • Кэширование: если сборка и деплой используют общие артефакты, настройте cache или artifacts, чтобы не пересобирать все заново.

Когда использовать

GitLab CI/CD подходит для большинства проектов, где нужна автоматизация деплоя. Он особенно удобен, если вы уже используете GitLab как хостинг репозитория. Для сложных сценариев (например, мультирегиональный деплой) можно комбинировать с Kubernetes и GitLab Agent.

Коротко

  • Деплой в GitLab настраивается через .gitlab-ci.yml с описанием стадий и джоб.
  • Используйте environment для управления окружениями и only/rules для выбора веток.
  • Секреты храните в переменных CI/CD, а не в коде.
  • Пайплайн запускается автоматически при пуше, если не заданы дополнительные правила.
  • Для откатов и мониторинга настраивайте URL окружений и используйте теги версий.
как отвечать на вопрос
пример собеседования
фреймворки на собеседовании
типичные вопросы junior
интервью вопросы и ответы