---
metadata:
  - name: generator
    content: Diplodoc Platform v5.55.2
alternate:
  - https://sourcecraft.dev/portal/docs/en/sourcecraft/ci-cd-ref/workflows.md
  - https://sourcecraft.dev/portal/docs/ru/sourcecraft/ci-cd-ref/workflows.md
  - href: ru/sourcecraft/ci-cd-ref/workflows.md
    type: text/markdown
    title: Markdown version
  - href: ../../llms.txt
    type: text/markdown
    title: llms.txt
title: Рабочие процессы (workflows)
description: 'Описание рабочих процессов в CI/CD SourceCraft: параметры, настройки, переменные окружения и примеры конфигурации.'
---
> **Documentation Index:** Fetch the complete configuration index at https://sourcecraft.dev/portal/docs/ru/llms.txt


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

<!-- source: ru/_includes/sourcecraft/ci-cd/workflows-description.md -->
В блоке `workflows` определяется перечень _рабочих процессов_ CI/CD.

Рабочий процесс предназначен для логического объединения [заданий](https://sourcecraft.dev/portal/docs/ru/sourcecraft/concepts/ci-cd.md#tasks), связанных с определенным этапом CI/CD. 

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

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

Рабочий процесс можно сделать [доступным для запуска всем участникам организации](https://sourcecraft.dev/portal/docs/ru/sourcecraft/concepts/public-workflows.md).
<!-- endsource: ru/_includes/sourcecraft/ci-cd/workflows-description.md -->

Поддерживаются следующие параметры:
* `tasks` — список [заданий](https://sourcecraft.dev/portal/docs/ru/sourcecraft/ci-cd-ref/tasks.md), которые будут выполняться в рабочем процессе;
* `settings` — [настройки](#settings), которые будут использоваться для всего рабочего процесса.
* `env` — [переменные окружения](https://sourcecraft.dev/portal/docs/ru/sourcecraft/concepts/ci-cd.md#variables), доступные во всех кубиках всех заданий конкретного рабочего процесса. Подробнее в разделе [Пример рабочего процесса с использованием секретов и переменных, в том числе предопределенных](#workflow-with-vars).

  {% note tip %}

  Также вы можете задать переменные окружения внутри следующих блоков:
  * [tasks](https://sourcecraft.dev/portal/docs/ru/sourcecraft/ci-cd-ref/tasks.md) — переменные будут доступны во всех кубиках конкретного задания.
  * [cubes](https://sourcecraft.dev/portal/docs/ru/sourcecraft/ci-cd-ref/cubes.md) — переменные будут доступны в конкретном кубике.

  {% endnote %}

* `runs_on` — [метки воркера](#runs-on), на котором будут запущены задания рабочего процесса.
* `inputs` — [параметры](#inputs) для ручного запуска рабочего процесса или запуска по расписанию.
* `checkout` — [настройки](#checkout) автоматического клонирования репозитория перед выполнением заданий рабочего процесса.

## settings {#settings}

В блоке `settings` указываются общие для всего рабочего процесса настройки:
* `max_cube_duration` — максимальная длительность выполнения кубика в секундах (`s`) или минутах (`m`). Значение по умолчанию — 5 минут. Пример:

  ```yaml
  workflows:
    my-workflow:
      settings:
        max_cube_duration: 20s
  ```

* `shared` — разрешение запускать рабочий процесс всем участникам [организации](https://sourcecraft.dev/portal/docs/ru/sourcecraft/concepts/index.md#org), в том числе при отсутствии ролей в репозитории, в котором рабочий процесс размещен. 

  Подробнее на странице [Настроить общедоступный рабочий процесс в SourceCraft](https://sourcecraft.dev/portal/docs/ru/sourcecraft/operations/public-workflows.md).

##### Пример настройки и запуска общедоступного рабочего процесса {#example-public-workflow}

Конфигурация:

<!-- source: ru/_includes/sourcecraft/ci-cd/public-workflow-config-example.md -->
```yaml
workflows:
  professor-test:
    inputs:
      STUDENTREPO:
        type: string
        required: true
      TASK:
        type: string
        required: true
    settings:
      shared: true
    tasks:
      - name: professor-task
        cubes:
          - name: professor-cube
            script:
              - |
              	mkdir -p artifacts
                echo "Repo: ${{ inputs.STUDENTREPO }}" > artifacts/professor-output
                echo "Task: ${{ inputs.TASK }}" >> artifacts/professor-output
            artifacts:
              paths:
                - artifacts/professor-output

on:
  push: professor-test
```
<!-- endsource: ru/_includes/sourcecraft/ci-cd/public-workflow-config-example.md -->

Запуск рабочего процесса другим участником организации:

{% list tabs group=instructions %}

- CI/CD {#ci-cd}

  <!-- source: ru/_includes/sourcecraft/ci-cd/public-workflow-run-example-ci.md -->
  ```yaml
  workflows:
    check-solution:
      tasks:
        - name: main
          cubes:
            - name: run-shared-workflow
              image: cr.yandex/sourcecraft/cubes/shared-workflows:latest
              env:
                ORG_SLUG: professor-org
                REPO_SLUG: professor-repo
                WORKFLOW_NAME: professor-test
                WORKFLOW_VALUES: '[{"name": "STUDENTREPO", "value": "student"}, {"name": "TASK", "value": "task-1"}]'
                TASK_NAME: professor-task
                CUBE_NAME: professor-cube
                ARTIFACT_LOCAL_PATH: artifacts/professor-output
              artifacts:
                paths:
                  - artifacts/output

  on:
    push: check-solution
  ```
  <!-- endsource: ru/_includes/sourcecraft/ci-cd/public-workflow-run-example-ci.md -->

- API {#api}

  <!-- source: ru/_includes/sourcecraft/ci-cd/public-workflow-run-example-api.md -->
  1. [Создайте](https://sourcecraft.dev/portal/docs/ru/sourcecraft/security/pat.md#create) персональный токен (PAT).
  1. Запустите общедоступный рабочий процесс, передав в теле запроса параметр `"shared": true`:

      ```bash
      export PAT=<персональный_токен>

      cat > body.json << 'EOF'
      {
        "workflows": [
          {
            "name": "professor-test",
            "values": [
              {
                "name": "STUDENTREPO",
                "value": "student"
              },
              {
                "name": "TASK",
                "value": "task-1"
              }
            ]
          }
        ],
        "shared": true
      }
      EOF

      curl \
        --request POST \
        --header "Authorization: Bearer $PAT" \
        --data '@body.json' \
        --url "https://api.sourcecraft.tech/<слаг_организации>/<слаг_репозитория>/cicd/runs"
      ```

      {% note warning %}

      Запустить общедоступный рабочий процесс можно только в основной ветке репозитория и только с конфигурацией CI/CD из основной ветки. Передача в теле запроса параметров `head` и `config_revision` приведет к ошибке выполнения.

      {% endnote %}

      Сохраните значение слага запуска (`slug`), полученное в ответе.

  1. Получите статус запущенного рабочего процесса:

      ```bash
      curl \
        --request GET \
        --header "Authorization: Bearer $PAT" \
        --url "https://api.sourcecraft.tech/<слаг_организации>/<слаг_репозитория>/cicd/runs/<слаг_запуска>"
      ```

      {% note info %}

      Доступ к статусу и артефактам общедоступного рабочего процесса возможен только с тем же [персональным токеном (PAT)](https://sourcecraft.dev/portal/docs/ru/sourcecraft/security/pat.md), с которым он был запущен.

      {% endnote %}

  1. Получите артефакты запущенного рабочего процесса:

      ```bash
      curl \
        --request GET \
        --header "Authorization: Bearer $PAT" \
        --url "https://api.sourcecraft.tech/<слаг_организации>/<слаг_репозитория>/cicd/artifacts/<слаг_запуска>/professor-test/professor-task/professor-cube"
      ```

  Подробнее на странице [Работа с REST API SourceCraft](https://sourcecraft.dev/portal/docs/ru/sourcecraft/operations/api-start.md).
  <!-- endsource: ru/_includes/sourcecraft/ci-cd/public-workflow-run-example-api.md -->

{% endlist %}

## runs_on {#runs-on}

<!-- source: ru/_includes/sourcecraft/ci-cd/runs-on.md -->
В поле `runs_on` указывается перечень меток [воркера](https://sourcecraft.dev/portal/docs/ru/sourcecraft/concepts/workers.md), на котором будут запущены задания рабочего процесса. Поддерживаются следующие типы меток:
* runtime-метка — тип воркера. Возможные значения:
  * `compute` — [облачный воркер](https://sourcecraft.dev/portal/docs/ru/sourcecraft/concepts/workers.md#cloud-workers). Значение по умолчанию.
  * `serverless` — [serverless-воркер](https://sourcecraft.dev/portal/docs/ru/sourcecraft/concepts/workers.md#serverless-workers). [Примеры](https://sourcecraft.dev/portal/docs/ru/sourcecraft/concepts/workers.md#serverless-workflow-example).
  * `self-hosted` — [пользовательский (self-hosted) воркер](https://sourcecraft.dev/portal/docs/ru/sourcecraft/concepts/workers.md#self-hosted-workers).

  {% note warning %}

  В поле `runs_on` не может быть указано более одной runtime-метки. Если runtime-метка не указана, по умолчанию применяется `compute`.

  {% endnote %}

* [метки пользовательских воркеров](https://sourcecraft.dev/portal/docs/ru/sourcecraft/ci-cd-ref/self-hosted-tags.md).

  <!-- source: ru/_includes/sourcecraft/ci-cd/self-hosted-tag-note.md -->
  {% note info %}

  В строковых значениях метки может содержаться ограниченный набор символов: буквы латинского алфавита (`a-zA-Z`), а также `-`, `.` и `_`.

  Метка `self-hosted` проставляется в параметрах пользовательского воркера автоматически. Ее не надо добавлять дополнительно в поле `tags` файла `config.yaml`.

  {% endnote %}
  <!-- endsource: ru/_includes/sourcecraft/ci-cd/self-hosted-tag-note.md -->
<!-- endsource: ru/_includes/sourcecraft/ci-cd/runs-on.md -->

##### Пример рабочего процесса с двумя заданиями, приведенными в разном формате {#examples-two-tasks-diff-formats}

Одно задание рабочего процесса размещено внутри блока `workflows`, второе — вне его. В задании `my-task` приведен пример использования зависимостей между кубиками, подробнее на странице [Кубики (cubes)](https://sourcecraft.dev/portal/docs/ru/sourcecraft/ci-cd-ref/cubes.md).

```yaml
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
...
```

##### Пример с двумя различными рабочими процессами, запускаемыми в зависимости от типа события {#examples-two-processes-diff-types}

```yaml
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.
```

##### Пример рабочего процесса с использованием секретов и переменных, в том числе предопределенных {#workflow-with-vars}

<!-- source: ru/_includes/sourcecraft/ci-cd/config-with-vars.md -->
```yaml
# Здесь определяются переменные с глобальной областью видимости,
# они будут переданы во все кубики всех заданий во всех рабочих процессах
env:
  GLOBAL_VAR: global_var
  GLOBAL_SECRET: ${{ secrets.<название_секрета> }}

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.<название_секрета> }}
              # Переиспользование переменных из глобальной области видимости, 
              # например GLOBAL_VAR и GLOBAL_SECRET
              LOCAL_VAR: ${{ env.<глобальная_переменная_1> }}
              LOCAL_SECRET: ${{ env.<глобальная_переменная_2> }}
              # Переиспользование переменных из области видимости рабочего
              # процесса, например WORKFLOW_VAR
              LOCAL_VAR2: ${{ env.<переменная_рабочего_процесса> }}

            script:
              - echo "$TASK_ENV_VAR"
              - echo "$MULTILINE_VAR"
              - echo "$CUBE_ENV_VAR"
              - echo "$SECRET_VAR"
              - echo "$WORKFLOW_VAR"
              - echo "$LOCAL_VAR"
              - echo "$LOCAL_VAR2"
              - echo "$LOCAL_SECRET"

          - 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"
              - echo "$GLOBAL_VAR"

      - name: my-task-2
        cubes:
          - name: my-cube-3
            script:
              - echo "$WORKFLOW_VAR"
              - echo "$GLOBAL_VAR"
```
<!-- endsource: ru/_includes/sourcecraft/ci-cd/config-with-vars.md -->

## inputs {#inputs}

В блоке `inputs` указываются параметры для ручного запуска рабочего процесса или запуска по расписанию. 

В общем виде блок выглядит следующим образом:

```yaml
inputs:
  <название_параметра>:
    type: <тип_параметра>
    required: <обязательность_параметра>
    description: <описание_параметра>
    default: <значение_по_умолчанию>
    options: <возможные_значения_для_типа_choice>
```

<!-- source: ru/_includes/sourcecraft/ci-cd/input-configs.md -->
Где:
* `type` — тип параметра. Возможные значения:
    * `string` — строка.
    * `bool` — логическое значение `true` или `false`.
    * `choice` — выбор из предустановленных значений. 

    {% note info %}

    Если в конфигурации указан параметр `options`, необязательно задавать параметр `type: choice`.

    Если тип не указан и нет параметра `options`, то тип параметра по умолчанию — `string`.

    {% endnote %}

* `required` — обязательность параметра. Возможные значения: `true` или`false`.
* `description` — произвольное описание параметра, которое будет отображаться в интерфейсе SourceCraft при ручном запуске рабочего процесса.
* `default` — значение параметра по умолчанию. Может быть указано, в том числе, если параметр является обязательным.
* `options` — возможные значения для типа параметра `choice`.
<!-- endsource: ru/_includes/sourcecraft/ci-cd/input-configs.md -->

<!-- source: ru/_includes/sourcecraft/ci-cd/inputs-note.md -->
{% note tip %}

В разделе ![image](../../_assets/console-icons/terminal-line.svg) **Автоматизации** **→** ![image](../../_assets/console-icons/arrows-3-rotate-right.svg) **CI/CD** репозитория, а также на странице конкретного запуска для каждого [рабочего процесса](https://sourcecraft.dev/portal/docs/ru/sourcecraft/concepts/ci-cd.md#workflows), запущенного вручную, отображаются значения параметров.

Таким образом, вы можете отличать друг от друга рабочие процессы, запущенные с разными параметрами.

{% cut "Пример отображения в интерфейсе" %}

![image](../../_assets/sourcecraft/manual-workflow-configs.png)

{% endcut %}

{% endnote %}
<!-- endsource: ru/_includes/sourcecraft/ci-cd/inputs-note.md -->

Примеры использования блока `inputs`:
* [При ручном запуске](https://sourcecraft.dev/portal/docs/ru/sourcecraft/operations/run-workflow-manually.md#run-with-params)
* [При запуске по расписанию](https://sourcecraft.dev/portal/docs/ru/sourcecraft/ci-cd-ref/on.md#inputs-schedule)

## checkout {#checkout}

<!-- source: ru/_includes/sourcecraft/ci-cd/checkout.md -->
В блоке `checkout` указываются настройки автоматического клонирования репозитория, в котором запускается рабочий процесс. Если блок задан как на уровне рабочего процесса, так и на уровне задания, то для задания применяются его собственные настройки.

Поддерживаются следующие параметры:
* `enabled` — признак автоматического клонирования репозитория перед выполнением задания. Значение по умолчанию — `true`. Если установлено значение `false`, перед стартом задания репозиторий не клонируется. В этом случае при необходимости получите содержимое репозитория самостоятельно в одном из кубиков задания.

  {% note info %}

  Значение параметра доступно в [предопределенной переменной окружения](https://sourcecraft.dev/portal/docs/ru/sourcecraft/ci-cd-ref/predefined-variables.md) `SOURCECRAFT_CHECKOUT_ENABLED`.

  {% endnote %}

* `fetch_depth` — количество последних записей истории, которые будут загружены при клонировании репозитория. По умолчанию параметр не задан, и репозиторий клонируется на всю глубину истории.

  {% note tip %}

  Используйте этот параметр, чтобы ускорить загрузку данных в задание.

  {% endnote %}

* `remove_credentials` — признак удаления ключа авторизации из файла `.git/config` после клонирования репозитория. Значение по умолчанию — `false`. Установите значение `true`, если требуется запретить дальнейшие операции с удаленным репозиторием из кубиков задания под аутентификацией CI/CD.
* `retry` — настройки автоматического перезапуска клонирования репозитория. Параметр задается в одном из следующих форматов:

  * Число — максимальное количество повторных попыток клонирования. Подробнее в подразделе [Перезапуск по умолчанию](https://sourcecraft.dev/portal/docs/ru/sourcecraft/ci-cd-ref/cubes.md#retry-default).
  * Структура с условиями перезапуска. Подробнее в подразделе [Перезапуск с условиями](https://sourcecraft.dev/portal/docs/ru/sourcecraft/ci-cd-ref/cubes.md#retry-conditions).

  В отличие от параметра `retry` кубика, настройка влияет только на перезапуск клонирования репозитория. По умолчанию автоматический перезапуск клонирования отключен.
<!-- endsource: ru/_includes/sourcecraft/ci-cd/checkout.md -->

{% note info %}

Настройки `checkout` можно также задать на уровне отдельного [задания](https://sourcecraft.dev/portal/docs/ru/sourcecraft/ci-cd-ref/tasks.md#checkout). В этом случае настройки задания имеют приоритет над настройками рабочего процесса.

{% endnote %}

##### Пример настройки клонирования репозитория на уровне рабочего процесса {#workflow-checkout-example}

```yaml
workflows:
  my-workflow:
    checkout:
      retry: 2
      enabled: true
      remove_credentials: false
      fetch_depth: 10
```

#### Полезные ссылки {#see-also}

* [События-триггеры (on)](https://sourcecraft.dev/portal/docs/ru/sourcecraft/ci-cd-ref/on.md)
* [Задания (tasks)](https://sourcecraft.dev/portal/docs/ru/sourcecraft/ci-cd-ref/tasks.md)
* [Непрерывная интеграция и непрерывное развертывание в SourceCraft](https://sourcecraft.dev/portal/docs/ru/sourcecraft/concepts/ci-cd.md)
* [Настроить CI/CD в репозитории SourceCraft](https://sourcecraft.dev/portal/docs/ru/sourcecraft/operations/ci-cd.md)