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,在"Branches to build"部分有"DEV"。

在签出/克隆的DEV分支中,我有一个post-commit钩子,内容如下:

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

然而,这大概是检出/克隆尚未收到提交更改的远程DEV分支?然后我尝试将钩子更改为"post-receive",认为这将在

之后触发。
git push origin DEV

但这没有触发。

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

有点糊涂…

同样,我希望同样的工作在UAT服务器上。我希望工作流程是

  1. Commit on DEV
  2. 在DEV上触发构建(包括单元测试等)
  3. 合并DEV和UAT
  4. 触发UAT上的构建
  5. 合并UAT和master
  6. 标签创建并发布。

我不确定上面的工作流是否会更好,因为只有在git合并到主服务器上运行构建(但在合并之前,只有在成功的构建上合并)?

谢谢. .

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

什么是你的项目最好的工作流程取决于这么多的事情,如果你有一个工作,去调整它,或尝试另一种方式做事情,当它开始痒多。

在这种情况下,另一种工作流程可能是让Jenkins在远程服务器上轮询您的repo以获取新的提交:
  1. Jenkins池DEV branch和新提交触发构建作业(和测试)
  2. 成功后,Jenkins将DEV branch推送到UAT branch
  3. Jenkins池UAT branch和新的提交触发构建作业
  4. 成功时,Jenkins将UAT branch推送到master
  5. Jenkins池master和新提交触发一个标记和发布live的作业

您可能有这个工作流不能满足的需求,例如在主仓库中发布所有提交,在UAT可用之前将其推送到开发服务器。

最新更新