我不能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服务器上。我希望工作流程是
- Commit on DEV
- 在DEV上触发构建(包括单元测试等)
- 合并DEV和UAT
- 触发UAT上的构建
- 合并UAT和master
- 标签创建并发布。
我不确定上面的工作流是否会更好,因为只有在git合并到主服务器上运行构建(但在合并之前,只有在成功的构建上合并)?
谢谢. .
来自我的评论:post-receive钩子是一个远程服务器钩子,所以它应该位于远程服务器的钩子目录中(//server - name/e$/repositories/PROJECT-NAME)。当这个钩子被触发时,推送的提交应该在远程服务器上可用。
什么是你的项目最好的工作流程取决于这么多的事情,如果你有一个工作,去调整它,或尝试另一种方式做事情,当它开始痒多。
在这种情况下,另一种工作流程可能是让Jenkins在远程服务器上轮询您的repo以获取新的提交:- Jenkins池
DEV branch
和新提交触发构建作业(和测试) - 成功后,Jenkins将
DEV branch
推送到UAT branch
- Jenkins池
UAT branch
和新的提交触发构建作业 - 成功时,Jenkins将
UAT branch
推送到master
- Jenkins池
master
和新提交触发一个标记和发布live的作业
您可能有这个工作流不能满足的需求,例如在主仓库中发布所有提交,在UAT可用之前将其推送到开发服务器。