2015-10-16 84 views
0

我是git的新手,我正在研究将它集成到我们的CI(Jenkins)环境时有什么可能性。Git post-commit hook x central CI系统

基于我在这里找到的几个答案(主要是How to configure Git post commit hook),我明白配置git提交后挂钩来触发CI构建的常见愿望(或实践),而不是简单地依赖SCM轮询。

当用户运行git commit时会触发post-commit挂钩。由于提交(使用git术语)意味着委托您的本地存储库,所以这些更改在中央存储库中尚不可用(即,它们尚未被推送到)。

假设你有一个中央CI服务器,我的问题是:什么是后使用“触发您的CI构建”的承诺,如果CI系统不能看到这些变化了吗?

回答

1

假设您有一个中央CI服务器,我的问题是:如果CI系统无法看到这些更改,那么在提交后“触发您的CI构建”有什么用?

有很多工作流程供您选择。试图包括这里一个完整的画面:

# as a new member of your team 
git clone https://your-repo your-repo 
cd your-repo 
git remote add ci-server https://ci-server 
git checkout -b my-feature-branch ci-server/master 
# code stuff 
git add . 
git commit -m "lala" 
# code stuff 
git add . 
git commit -m "lala" 
# ... 
git push my-feature-branch ci-server 
# rinse and repeat 
git fetch ci-server/master 
git checkout my-next-feature ci-server/master 

现在,CI服务器反作用于被推送的提交,建造它,执行测试等,最后合并提交给它的主人,你作为一个开发人员拉/稍后获取(或用作上述新功能分支的基础)。

这就是我所说的最小的工作示例。也看到类似gitflowAtlassians comparison of git branching models

+0

嗨@chelmertz。第一次调用'git commit -m“lala”'会触发你的post-commit钩子(即你的客户端钩子 - http://www.git-scm.com/book/en/v2/Customizing-Git -Git-Hooks#客户端钩子 - 在'.git/hooks/post-commit' shell脚本中定义)。然而,存储库并不知道你的变化(你还没有推动它们!),所以触发构建似乎毫无意义。一个“后推”钩子似乎会做你所描述的,但并不存在(http://stackoverflow.com/a/1799624)。 –

+0

Hello @ E.Z。根据我的经验(这可能是错误的),我一直在本地工作,并且在每个功能的独立分支中工作。如果可以的话,测试应该在本地运行。一旦我觉得足够准备好分享我的代码,我将它推送到CI服务器。 CI服务器可以使用'post-receive'。请参阅[“git-scm.com”上的“服务器端挂钩”](https://git-scm.com/book/en/v2/Customizing-Git-Git-Hooks#Server-Side-Hooks) – chelmertz

+0

要展开一个进一步:我玩弄代码,并可能测试了很多不同的方法来解决问题。有时我使用TDD,有时候我会做一些小的修复,需要手动验证。因此,在本地提交之间运行完整的测试套件对我来说听起来不太可行。 CI的“集成”部分旨在将您的工作与其他工作结合起来,而不是“一直测试所有事情”IMO。 – chelmertz