Задания (tasks)
В блоке tasks
определяется перечень заданий, которые будут выполняться в рабочем процессе.
Каждое задание содержит в себе набор минимальных логических действий — кубиков. Результатом задания является выполнение всех кубиков.
Примечание
Все кубики одного задания запускаются на одной и той же виртуальной машине (воркере). Поэтому если один кубик изменит окружение воркера, например, установит пакет, создаст или удалит файл и т. д., это окружение останется для всех последующих кубиков, которые выполняются в рамках одного задания. Например, в первом кубике устанавливается пакет runtime
для языка Go, во втором выполняется команда go build
, а в следующем — go test
. Подробнее о наследовании окружения см. на странице Кубики (cubes).
Если кубики запущены в разных заданиях, то они гарантированно будут исполняться на разных воркерах.
По умолчанию задание начинается с клонирования репозитория.
Все задания рабочего процесса запускаются параллельно.
В заданиях и кубиках вы можете использовать переменные окружения, а также секреты.
Вы можете задать настройки конкретного задания как внутри блока workflows:tasks
, так и в отдельном блоке tasks
и сослаться на него из блока workflows:tasks
. Формат описания задания для обоих вариантов идентичен.
Поддерживаются следующие параметры:
-
name
— имя задания. -
cubes
— список кубиков, которые будут выполняться в задании. Подробнее см. в разделе cubes. -
env
— переменные окружения, доступные во всех кубиках конкретного задания. Подробнее см. Пример рабочего процесса с использованием секретов и переменных, в том числе предопределенных. -
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-метка — тип воркера. Возможные значения:
compute
— облачный воркер. Значение по умолчанию.serverless
— serverless-воркер. См. примеры.self-hosted
— пользовательский (self-hosted) воркер.
Важно
В поле
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
).