Окружения
Окружения - функционал, который позволяет управлять различными конфигурациями развертывания кода на различных этапах жизненного цикла ПО. Данный функционал позволяет:
- Поддерживать последовательность и повторяемость процесса развертывания
- Отслеживать, какой код где развернут
- Откатываться к предыдущей версии развертывания при возникновении каких-либо проблем
- Защищать конфиденциальные окружения от изменений или несанкционированного запуска от лица человека, у которого нет прав на развертывание
- Контролировать переменные развертывания для каждого окружения, для поддержания границ безопасности
В каждом окружении хранится история развертываний. Для повторного развертывания необходимо нажать кнопку повторить
Типы окружений
Окружение может быть статическим или динамическим.
Статическое окружение
- Обычно повторно используются последовательными развертываниями.
- Имеют статические имена, например:
staging
илиproduction
. - Создаются вручную или как часть конвейера CI/CD.
Создание статического окружения
Статическое окружение возможно создать, используя пользовательский интерфейс или файл gitflic-ci.yaml
.
В файле gitflic-ci.yaml
выполните следующие шаги:
- Определите задачу со
stage: deploy
. - В задаче укажите наименование окружения и URL. Если окружение с таким наименованием не существует при запуске конвейера, оно будет создано.
Для создания окружения с наименованием staging
и URL https://staging.example.com
, используйте следующий код:
deploy_staging:
stage: deploy
script:
- echo "Выполняется развертывание в staging среде"
environment:
name: staging
url: https://staging.example.com
Динамическое окружение
- Обычно создаются в конвейере CI/CD и используются только одним развертыванием, затем либо останавливаются, либо удаляются.
- Имеют динамические имена, обычно основанные на значении переменной CI/CD.
Создание динамического окружения
Чтобы создать динамическое окружение, используйте уникальные переменные CI/CD.
В файле gitflic-ci.yaml
выполните следующие шаги:
- Определите задачу со
stage: deploy
. -
В задаче укажите следующие атрибуты окружения:
- name (обязательный параметр при работе с окружениями): рекомендовано использовать связанную переменную CI/CD, например
$CI_COMMIT_REF_NAME
. Также можно добавить статический префикс к имени среды для группировки окружений в пользовательском интерфейсе. - url (необязательный параметр): добавьте к имени хоста префикс связанной переменной CI/CD, например
$CI_ENVIRONMENT_SLUG
.
- name (обязательный параметр при работе с окружениями): рекомендовано использовать связанную переменную CI/CD, например
В следующем примере при каждом запуске задачи deploy_review
имя среды и URL определяются с использованием уникальных значений:
deploy_review:
stage: deploy
script: make deploy
environment:
name: review/$CI_COMMIT_REF_NAME
url: https://$CI_ENVIRONMENT_SLUG.example.com
Состояния окружения
Окружение может находиться в одном из трех состояний в зависимости от того, запущена ли его задача остановки:
- available: окружение существует. Возможно, есть развертывание.
- stopping: задача остановки (
on_stop
) запущена. Это состояние не применяется, если задача остановки не определена. - stopped: либо задача остановки выполнена, либо пользователь остановил окружение вручную.
Уровень развертывания окружений
Если наименование окружения не отражает его принадлежность к определенной среде, используйте ключевое слово deployment_tier
, чтобы указать соответствующий уровень.
Возможные значения:
production
staging
testing
development
other
Если значение не задано, по умолчанию используется значение other
.
Остановка окружения
Остановка окружения означает, что его развертывания становятся недоступными на целевом сервере.
Окружение должно быть остановлено перед его удалением.
Остановка окружения может быть произведена через пользовательский интерфейс с помощью соответствующей кнопки остановки. Если для остановки окружения необходимо выполнить како-либо набор скриптов, то необходимо:
- В задаче, в которой происходит развертывание в параметре
on_stop
указать имя задачи, которую нужно запустить для выполнения остановки окружения - В указанной задаче остановки необходимо установить
action: stop
, а так же тип задачи - ручная при помощи ключевого словаmanual
, например используя конструкциюwhen: manual
build:
stage: build
script:
- echo "Building the app"
environment:
name: staging
on_stop: stop-job
stop-job:
stage: build
when: manual
script:
- echo "Stop the app"
environment:
name: staging
action: stop
Остановка окружения, созданного в рамках запроса на слияние
Если окружение было создано задачей в рамках запроса на слияние (например задачей, которая находится внутри конвейера результата слияния, то такое окружение будет автоматически остановлено после выполнения, закрытия или отмены запроса.
Удаление окружения
При удалении окружения удаляются все связанные с ним развертывания.
Удаление окружения может быть произведено через пользовательский интерфейс с помощью соответствующей кнопки удаления, которую можно найти на вкладке с остановленными окружениями.
Доступ к окружению для подготовки или проверки
Вы можете определить задачу, которая обращается к окружению для различных целей, например, проверка или подготовка. Это позволяет обойти создание развертывания и настроить процесс CD более точно.
Для этого следует добавить в раздел environment
:
action: prepare
action: verify
action: access
build:
stage: build
script:
- echo "Building the app"
environment:
name: staging
action: prepare
url: https://staging.example.com
deployment_tier: staging
CI/CD переменные для окружений
По умолчанию созданные CI/CD переменные доступны во всех задачах в рамках конвейера.
Однако, вы можете:
- Ограничить видимость переменной для конкретного окружения.
- Задать разные значения переменной для разных окружений.
Для настройки переменных для окружений необходимо:
- Перейти в свой проект/команду/компанию.
- Перейти в Настройки -> Настройки CI/CD.
-
Для создания новой переменной указать:
- Ключ переменной.
- Значение переменной.
- Наименование окружения, в котором данная переменная должна быть доступной.
-
Сохранить изменения.
Предопределенные CI/CD переменные для окружений
Если в конфигурации CI/CD присутствует ключевое слово environment
, то в рамках такой задачи доступны следующие предопределенные переменные:
Имя переменной | Описание |
---|---|
CI_ENVIRONMENT_NAME |
Наименование окружения в текущей задаче. Доступна если в задаче определено значение environment:name . |
CI_ENVIRONMENT_SLUG |
Упрощенное наименование окружения, подходящее для включения в DNS, URL, метки Kubernetes и т. д. Доступна, если в задаче определено значение environment:name . обрезается до 24 символов. К наименованию окружения в верхнем регистре автоматически добавляется случайный суффикс. |
CI_ENVIRONMENT_URL |
URL окружения в текущей задаче. Доступна если в задаче определено значение environment:url . |
CI_ENVIRONMENT_ACTION |
Значение environment:action , определенное для задачи. |
CI_ENVIRONMENT_TIER |
Среда развертывания окружения. Значение environment:deployment_tier , определенное для задачи. |
Защищенные окружения
Функционал доступен в Enterprise версии, а также на gitflic.ru
Поскольку задачи по развертыванию могут выполнять пользователи с разными ролями, важно защитить определенные окружения от воздействия неавторизованных пользователей. По умолчанию, защищенное окружение гарантирует, что развертывание в нем смогут осуществлять только лица с соответствующими привилегиями, что обеспечивает безопасность окружения.
Для настройки защиты окружений необходимо:
- Перейти в проект.
- Перейти в Настройки.
- Выбрать раздел Защита окружений.
- В поле "Окружение" ввести наименование конкретного окружения или wildcard шаблон.
- В поле "Разрешение для развертывания" выбрать, кто может создавать развертывания в данном окружении.
Допустимые значения:- Никто
- Администраторы + Разработчики
- Администраторы
- Нажмите "Включить защиту".
Защищенные окружения видны на этой же странице.