Переменные окружения (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 не задан, используются секреты самого репозитория.

Полезные ссылки