Git + Jenkins从钩子构建 - 跨多个服务器的远程分支

时间:2015-09-08 11:16:12

标签: git jenkins

我不是100%确定在我的情况下最佳做法是什么以及我是否在错误的地方设置了钩子。

我的架构/工作流程如下(简化):

Git Repos - //SERVER-NAME/e$/repositories/PROJECT-NAME

然后我在自己的服务器上有两个远程分支:

DEV - //DEV-SERVER/e$/projects/PROJECT-NAME
UAT - //UAT-SERVER/e$/projects/PROJECT-NAME

因此,我们假设工作直接在DEV服务器上完成。完成并提交后,我希望该提交从同一服务器上的DEV分支触发构建(Jenkins在DEV和UAT服务器上运行)。

在jenkins的Configure部分中,我在“Repository URL”部分中有上面的Git Repos URL,在'要构建的分支'中有'DEV'。

在签出/克隆的DEV分支中,我有一个提交后挂钩,其中包含以下内容:

#!/bin/sh
curl http://localhost:8080/job/PROJECT-NAME/build?delay=0sec

但是,这可能是检出/克隆尚未收到提交更改的远程DEV分支?然后我尝试将钩子更改为“后接收”,认为这将在

之后触发
git push origin DEV

但这并没有触发。

然后我认为钩子可能需要位于实际的远程存储库的钩子目录中,但是我不确定A)这是否正确,如果是这样B)钩子应该包含什么 - 可能是一个踢的URL在DEV服务器上构建?

有点困惑......

另外,我也喜欢在UAT服务器上工作。我希望工作流程

  1. 承诺DEV
  2. 在DEV上触发构建(包括单元测试等)
  3. 将DEV与UAT合并
  4. 在UAT上触发构建
  5. 将UAT与主人合并
  6. 标签已创建并已发布。
  7. 我不确定上面的工作流程是否会更好,因为只有在git合并到master中时才会在UAT服务器上运行构建(但是在它合并之前,只有在成功构建时合并)?

    谢谢..

1 个答案:

答案 0 :(得分:1)

从我的评论:post-receive hook是一个远程服务器钩子,所以它应该位于远程服务器的hooks目录中(// SERVER-NAME / e $ / repositories / PROJECT-NAME)。当触发此挂钩时,推送的提交应该在远程服务器上可用。

对于你的项目来说,最好的工作流程取决于如此疯狂的东西,如果你有一个可以使用它并调整它,或尝试其他方式做事,当它开始痒到很多时。

在这种情况下,另一种工作流程可能是让Jenkins在远程服务器上轮询您的回购以进行新提交:

  1. Jenkins池DEV branch和新提交会触发构建作业(和测试)
  2. 成功时Jenkins将DEV branch推送到UAT branch
  3. Jenkins池UAT branch和新提交会触发构建作业
  4. 成功时Jenkins将UAT branch推送到master
  5. Jenkins pool master和新提交会触发标记和发布的作业
  6. 您可能有此工作流程不满足的要求,例如在主仓库中发布所有提交,在UAT可用之前推送到开发服务器。