2017-05-04 77 views
1

我想把一些中间管道,等待一个web钩被击中。理想情况下,我的管道会做这样的事情:等待,直到webhook被触发

  1. 部署到QA
  2. 合并请求
  3. 部署到UAT
  4. 部署至正式发布

我已在 “合并请求” 阶段创建合并请求(在GitLab中)。那部分完成了。我现在要等到合并请求被接受后才能进入下一阶段。我很喜欢它是一个webhook。

我可以写一些代码来轮询请求,但如果可以的话,我想避免轮询。

回答

0

我通过GitLab API创建我的合并请求来解决这个问题。然后轮询该API并等待状态被“合并”。我宁愿有一个webhook来避免投票。但waitUntil函数在轮询之间慢慢增加了更多时间,因此它不会过多地对系统征税。

1

我不确定是否有插件允许您在等待webhook时阻止作业执行。

我觉得更直接的方法是一分为二的管道:

  • QA +合并请求
  • UAT + PROD

第二个管道可以被配置为使用GitLab plugin for Jenkins触发。据我所知,你可以在README.md中关注the example,但只有在对目标分支进行推送时才会触发你的触发器,例如,如果所有的合并,要求的目标master

triggers { 
    gitlab(triggerOnPush: true, triggerOnMergeRequest: false, branchFilterType: 'master') 
} 

这样做的好处是,在等待网络挂接(这可能需要一段时间取决于在变化的大小你不捆绑奴隶合并请求和谁在审查他们)。

这个问题引发的唯一问题是如果你必须保持两个剧本的状态。我之前编写过管道,在相关资源的名称中使用了独特的sha。在你的场景中,你将失去对第二个管道中该变量的访问。

+0

这是我考虑过的一个选项,我很感谢您的回复,但这是一个极端的解决方法,这是最后的解决方法。 我宁愿调查MR,然后把管道分成两部分。 – Eddie

+0

如果你得到这个工作,我很想听到更多关于它!我会密切关注这个话题,祝你好运! – nicr9

+0

完成了,我没有做你的建议,阅读其他答案。我做的有点不同,信息和我会解释。 – Eddie