Задания (tasks)

В блоке tasks определяется перечень заданий, которые будут выполняться в рабочем процессе.

Каждое задание содержит в себе набор минимальных логических действий — кубиков. Результатом задания является выполнение всех кубиков.

Примечание

Все кубики одного задания запускаются на одной и той же виртуальной машине (воркере). Поэтому если один кубик изменит окружение воркера, например, установит пакет, создаст или удалит файл и т. д., это окружение останется для всех последующих кубиков, которые выполняются в рамках одного задания. Например, в первом кубике устанавливается пакет runtime для языка Go, во втором выполняется команда go build, а в следующем — go test. Подробнее о наследовании окружения на странице Кубики (cubes).

Если кубики запущены в разных заданиях, то они гарантированно будут исполняться на разных воркерах.

По умолчанию задание начинается с клонирования репозитория.

Все задания рабочего процесса запускаются параллельно.

В заданиях и кубиках вы можете использовать переменные окружения, а также секреты.

Вы можете задать настройки конкретного задания как внутри блока workflows:tasks, так и в отдельном блоке tasks и сослаться на него из блока workflows:tasks. Формат описания задания для обоих вариантов идентичен.

Поддерживаются следующие параметры:

  • name — имя задания.

  • cubes — список кубиков, которые будут выполняться в задании. Подробнее в разделе cubes.

  • envпеременные окружения, доступные во всех кубиках конкретного задания. Подробнее в разделе Пример рабочего процесса с использованием секретов и переменных, в том числе предопределенных.

    Совет

    Также вы можете задать переменные окружения внутри следующих блоков:

    • workflows — переменные будут доступны во всех кубиках всех заданий конкретного рабочего процесса.
    • cubes — переменные будут доступны в конкретном кубике.
  • uses — параметр, с помощью которого в данном задании можно переиспользовать из другого задания значения следующих полей: cubes, name, env, runs_on. При этом значения name, env и runs_on можно переопределить. Переопределить значение cubes нельзя. Подробнее в разделе Пример использования зависимостей и переиспользования параметров задания.

    Важно

    Параметр uses можно использовать только внутри блока workflows:tasks. Не допускается использовать в отдельном блоке tasks.

    Задание, параметры которого переиспользуются, может размещаться как внутри блока workflows:tasks, так и в отдельном блоке tasks.

  • needs — список заданий, которые должны быть выполнены до выполнения текущего. Задание будет передано воркеру на исполнение только после того, как все зависимости успешно завершатся. По умолчанию каждое задание не имеет зависимостей и может быть исполнено параллельно с другими заданиями рабочего процесса. Подробнее в разделе Пример использования зависимостей и переиспользования параметров задания.

    Важно

    Параметр needs можно использовать только внутри блока workflows:tasks. Не допускается использовать в отдельном блоке tasks.

    В поле needs можно сослаться только на задания рабочего процесса, внутри которого выполняется текущее задание. Циклические зависимости не допускаются.

  • runs_onметки воркера, на котором будут запущены задания рабочего процесса. По умолчанию будет выставлен параметр из workflow:runs_on.

  • checkoutнастройки автоматического клонирования репозитория перед выполнением задания. По умолчанию будут применены настройки из workflow:checkout.

runs_on

В поле runs_on указывается перечень меток воркера, на котором будут запущены задания рабочего процесса. Поддерживаются следующие типы меток:

  • runtime-метка — тип воркера. Возможные значения:

    Важно

    В поле runs_on не может быть указано более одной runtime-метки. Если runtime-метка не указана, по умолчанию применяется compute.

  • метки пользовательских воркеров.

    Примечание

    В строковых значениях метки может содержаться ограниченный набор символов: буквы латинского алфавита (a-zA-Z), а также -, . и _.

    Метка self-hosted проставляется в параметрах пользовательского воркера автоматически. Ее не надо добавлять дополнительно в поле tags файла config.yaml.

Пример задания внутри блока workflows:tasks
workflows:
  my-workflow:
    tasks:
      - name: my-task
        cubes:
    ...
Пример задания в отдельном блоке tasks
tasks:
  - name: common-task

