Рабочие процессы (workflows)

В блоке workflows определяется перечень рабочих процессов CI/CD.

Рабочий процесс предназначен для логического объединения заданий, связанных с определенным этапом CI/CD.

Например, один рабочий процесс может выполняться для сборки, тестов, линтинга, проверок покрытия кода (code coverage) и т. д. Перечисленные этапы будут разными заданиями, объединенными в один рабочий процесс. Другой рабочий процесс будет выполняться, например, для генерации документации и развертывания новой версии ПО в промышленную эксплуатацию.

Все рабочие процессы запускаются параллельно.

Поддерживаются следующие параметры:

  • tasks — список заданий, которые будут выполняться в рабочем процессе;
  • settings — настройки, которые будут использоваться для всего рабочего процесса.

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.
    

См. также