---
metadata:
  - name: generator
    content: Diplodoc Platform v5.54.2
alternate:
  - https://sourcecraft.dev/portal/docs/en/sourcecraft/operations/public-workflows.md
  - https://sourcecraft.dev/portal/docs/ru/sourcecraft/operations/public-workflows.md
  - href: ru/sourcecraft/operations/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/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 -->

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

Чтобы настроить общедоступный рабочий процесс:
1. [Создайте общедоступный рабочий процесс](#create).
1. [Запустите общедоступный рабочий процесс](#run).

## Создать общедоступный рабочий процесс {#create}

{% note info %}

Эта часть инструкции предназначена для пользователей, создающих общедоступный рабочий процесс, с минимальной [ролью](https://sourcecraft.dev/portal/docs/ru/sourcecraft/security/index.md#src-repositories-developer) `Разработчик репозитория`.

{% endnote %}

1. Если у вас еще нет репозитория, [создайте](https://sourcecraft.dev/portal/docs/ru/sourcecraft/operations/repo-create.md) его.
1. [Добавьте](https://sourcecraft.dev/portal/docs/ru/sourcecraft/operations/add-file-repo.md) в ветку `main` репозитория файл `.sourcecraft/ci.yaml` с содержимым вашего рабочего процесса, например:

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

    Где параметр `settings:shared: true` — разрешение запускать рабочий процесс всем участникам организации.

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

## Запустить общедоступный рабочий процесс {#run}

{% note info %}

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

{% endnote %}

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

  1. Если у вас еще нет репозитория, [создайте](https://sourcecraft.dev/portal/docs/ru/sourcecraft/operations/repo-create.md) его.
  1. [Добавьте](https://sourcecraft.dev/portal/docs/ru/sourcecraft/operations/add-file-repo.md) в ветку `main` репозитория файл `.sourcecraft/ci.yaml` с содержимым рабочего процесса, который будет запускать публичный рабочий процесс, например:

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

      В соответствии с конфигурацией CI/CD рабочий процесс запустится автоматически при внесении изменений в ветку. Также вы можете [запустить](https://sourcecraft.dev/portal/docs/ru/sourcecraft/operations/run-workflow-manually.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 -->

  1. Проверьте выполнение CI-процесса:
      1. На странице репозитория в разделе ![image](../../_assets/console-icons/terminal-line.svg) **Автоматизации** перейдите в секцию ![image](../../_assets/console-icons/arrows-3-rotate-right.svg) **CI/CD**.
      1. Откройте запущенный рабочий процесс.

          На открывшейся странице будут отображены задания рабочего процесса, шаги задания — кубики, а также статусы и результаты выполнения.
      1. В правом нижнем углу кубика `run-shared-workflow` нажмите ![image](../../_assets/console-icons/file-text.svg).
      1. Дождитесь завершения рабочего процесса.

- 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/concepts/public-workflows.md)
* [Настроить CI/CD в репозитории SourceCraft](https://sourcecraft.dev/portal/docs/ru/sourcecraft/operations/ci-cd.md)
* [Справочник CI/CD](https://sourcecraft.dev/portal/docs/ru/sourcecraft/ci-cd-ref/index.md)