workflows:
  my-workflow:
    tasks:
      - common-task
Пример нескольких заданий в отдельном блоке tasks
tasks:
  - name: common-task-1
  - name: common-task-2

workflows:
  my-workflow:
    tasks:
      - [common-task-1, common-task-2]
Пример комбинированного варианта указания заданий
tasks:
  - name: common-task-1
  - name: common-task-2
  - name: common-task-3

workflows:
  my-workflow:
    tasks:
      - common-task-1
      - [common-task-2, common-task-3]
      - name: my-task
        cubes:
    ...
Пример использования зависимостей и переиспользования параметров задания
tasks:
  # Задание-оригинал, параметры которого используются в
  # других заданиях.
  - name: sample-task
    env:
      HELLO: Hello
      WORLD: World
      SLEEP: 1
    cubes:
      - name: sample-cube
        script:
          - echo $HELLO, $WORLD
          - sleep $SLEEP

workflows:
  sample-workflow:
    tasks:
      # Ссылка на задание-оригинал tasks:sample-task.
      - sample-task
      - name: use1
        # Для задания use1 переиспользуются параметры
        # задания-оригинала tasks:sample-task.
        uses: sample-task
        # Задание use1 будет выполнено только после 
        # успешного завершения задания
        # sample-workflow:tasks:sample-task.
        needs: [sample-task]
        # Переопределение переменных из задания tasks:sample-task.
        env:
          HELLO: Hallo
          WORLD: Welt
          SLEEP: 30
      - name: use2
        # Для задания use2 переиспользуются параметры
        # задания-оригинала tasks:sample-task.
        uses: sample-task
        # Задание use2 будет выполнено только после 
        # успешного завершения заданий
        # sample-workflow:tasks:sample-task и 
        # sample-workflow:tasks:use1.
        needs: [use1, sample-task]
        # Переопределение переменных из задания tasks:sample-task.
        env:
          HELLO: Привет
          WORLD: Мир
  another-workflow:
    tasks:
      # Для задания переиспользуются параметры
      # задания-оригинала tasks:sample-task, в том числе и name.
      - uses: sample-task

Примечание

Записи - sample-task и - uses: sample-task эквивалентны, однако с помощью второго варианта вы можете переименовать задание (name), определить для него новые переменные окружения (env) или переопределить существующие, а также изменить метки воркеров (runs_on).

checkout

В блоке checkout указываются настройки автоматического клонирования репозитория, в котором запускается рабочий процесс. Если блок задан как на уровне рабочего процесса, так и на уровне задания, то для задания применяются его собственные настройки.

Поддерживаются следующие параметры:

  • enabled — признак автоматического клонирования репозитория перед выполнением задания. Значение по умолчанию — true. Если установлено значение false, перед стартом задания репозиторий не клонируется. В этом случае при необходимости получите содержимое репозитория самостоятельно в одном из кубиков задания.

    Примечание

    Значение параметра доступно в предопределенной переменной окружения SOURCECRAFT_CHECKOUT_ENABLED.

  • fetch_depth — количество последних записей истории, которые будут загружены при клонировании репозитория. По умолчанию параметр не задан, и репозиторий клонируется на всю глубину истории.

    Совет

    Используйте этот параметр, чтобы ускорить загрузку данных в задание.

  • remove_credentials — признак удаления ключа авторизации из файла .git/config после клонирования репозитория. Значение по умолчанию — false. Установите значение true, если требуется запретить дальнейшие операции с удаленным репозиторием из кубиков задания под аутентификацией CI/CD.

  • retry — настройки автоматического перезапуска клонирования репозитория. Параметр задается в одном из следующих форматов:

    В отличие от параметра retry кубика, настройка влияет только на перезапуск клонирования репозитория. По умолчанию автоматический перезапуск клонирования отключен.

Примечание

Настройки checkout можно также задать на уровне рабочего процесса. Если блок задан и на уровне рабочего процесса, и на уровне задания, то для задания применяются его собственные настройки.

Пример настройки клонирования репозитория на уровне задания
tasks:
  - name: ci-build
    checkout:
      retry: 2
      enabled: true
      remove_credentials: false
      fetch_depth: 10

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