Переменные окружения (env)
В CI/CD-процессах SourceCraft поддерживаются переменные окружения. Доступны следующие области видимости переменных:
- Глобальная — переменные будут переданы во все кубики всех заданий во всех рабочих процессах.
- Рабочий процесс — переменные будут переданы во все кубики всех заданий конкретного рабочего процесса.
- Задание — переменные будут переданы во все связанные с заданием кубики.
- Кубик — переменные будут переданы только в конкретный кубик.
Переменные можно переиспользовать во вложенных областях видимости.
Также вы можете использовать предопределенные переменные окружения.
Важно
Не храните в переменных окружения конфиденциальные данные, например пароли, ключи доступа, токены и т. д. Для хранения таких данных используйте секреты.
Структура блока env
env:
# Имя переменной и ее значение.
<имя>: <значение>
Пример использования переменных:
# Здесь определяются переменные с глобальной областью видимости,
# они будут переданы во все кубики всех заданий во всех рабочих процессах
env:
GLOBAL_VAR: global_var
GLOBAL_SECRET: ${{ secrets.<название_секрета> }}
workflows:
my-workflow:
# Здесь определяются переменные, которые будут доступны во всех кубиках
# всех заданий рабочего процесса my-workflow
env:
WORKFLOW_VAR: workflow-var
tasks:
- name: my-task
# Здесь определяются переменные, которые будут доступны во всех кубиках
# внутри задания my-task
env:
TASK_ENV_VAR: This variable is available in all cubes of this task.
# Многострочная переменная
MULTILINE_VAR: |
multi-var
multi-var
this is my multi-var
cubes:
- name: my-cube-1
# Здесь определяются переменные, которые будут доступны только внутри
# кубика my-cube-1
env:
CUBE_ENV_VAR: This variable is available only in cube my-cube-1.
# Переменная, значение которой задается из секрета
SECRET_VAR: ${{ secrets.<название_секрета> }}
# Переиспользование переменных из глобальной области видимости,
# например GLOBAL_VAR и GLOBAL_SECRET
LOCAL_VAR: ${{ env.<глобальная_переменная_1> }}
LOCAL_SECRET: ${{ env.<глобальная_переменная_2> }}
# Переиспользование переменных из области видимости рабочего
# процесса, например WORKFLOW_VAR
LOCAL_VAR2: ${{ env.<переменная_рабочего_процесса> }}
script:
- echo "$TASK_ENV_VAR"
- echo "$MULTILINE_VAR"
- echo "$CUBE_ENV_VAR"
- echo "$SECRET_VAR"
- echo "$WORKFLOW_VAR"
- echo "$LOCAL_VAR"
- echo "$LOCAL_VAR2"
- echo "$LOCAL_SECRET"
- name: my-cube-2
# Здесь определяются переменные, которые будут доступны только внутри
# кубика my-cube-2
env:
CUBE_ENV_VAR: This variable is available only in cube my-cube-2.
script:
- echo "$TASK_ENV_VAR"
- echo "$CUBE_ENV_VAR"
# Использование предопределенной переменной
- echo "$SOURCECRAFT_TASK"
- echo "$WORKFLOW_VAR"
- echo "$GLOBAL_VAR"
- name: my-task-2
cubes:
- name: my-cube-3
script:
- echo "$WORKFLOW_VAR"
- echo "$GLOBAL_VAR"
Значения из именованного окружения
Чтобы передать секрет из окружения, выберите окружение в параметре environment рабочего процесса и укажите название секрета в выражении secrets:
workflows:
check-production:
environment: production
tasks:
- name: check-api
env:
API_TOKEN: ${{ secrets.API_TOKEN }}
API_URL: https://example.com/api/status
cubes:
- name: request-status
script:
- sh ./check-api.sh
В примере скрипт check-api.sh обращается к API приложения с токеном из окружения production. Окружение и секрет API_TOKEN нужно создать заранее. Замените API_URL на адрес API вашего приложения. Полный пример конфигурации и скрипта приведен в инструкции.
В этом примере секрет ищется в окружении production репозитория, затем в его подключениях по приоритетам и, если не найден, в секретах самого репозитория. Секреты ресурсов, которым принадлежат подключенные окружения, в поиске по ссылкам не участвуют. Подробнее о порядке поиска.
Примечание
Окружение выбирается параметром environment рабочего процесса и используется для всех его заданий. В выражении secrets имя окружения не указывается. Например, при environment: production выражение ${{ secrets.API_TOKEN }} получает секрет через окружение production с учетом порядка поиска. Если параметр environment не задан, используются секреты самого репозитория.