Как запускать задания circleci через API с конфигурацией 2.1 и конвейерами - PullRequest
1 голос
/ 27 марта 2020

Этот вопрос возникал много раз, но никогда (на мой взгляд) не получил solid ответа, поэтому я публикую это Q / A, чтобы надеяться помочь людям.

Проблема:

  • Запуск задания (не конвейера / рабочего процесса) из API
  • Тривиально в API v1, который перестает работать при обновлении конфигурации с 2.0 до 2.1
  • Никто на самом деле указал шаблон или как заставить его работать, окружности обычно комментируют, что «это возможно», ссылаясь на эту страницу: https://circleci.com/docs/2.0/pipeline-variables/#pipeline -параметры в конфигурации , что очень далеко (на мой взгляд) от прямой ответ.
  • Есть также пост в блоге, но я просто думаю, что он слишком прост и, по крайней мере, не помог мне понять, как это работает в реальном config.yml с 10-ю рабочими местами и почти столько же рабочих процессов. https://support.circleci.com/hc/en-us/articles/360041503393-A-workaround-to-trigger-a-single-job-with-2-1-config

1 Ответ

1 голос
/ 27 марта 2020

Решение:

Это действительно больше обходного пути, но его можно сделать довольно плавным, не раздутый ваш 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...