【发布时间】:2015-09-08 11:16:11
【问题描述】:
我不能 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 的配置部分,我在上面的“存储库 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关闭开发服务器上的构建?
有点困惑...
另外,我也希望在 UAT 服务器上使用同样的方法。我希望工作流程是
- 提交 DEV
- 在 DEV 上触发构建(包括单元测试等)
- 将 DEV 与 UAT 合并
- 在 UAT 上触发构建
- 将 UAT 与 master 合并
- 标签已创建并已发布。
我不确定上述工作流程是否会更好,因为仅在将 git 合并到 master 时在 UAT 服务器上运行构建(但在合并之前,仅在成功构建时合并)?
谢谢..
【问题讨论】:
-
post-receive钩子是远程服务器钩子,因此它应该位于远程服务器的钩子目录中(//SERVER-NAME/e$/repositories/PROJECT-NAME)。触发此挂钩时,推送的提交应该在远程服务器上可用。 push 命令将等待钩子完成,因此您应该避免在钩子中长时间运行命令(我不知道是否触发 jenkins 构建是异步的) -
让 Jenkins 同时用于 DEV 和 UAT 的目的是什么?
-
好吧,它可能不需要同时出现在两者上——并且在某种程度上是我的问题的一部分,关于我的工作流程是否不是实现我想要做的事情的最佳方式?我猜我问题的后半部分是前进的方向 - 建立一个推动掌握的基础,但只是想弄清楚如何最好地做到这一点。