Решение:
Это действительно больше обходного пути, но его можно сделать довольно плавным, не раздутый ваш config.yml.
Шаги высокого уровня:
- Добавить параметр для остановки вашего рабочего процесса по умолчанию (вам не нужно останавливать запланированные рабочие процессы!)
- Добавить рабочий процесс для каждого задание, которое вы хотите вызвать по API (не волнуйтесь, это 1 строка на задание)
- Добавить пользовательский параметр для каждого задания (опять же, по одной строке на задание)
- (необязательно) добавить некоторые обобщенные c или пользовательские параметры, которые всегда будут ожидать задания (на самом деле не работает для заданий, которые также должны выполняться как часть рабочего процесса по умолчанию, но для заданий, запускаемых только через API, это нормально)
Область действия:
- Работает без параметров
- Возможно использование с общими c параметрами (или ограниченным количеством специфицированных c единиц)
- Это решение не это действительно не работает, если вам нужно, чтобы задание вызывалось с параметрами, но оно также может получать данные из предыдущего задания. Для более динамичного использования c см. Этот более громоздкий обходной путь: Что такое конвейеры CircleCi? Могут ли они использоваться для запуска задания с параметрами?
Решение "в глубину" или код:
... test-job : # Ваша тестовая работа spe c
workflows:
version: 2
default-workflow:
unless: << pipeline.parameters.workflow-ondemand >> # set this to false when api-triggering
#You default workflow contd.
# Any amount of scheduled workflows, no changes neeeded
# Oneliner workflow per job
test-job-workflow: {when: << pipeline.parameters.test-job-trigger >>, jobs: [ test-job ]}
# rest of your job workflows
parameters:
# parameter to turn off "default workflow" should always be set to true when triggering a job via API.
workflow-ondemand: {type: boolean, default: false}
# Generic parameters, can be used by jobs needing parameters via API. Example of setting job env var from param1 (not tested):
# environment:
# - MY_ENV_VAR: << pipeline.parameters.param1 >>
param1: {type: string, default: ""}
param2: {type: string, default: ""}
param3: {type: string, default: ""}
param4: {type: string, default: ""}
param5: {type: string, default: ""}
# Build parameters, one per job that is api-triggerable
build-job-trigger: {type: boolean, default: false}
# more triggers here
Это все, что вам нужно. Вы можете запустить через API, например:
curl -u ${CIRCLE_API_USER_TOKEN}: -X POST --header "Content-Type: application/json" -d '{
"branch": "DEV-6473",
"parameters": {
"workflow-ondemand": true,
"test-job-trigger": true
}
}' https://circleci.com/api/v2/project/gh/${org}/${repo}/pipeline