Задания (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. -
checkout— настройки автоматического клонирования репозитория перед выполнением задания. По умолчанию будут применены настройки изworkflow:checkout.
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).
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