Рабочие процессы (workflows)
В блоке workflows
определяется перечень рабочих процессов CI/CD.
Рабочий процесс предназначен для логического объединения заданий, связанных с определенным этапом CI/CD.
Например, один рабочий процесс может выполняться для сборки, тестов, линтинга, проверок покрытия кода (code coverage) и т. д. Перечисленные этапы будут разными заданиями, объединенными в один рабочий процесс. Другой рабочий процесс будет выполняться, например, для генерации документации и развертывания новой версии ПО в промышленную эксплуатацию.
Все рабочие процессы запускаются параллельно.
Поддерживаются следующие параметры:
-
tasks
— список заданий, которые будут выполняться в рабочем процессе; -
settings
— настройки, которые будут использоваться для всего рабочего процесса. -
env
— переменные окружения, доступные во всех кубиках всех заданий конкретного рабочего процесса. Подробнее см. Пример рабочего процесса с использованием секретов и переменных, в том числе предопределенных. -
runs_on
— метки воркера, на котором будут запущены задания рабочего процесса. -
inputs
— параметры для ручного запуска рабочего процесса.
settings
В блоке settings
указываются общие для всего рабочего процесса настройки, например:
workflows:
my-workflow:
settings:
max_cube_duration: 20s
retry: 2
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
, второе — вне его. В задании my-task
приведен пример использования зависимостей между кубиками, подробнее см. на странице Кубики (cubes).
tasks:
- name: another-task
cubes:
- name: D
script:
- echo It's another task.
workflows:
my-workflow:
tasks:
- name: my-task
cubes:
- name: A
script:
- touch test.txt
- name: B
needs: ['-']
script:
- rm -f test.txt
- name: C
needs: ['A', 'B']
script:
- ls
- another-task
...
Пример с двумя различными рабочими процессами, запускаемыми в зависимости от типа события
on:
pull_request:
- workflows: workflow-for-pr
filter:
source_branches: ["**", "!test**"]
target_branches: "main"
push:
- workflows: workflow-for-push
filter:
branches: ["main"]
workflows:
workflow-for-pr:
tasks:
- name: sample-task-1
cubes:
- name: sample-cube1
image: docker.io/library/node
script:
- echo Hello, world!
workflow-for-push:
tasks:
- name: sample-task-2
cubes:
- name: sample-cube2
script:
- echo Test, and deploy your project.
Пример рабочего процесса с использованием секретов и переменных, в том числе предопределенных
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.<название_секрета> }}
script:
- echo "$TASK_ENV_VAR"
- echo "$MULTILINE_VAR"
- echo "$CUBE_ENV_VAR"
- echo "$SECRET_VAR"
- echo "$WORKFLOW_VAR"
- 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"
- name: my-task-2
cubes:
- name: my-cube-3
script:
- echo "$WORKFLOW_VAR"
inputs
В блоке inputs
указываются параметры для ручного запуска рабочего процесса. В общем виде блок выглядит следующим образом:
inputs:
<название_параметра>:
type: <тип_параметра>
required: <обязательность_параметра>
description: <описание_параметра>
default: <значение_по_умолчанию>
options: <возможные_значения_для_типа_choice>
Где:
-
type
— тип параметра. Возможные значения:string
— строка.bool
— логическое значениеtrue
илиfalse
.choice
— выбор из предустановленных значений.
Примечание
Если в конфигурации указан параметр
options
, необязательно задавать параметрtype: choice
.Если тип не указан и нет параметра
options
, то тип параметра по умолчанию —string
. -
required
— обязательность параметра. Возможные значения:true
илиfalse
. -
description
— произвольное описание параметра, которое будет отображаться в интерфейсе SourceCraft при ручном запуске рабочего процесса. -
default
— значение параметра по умолчанию. Может быть указано, в том числе, если параметр является обязательным. -
options
— возможные значения для типа параметраchoice
.
Пример использования блока inputs
см. в инструкции Запустить рабочий процесс вручную с пользовательскими параметрами.