Задания (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.

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).

См. также