continuous-integration - 如何使用 2.1 配置和管道通过 API 触发 Circleci 作业

标签 continuous-integration circleci

这个问题已经出现过很多次,但(在我看来)从未得到可靠的答案,因此我发布此问答希望可以帮助人们解决问题。

问题:

最佳答案

解决方案:

这实际上更像是一种解决方法,但它可以变得非常顺利,而不会完全膨胀您的 config.yml。

高级步骤:

  • 添加用于停止默认工作流程的参数(您不需要停止计划的工作流程!)
  • 为您想要 api 触发的每个作业添加一个工作流程(不用担心,每个作业只有 1 行)
  • 为每个作业添加自定义参数(同样,每个作业一行)
  • (可选)添加作业始终需要的一些通用或自定义参数(对于也应作为默认工作流程一部分运行的作业实际上不起作用,但对于仅通过 API 触发的作业来说没问题)

范围:

“深入”解决方案,又称代码:

... 测试工作: # 您的测试作业规范

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

关于continuous-integration - 如何使用 2.1 配置和管道通过 API 触发 Circleci 作业,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60890624/

相关文章:

ios - : clang: error: no such file or directory: 的 Travis-CI 错误

php - 如何指定 Doctrine 装置的数据库连接?

c++ - 正在进行持续集成的运动,有什么建议吗?

jenkins - 截至 2015 年初,持续集成与功能分支的最新技术水平如何?

gradle - 在运行测试之前如何运行应用程序(gradle/kotlin/spring引导)

docker - 如何在Jenkinsfile中创建函数?

linux - 为什么在 docker 容器内运行的命令不能通过 docker run 从外部运行?

linux - 在 CircleCi 作业中恢复缓存时权限被拒绝

webpack - 如何在 CircleCI 配置中运行 webpack 编译

docker - 是否可以将未命名为 "Dockerfile"的 Dockerfile 与 CircleCI 一起使用?