---
metadata:
  - name: generator
    content: Diplodoc Platform v5.57.3
alternate:
  - https://sourcecraft.dev/portal/docs/en/sourcecraft/ci-cd-ref/tasks.md
  - https://sourcecraft.dev/portal/docs/ru/sourcecraft/ci-cd-ref/tasks.md
  - href: https://sourcecraft.dev/portal/docs/ru/sourcecraft/ci-cd-ref/tasks.md
    type: text/markdown
    title: Markdown version
  - href: https://sourcecraft.dev/portal/docs/ru/llms.txt
    type: text/markdown
    title: llms.txt
title: Задания (tasks)
description: 'Параметры заданий в CI/CD SourceCraft: зависимости, настройки и переиспользование.'
---
> **Documentation Index:** Fetch the complete configuration index at https://sourcecraft.dev/portal/docs/ru/llms.txt


# Задания (tasks)

<!-- source: ru/_includes/sourcecraft/ci-cd/tasks-description.md -->
В блоке `tasks` определяется перечень _заданий_, которые будут выполняться в [рабочем процессе](https://sourcecraft.dev/portal/docs/ru/sourcecraft/concepts/ci-cd.md#workflows).

Каждое задание содержит в себе набор минимальных логических действий — [кубиков](https://sourcecraft.dev/portal/docs/ru/sourcecraft/concepts/ci-cd.md#cubes). Результатом задания является выполнение всех кубиков.

{% note info %}

Все кубики одного задания запускаются на одной и той же виртуальной машине (воркере). Поэтому если один кубик изменит окружение воркера, например, установит пакет, создаст или удалит файл и т. д., это окружение останется для всех последующих кубиков, которые выполняются в рамках одного задания. Например, в первом кубике устанавливается пакет `runtime` для языка Go, во втором выполняется команда `go build`, а в следующем — `go test`. Подробнее о наследовании окружения на странице [Кубики (cubes)](https://sourcecraft.dev/portal/docs/ru/sourcecraft/ci-cd-ref/cubes.md).

Если кубики запущены в разных заданиях, то они гарантированно будут исполняться на разных воркерах.

{% endnote %}

По умолчанию задание начинается с клонирования репозитория.

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

В заданиях и кубиках вы можете использовать [переменные окружения](https://sourcecraft.dev/portal/docs/ru/sourcecraft/concepts/ci-cd.md#variables), а также [секреты](https://sourcecraft.dev/portal/docs/ru/sourcecraft/concepts/index.md#secrets).
<!-- endsource: ru/_includes/sourcecraft/ci-cd/tasks-description.md -->

Вы можете задать настройки конкретного задания как внутри блока `workflows:tasks`, так и в отдельном блоке `tasks` и сослаться на него из блока `workflows:tasks`. Общие параметры для обоих вариантов описываются одинаково, однако параметры `uses` и `approval` можно использовать только внутри `workflows:tasks`.

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

  {% note tip %}

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

  {% endnote %}


* `needs` — список заданий, которые должны быть выполнены до выполнения текущего. Задание будет передано воркеру на исполнение только после того, как все зависимости успешно завершатся. По умолчанию каждое задание не имеет зависимостей и может быть исполнено параллельно с другими заданиями рабочего процесса. Подробнее в разделе [Пример использования зависимостей](#tasks-needs).

  <!-- source: ru/_includes/sourcecraft/tasks-needs-restrictions.md -->
  {% note warning %}

  Параметр `needs` можно использовать только внутри блока `workflows:tasks`. Не допускается использовать в отдельном блоке `tasks`.

  В поле `needs` можно сослаться только на задания рабочего процесса, внутри которого выполняется текущее задание. Циклические зависимости не допускаются.

  {% endnote %}
  <!-- endsource: ru/_includes/sourcecraft/tasks-needs-restrictions.md -->

* `approval` — настройки [ручного подтверждения](#approval) выполнения задания. Параметр можно использовать только в заданиях внутри блока `workflows:tasks`.
* `outputs` — выходные значения задания, которые можно передать зависимым заданиям. Значения задаются выражениями, которые ссылаются на выходные значения кубиков или заданий. Подробнее на странице [Передача данных между заданиями CI/CD SourceCraft](https://sourcecraft.dev/portal/docs/ru/sourcecraft/ci-cd-ref/data-between-tasks.md).
* `runs_on` — [метки воркера](#runs-on), на котором будут запущены задания рабочего процесса. По умолчанию будет выставлен параметр из `workflow:runs_on`.
* `checkout` — [настройки](#checkout) автоматического клонирования репозитория перед выполнением задания. По умолчанию будут применены настройки из `workflow:checkout`.

## 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 -->

##### Пример задания внутри блока workflows:tasks {#task-inside}

```yaml
workflows:
  my-workflow:
    tasks:
      - name: my-task
        cubes:
    ...
```

##### Пример задания в отдельном блоке tasks {#task-out}

```yaml
tasks:
  - name: common-task

workflows:
  my-workflow:
    tasks:
      - common-task
```

##### Пример нескольких заданий в отдельном блоке tasks {#many-tasks-out}

```yaml
tasks:
  - name: common-task-1
  - name: common-task-2

workflows:
  my-workflow:
    tasks:
      - [common-task-1, common-task-2]
```

##### Пример комбинированного варианта указания заданий {#many-tasks-combined}

```yaml
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-needs}

```yaml
tasks:
  # Задание, которое выполняется без зависимостей.
  - name: sample-task
    cubes:
      - name: sample-cube
        script:
          - echo "Hello, World"
          - sleep 1

workflows:
  sample-workflow:
    tasks:
      # Ссылка на задание-оригинал tasks:sample-task.
      - sample-task
      - name: another-task
        # Задание another-task будет выполнено только после
        # успешного завершения задания sample-task.
        needs: [sample-task]
        script:
          - echo "Here we go again"
          - sleep 1
      - name: yet-another-task
        # Задание yet-another-task будет выполнено только после
        # успешного завершения заданий sample-task и another-task.
        needs: [sample-task, another-task]
        script:
          - echo "Goodbye, World"
          - sleep 1
```

## approval {#approval}

<!-- source: ru/_includes/sourcecraft/ci-cd/approval-results.md -->
Если ручное подтверждение включено, после запуска CI/CD задание создается в статусе `Created` и помещается в очередь ожидания. Пока зависимости, заданные в параметре `needs`, выполняются, задание остается в этом статусе. После успешного выполнения зависимостей или при их отсутствии задание переходит в статус `AwaitingApproval`. С этого момента начинается отсчет времени ожидания решения.

Возможные результаты ожидания:

* **Подтверждение** (`approve`) — задание переносится в очередь выполнения и запускается в обычном режиме. В сведениях о решении сохраняются результат `approved`, автор и комментарий.
* **Отклонение** (`reject`) — задание получает статус `Rejected` и удаляется из очереди ожидания. В сведениях о решении сохраняются результат `rejected`, информация об авторе и комментарий. Статус `Rejected` распространяется на рабочий процесс и весь запуск CI/CD.
* **Истечение времени ожидания** (`expire`) — если решение не принято вовремя, задание получает статус `Canceled`, а в сведениях о решении сохраняется результат `expired`. Статус `Canceled` распространяется на рабочий процесс и весь запуск CI/CD.

{% note info %}

При работе с ручным подтверждением учитывайте следующие ограничения:
* Решение по заданию принимается один раз. Повторная попытка отклоняется с результатом `ALREADY_DECIDED`.
* Если задано `require_comment: true`, попытка принять решение без комментария отклоняется с результатом `COMMENT_REQUIRED`.
* При отмене запуска CI/CD задание в статусе `AwaitingApproval` также получает статус `Canceled`.
* Если одна из зависимостей задания завершается неуспешно, задание получает статус `Canceled` и удаляется из очереди ожидания.

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

<!-- source: ru/_includes/sourcecraft/ci-cd/approval-description.md -->
Задание с ручным подтверждением не запускается автоматически после успешного выполнения зависимостей, а ожидает решения пользователя: подтвердить (`approve`) или отклонить (`reject`) выполнение. Такой механизм позволяет, например, проверить результат перед развертыванием в продуктовом окружении.

{% note warning %}

Принять решение в интерфейсе SourceCraft может пользователь репозитория с ролью не ниже [Разработчик репозитория](https://sourcecraft.dev/portal/docs/ru/sourcecraft/security/index.md#src-repositories-developer).

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

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

Параметр `approval` задает настройки ручного подтверждения выполнения задания внутри блока `workflows:tasks`. Его нельзя использовать в заданиях верхнего уровня, описанных в отдельном блоке `tasks` вне `workflows`.

{% endnote %}

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

* `approval: true` — включить ручное подтверждение со временем ожидания по умолчанию — 24 часа.
* `approval: false` — явно отключить ручное подтверждение. Эквивалентно отсутствию параметра `approval`.
* `approval: {}` — включить ручное подтверждение с параметрами по умолчанию.
* `approval: { timeout: ..., note: ..., require_comment: ... }` — включить ручное подтверждение с явно заданными параметрами.

В блоке `approval` поддерживаются следующие параметры. Все параметры опциональны:

* `timeout` — максимальное время ожидания решения, например `1h` или `2h`. Значение по умолчанию — `24h`. Время отсчитывается с момента перехода задания в статус `AwaitingApproval`. По истечении этого времени задание автоматически отменяется.
* `note` — инструкция для пользователя, который принимает решение. Задается строкой длиной до 1000 символов и отображается в интерфейсе. По умолчанию не задана.
* `require_comment` — требование добавить комментарий при подтверждении или отклонении задания. Задается логическим значением. Значение по умолчанию — `false`. Если установлено значение `true`, принять решение можно только с комментарием. Максимальная длина комментария — 2000 символов, не зависит от значения `require_comment`.
<!-- endsource: ru/_includes/sourcecraft/ci-cd/approval.md -->

Пошаговая инструкция приведена на странице [Настроить ручное подтверждение заданий CI/CD в SourceCraft](https://sourcecraft.dev/portal/docs/ru/sourcecraft/operations/task-approval.md).

##### Пример ручного подтверждения со временем ожидания по умолчанию {#approval-examples}

```yaml
workflows:
  release:
    tasks:
      - name: publish
        approval: true
        cubes:
          - name: publish-cube
            script:
              - echo "publish"
```

##### Пример задания с зависимостью и ручным подтверждением {#approval-needs-example}

```yaml
workflows:
  deploy:
    tasks:
      - name: build
        cubes:
          - name: build-cube
            script:
              - echo "build"
      - name: deploy
        needs: [build]
        approval:
          timeout: 1h
        cubes:
          - name: deploy-cube
            script:
              - echo "deploy"
```

##### Пример ручного подтверждения с обязательным комментарием и инструкцией {#approval-comment-example}

<!-- source: ru/_includes/sourcecraft/ci-cd/approval-example.md -->
```yaml
workflows:
  deploy:
    tasks:
      - name: build
        cubes:
          - name: build-cube
            script:
              - echo "build"
      - name: deploy-prod
        needs: [build]
        approval:
          timeout: 2h
          note: "Проверьте дашборды тестового окружения"
          require_comment: true
        cubes:
          - name: deploy-cube
            script:
              - echo "deploy"
```

В этом примере после успешного выполнения задания `build` задание `deploy-prod` будет ожидать решения пользователя до двух часов. Для подтверждения или отклонения выполнения потребуется комментарий. Команды `echo` иллюстрируют порядок выполнения заданий: замените их командами сборки и развертывания вашего приложения.
<!-- endsource: ru/_includes/sourcecraft/ci-cd/approval-example.md -->

##### Пример явного отключения ручного подтверждения {#approval-disabled-example}

```yaml
workflows:
  deploy:
    tasks:
      - name: deploy-forced
        approval: false
        cubes:
          - name: deploy-cube
            script:
              - echo "deploy"
```

## 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/workflows.md#checkout). Если блок задан и на уровне рабочего процесса, и на уровне задания, то для задания применяются его собственные настройки.

{% endnote %}

##### Пример настройки клонирования репозитория на уровне задания {#tasks-checkout-example}

```yaml
tasks:
  - name: ci-build
    checkout:
      retry: 2
      enabled: true
      remove_credentials: false
      fetch_depth: 10
```


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

* [Переиспользование параметров рабочих процессов и кубиков в CI/CD SourceCraft](https://sourcecraft.dev/portal/docs/ru/sourcecraft/ci-cd-ref/reuse.md)
* [Передача переменных окружения от одного кубика к другому в CI/CD SourceCraft](https://sourcecraft.dev/portal/docs/ru/sourcecraft/ci-cd-ref/env-vars-between-cubes.md)
* [Передача данных между заданиями CI/CD SourceCraft](https://sourcecraft.dev/portal/docs/ru/sourcecraft/ci-cd-ref/data-between-tasks.md)
* [Кубики (cubes)](https://sourcecraft.dev/portal/docs/ru/sourcecraft/ci-cd-ref/cubes.md)
* [События-триггеры (on)](https://sourcecraft.dev/portal/docs/ru/sourcecraft/ci-cd-ref/on.md)
* [Рабочие процессы (workflows)](https://sourcecraft.dev/portal/docs/ru/sourcecraft/ci-cd-ref/workflows.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)
* [Управлять секретами в репозитории SourceCraft](https://sourcecraft.dev/portal/docs/ru/sourcecraft/operations/secrets.md)
* [Работа с переменными окружения в SourceCraft](https://sourcecraft.dev/portal/docs/ru/sourcecraft/operations/variables.md)
