- Чем отличается Continuous Integration от Continuous Delivery от Continuous Deployment?
Ответ
Continuous Integration (непрерывная интеграция) - практика интеграции изменений кода из ветки разработки в основную ветку путём инструментов для интеграции.
Continuous Delivery (непрерывная доставка) - практика содержания кода в репозитории в состоянии пригодным для разворачивания на рабочее окружение.
Continuous Deployment (непрерывное разворачивание) - практика доставки каждого изменения в коде продукта на рабочее окружение.
Разница между Continuous Delivery и Continuous Deployment очень маленькая. Представим два пайплайна для одного и того же приложения. В каждом есть шаги:
- Source Control - внесение изменений в систему контроля версий ПО.
- Build - сборка приложения и прогон unit тестов
- Staging - деплой на тестовое окружение, прогон интеграционных, нагрузочных и других тестов
- Production - деплой на окружение с пользователями
Каждый пайплайн запускается автоматически по триггеру из системы контроля версий. В случае Continuous Deployment каждый следующий шаг, будет выполнен автоматически если предыдущий был успешный, включая деплой на Production.
Если же у вас Continuous Delivery, то шаги будут выполняться автоматически только в безопасной среде, а перед деплоем на Production пайплайн остановится и будет ждать ручного подтверждения. Механизм, как это будет реализовано может быть разным. От самого простого, когда ответственный человек должен зайти в пайплайн и нажать кнопку Next, до интерактивного бота с кнопками в корпоративном мессенджере.
- Что означает конструкция
when: always
в stage блоке в gitlab CI?
Ответ
Данная конструкция означает, что stage будет запущен вне зависимости от успешности предыдущего шага.
- Что выполняет конструкция
extends: .plan
в gitlab CI?
Ответ
extends
используется для повторного использования секции пайплайна (аналог фунции). .plan
указывает на имя повторяемой секции в пайплайне. Первым в шаге выполняется скрипт из extends
.
- В gitlab CI необходимо, чтобы джоба выполнялась всегда только при ручной активации. Что для этого необходимо сделать?
Ответ
Необходимо добавить when: manual
в описание заданной джобы. По-умолчанию при использовании when: manual
параметр allow_failure
установлен в true
, поэтому данная джоба будет запускаться автоматически. Чтобы такого не было необходимо также установить параметр allow_failure: false
.