运行 Jenkins 只在推送更改时工作一次 github

Run Jenkins job only once on changes pushed on github

我按照 this answer 设置了一个 Jenkins 作业,它工作正常。

我已经在 github master commit push 上安排了一个工作作为

Poll SCM : * * * * *

但是,它每分钟连续启动一个构建作业。

我如何限制它以便它在每次提交推送时只运行一次?

这种方式其实就是轮询。这意味着如果 GitHub 存储库中没有任何更改,Jenkins 每分钟都会扫描一次。

如果你想要真正从 Github 推送到你的 Jenkins 你需要将 Github WebHooks 与 Jenkins 集成。我写了一个blog post on this subject。滚动到第 2 部分:"Jenkins - Github Integration"

如果您只是在玩弄它或将其用于您的个人开源项目,您可能需要研究 Jenkins 的替代方案,例如 Drone.io 或 Codeship.io。这些服务通常是免费开源的,只需点击几下即可配置 Github Webhooks。但它们不适合复杂的企业构建。

有几个选项。我使用最成功的两个是:

  1. 使用 git commit hook to call the Jenkins rest API to start the job. The simple approach is to call the job's build API call directly (something like http://jenkinsmachine:8080/job/your-jobs-name/build), but that hardcodes the job name and branch into the git hook script. A more flexible approach is to use the Git plugin's own rest mini-API, as described by Kohsuke in his blog.
  2. 使用类似 Throttle Concurrent Builds plugin 的方法或创造性地使用从属节点和执行程序来限制该作业的并发构建数量。

首选第一个选项,但有时无法从 git 机器访问 jenkins 机器,因此在这种情况下可以使用第二个选项。