Github webhooks - 预推钩

时间:2015-07-10 06:36:35

标签: github-api githooks webhooks

我的要求是每当开发人员推送到github时,那么在推送之前,CI构建应该在Jenkins服务器上触发。如果该构建失败,则应拒绝推送到github。 我需要为此编写钩子,但我不想编写客户端钩子,因为开发人员可以禁用它们。我想要服务器端的github webhooks或预接收挂钩。

现在,这甚至可以实现吗? 如果是,那么从哪里开始?我需要Rest API的知识吗?我需要编写shell脚本吗?

3 个答案:

答案 0 :(得分:8)

这通常不是GitHub可以使用的工作流程 您宁愿使用带有2 GitHub repo的“guarded commits”模型:

  

这是我的项目的要求,无法更改

在这种情况下,最好遵循以下Building a CI server

  • 检测推送并触发编译
  • 推回专用分支以获取有效的comimt(例如,它可能是主分支)

这意味着开发人员应该只推送到服务器监控的“dev”分支,如果编译通过,你的CI引擎会将这些提交推送到主分支。

答案 1 :(得分:1)

经过一番研究,我发现可以使用github的webhook触发jenkins构建,但如果jenkins'无法拒绝github推送请求。构建失败。所以,基本上,我们无法控制github的推送,至少不是免费的github账户。

答案 2 :(得分:0)

不可能完全按照你的要求去做,但是可以做一些应该足够接近的事情。

您可以配置GitHub的钩子来调用CI服务器以在每次推送时运行构建。启动CI作业时,它应克隆存储库,然后强制将分支推送到其先前的状态。如果构建成功,再次推送分支

这需要您的Jenkins作业具有使其能够写入存储库的凭据。

但是,您应该了解此方法容易发生合并冲突。当第一个作业运行时(或者更糟的是,排队),有人可能会推送到同一个分支。您可能在同一分支上有两个作业。排队的作业必然会导致问题,其中最重要的是分支将在GitHub上更新,直到作业运行并且有人可能会提取更改。

话虽如此,我的建议是这个工作流程不可扩展。一种可能的替代方法是使用受保护的分支,并在成功构建之后让CI作业将功能分支合并到受保护的分支中(只要它是快进合并)。