Общедоступные рабочие процессы в SourceCraft
Рабочие процессы SourceCraft можно сделать доступными для запуска всем участникам организации. Доступ к ним можно выдать даже при отсутствии ролей в репозитории, в котором размещен рабочий процесс, и доступа к его секретам.
Участник, запускающий такой общедоступный рабочий процесс, получает возможность передать в него параметры inputs, следить за прогрессом выполнения и получать данные на выходе, в том числе артефакты.
Например, эта функциональность может пригодиться для проверки заданий в тестовых репозиториях студентов. Также это полезно для предоставления пользователям доступа к части CI-процессов без назначения им дополнительных ролей.
Конфигурация общедоступного рабочего процесса
Рабочий процесс становится общедоступным, если в его конфигурации в файле .sourcecraft/ci.yaml в ветке по умолчанию задан параметр settings: shared: true, например:
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
Важно
Все общедоступные запуски рабочего процесса осуществляются от имени пользователя, который последним добавил изменения в файле .sourcecraft/ci.yaml в основной ветке.
Если файл .sourcecraft/ci.yaml в основной ветке был обновлен напрямую через git push origin main с использованием персонального токена (PAT) с ограниченным временем жизни, соответственно, рабочий процесс будет общедоступным только в течение этого времени жизни.
Запуск общедоступного рабочего процесса
Запустить общедоступный рабочий процесс можно изнутри другого рабочего процесса с помощью специального кубика cr.yandex/sourcecraft/cubes/shared-workflows:latest или с помощью API.
Во входные параметры запуска передаются:
-
слаг репозитория, в котором находится рабочий процесс;
-
слаг организации;
-
название рабочего процесса;
-
(опционально) параметры inputs, например ссылка на клонирование репозитория, из которого происходит запуск;
-
(опционально) указание на результат выполнения — artifacts.
Важно
Чтобы получить артефакты из общедоступного рабочего процесса, передайте названия задания и кубика, а также локальный путь артефакта в переменные окружения кубика
cr.yandex/sourcecraft/cubes/shared-workflows:latestили в отдельном вызове API.
Примеры:
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
-
Создайте персональный токен (PAT).
-
Запустите общедоступный рабочий процесс, передав в теле запроса параметр
"shared": true: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"Важно
Запустить общедоступный рабочий процесс можно только в основной ветке репозитория и только с конфигурацией CI/CD из основной ветки. Передача в теле запроса параметров
headиconfig_revisionприведет к ошибке выполнения.Сохраните значение слага запуска (
slug), полученное в ответе. -
Получите статус запущенного рабочего процесса:
curl \ --request GET \ --header "Authorization: Bearer $PAT" \ --url "https://api.sourcecraft.tech/<слаг_организации>/<слаг_репозитория>/cicd/runs/<слаг_запуска>"Примечание
Доступ к статусу и артефактам общедоступного рабочего процесса возможен только с тем же персональным токеном (PAT), с которым он был запущен.
-
Получите артефакты запущенного рабочего процесса:
curl \ --request GET \ --header "Authorization: Bearer $PAT" \ --url "https://api.sourcecraft.tech/<слаг_организации>/<слаг_репозитория>/cicd/artifacts/<слаг_запуска>/professor-test/professor-task/professor-cube"
Подробнее см. на странице Работа с REST API SourceCraft.