---
metadata:
  - name: generator
    content: Diplodoc Platform v5.54.2
alternate:
  - https://sourcecraft.dev/portal/docs/en/sourcecraft/concepts/public-workflows.md
  - https://sourcecraft.dev/portal/docs/ru/sourcecraft/concepts/public-workflows.md
  - href: ru/sourcecraft/concepts/public-workflows.md
    type: text/markdown
    title: Markdown version
  - href: ../../llms.txt
    type: text/markdown
    title: llms.txt
title: Общедоступные рабочие процессы в SourceCraft
description: Как сделать рабочие процессы CI/CD общедоступными для запуска всем участникам организации в SourceCraft.
---
> **Documentation Index:** Fetch the complete configuration index at https://sourcecraft.dev/portal/docs/ru/llms.txt


# Общедоступные рабочие процессы в SourceCraft

<!-- source: ru/_includes/sourcecraft/ci-cd/public-workflow-intro.md -->
[Рабочие процессы](https://sourcecraft.dev/portal/docs/ru/sourcecraft/concepts/ci-cd.md#workflows) SourceCraft можно сделать доступными для запуска всем участникам [организации](https://sourcecraft.dev/portal/docs/ru/sourcecraft/concepts/index.md#org). Доступ к ним можно выдать даже при отсутствии [ролей](https://sourcecraft.dev/portal/docs/ru/sourcecraft/security/index.md#roles-list) в репозитории, в котором размещен рабочий процесс, и доступа к его [секретам](https://sourcecraft.dev/portal/docs/ru/sourcecraft/concepts/index.md#secrets).

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

Например, эта функциональность может пригодиться для проверки заданий в тестовых репозиториях студентов. Также это полезно для предоставления пользователям доступа к части CI-процессов без назначения им дополнительных ролей.

<iframe width="640" height="360" src="https://runtime.strm.yandex.ru/player/video/vplvp7vkj6yzv4bcgv6o?autoplay=0&mute=0" allow="autoplay; fullscreen; picture-in-picture; encrypted-media" frameborder="0" scrolling="no"></iframe>
<!-- endsource: ru/_includes/sourcecraft/ci-cd/public-workflow-intro.md -->

## Конфигурация общедоступного рабочего процесса {#configuration}

Рабочий процесс становится общедоступным, если в его конфигурации в файле `.sourcecraft/ci.yaml` в ветке по умолчанию задан параметр `settings: shared: true`, например:

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

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

Все общедоступные запуски рабочего процесса осуществляются от имени пользователя, который последним добавил изменения в файле `.sourcecraft/ci.yaml` в основной ветке.

Если файл `.sourcecraft/ci.yaml` в основной ветке был обновлен напрямую через `git push origin main` с использованием [персонального токена (PAT)](https://sourcecraft.dev/portal/docs/ru/sourcecraft/security/pat.md) с ограниченным временем жизни, соответственно, рабочий процесс будет общедоступным только в течение этого времени жизни.

{% endnote %}
<!-- endsource: ru/_includes/sourcecraft/ci-cd/public-workflow-user-warning.md -->

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

Настройка и просмотр конфигураций репозитория доступны в интерфейсе SourceCraft в разделе ![image](../../_assets/console-icons/gear.svg) **Настройки репозитория** в секции ![image](../../_assets/console-icons/nut-hex.svg) **Конфигурации**. Подробнее в инструкции [Настроить конфигурации репозитория в виде кода](https://sourcecraft.dev/portal/docs/ru/sourcecraft/operations/configuration-edit.md).

{% endnote %}
<!-- endsource: ru/_includes/sourcecraft/configuration-tip.md -->

## Запуск общедоступного рабочего процесса {#run}

<!-- source: ru/_includes/sourcecraft/ci-cd/public-workflow-run-intro.md -->
Запустить общедоступный рабочий процесс можно изнутри другого рабочего процесса с помощью специального [кубика](https://sourcecraft.dev/portal/docs/ru/sourcecraft/concepts/ci-cd.md#cubes) `cr.yandex/sourcecraft/cubes/shared-workflows:latest` или с помощью API. 

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

  {% note warning %}

  Чтобы получить артефакты из общедоступного рабочего процесса, передайте названия задания и кубика, а также локальный путь артефакта в переменные окружения кубика `cr.yandex/sourcecraft/cubes/shared-workflows:latest` или в отдельном вызове API.

  {% endnote %}
<!-- endsource: ru/_includes/sourcecraft/ci-cd/public-workflow-run-intro.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 -->

  <!-- source: ru/_includes/sourcecraft/ci-cd/unpack-artifact-note.md -->
  {% note info %}

  Чтобы распаковать артефакт, представляющий собой папку или tar-архив, укажите переменную окружения `UNPACK_ARTIFACT: true`. Тогда скачанный артефакт `artifacts/output` распакуется в папку `artifacts` командой `tar -xf artifacts/output -C artifacts`.

  {% endnote %}
  <!-- endsource: ru/_includes/sourcecraft/ci-cd/unpack-artifact-note.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 %}

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

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