Рабочие процессы (workflows)
В блоке workflows
определяется перечень рабочих процессов CI/CD.
Рабочий процесс предназначен для логического объединения заданий, связанных с определенным этапом CI/CD.
Например, один рабочий процесс может выполняться для сборки, тестов, линтинга, проверок покрытия кода (code coverage) и т. д. Перечисленные этапы будут разными заданиями, объединенными в один рабочий процесс. Другой рабочий процесс будет выполняться, например, для генерации документации и развертывания новой версии ПО в промышленную эксплуатацию.
Все рабочие процессы запускаются параллельно.
Поддерживаются следующие параметры:
tasks
— список заданий, которые будут выполняться в рабочем процессе;settings
— настройки, которые будут использоваться для всего рабочего процесса.runs_on
— тип воркера, на котором будут запущены задания рабочего процесса. Возможные значения:compute
— облачный воркер. Значение по умолчанию.serverless
— serverless-воркер. См. примеры.self-hosted
— пользовательский (self-hosted) воркер. Также в параметре может быть указан тег, см. пример.
settings
В блоке settings
указываются общие для всего рабочего процесса настройки, например:
workflows:
my-workflow:
settings:
max_cube_duration: 20s
retry: 2
Пример рабочего процесса с двумя заданиями, заданными в разном формате
Одно задание рабочего процесса размещено внутри блока 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.