git子模块中的提交如何在持续集成中触发构建?
我正在研究项目A,A取决于快速发展的项目B(其主分支)。
因此,B是A的子模块,每次我构建A时,B也是重新构建的。 此外,每次B有新的提交时,我需要构建B,然后重新构建A.(幸运的是,项目足够小,所以编译时间并不重要)。
现在,这是重点。 我想在Travis CI或其他持续集成服务中触发新的构建,当项目A或B中有新的提交时。
我刚试过Github&Travis CI。 项目B中的提交不会触发项目A中的构建。是否有一种简单的方法来运行这种持续集成?
项目B中的提交不会触发项目A中的构建
这是预期的,考虑到B不知道A存在。
您需要通过执行以下操作来记录项目A的新B状态(新建gitlink ,索引中的特殊条目):
cd /path/to/projectA
git submodule update --remote
git add .
git commit -m "Record new B SHA1 gitlink"
git push
git submodule update --remote
会将子模块B更新为记录在.gitmodules
文件中的分支的最新提交。
请参阅“git submodule tracking latest”和“Git submodules:指定分支/标记”
然后一个新的特拉维斯版本将被触发为A.
如果你想自动执行上面描述的序列,那么你需要一个用于projectB的webhook(GitHub)(或者BitBucket),以及一个本地监听器,这个监听器在repo B上的推事件时会触发前面提到的命令项目A.
基于@VonC的问题,我解决了这个问题。 Ref https://developer.github.com/webhooks/configuring/
trigger.rb
要求'sinatra'
post '/payload' do
system("git submodule update --remote")
system("git add .")
system("git commit -m Record_new_change")
system("git push")
puts "Finished handling"
end
./ngrok http 4567
在VPS或长时间运行的commpuer上运行它。 你可能会得到像http://7e9ea9dc.ngrok.io
这样的链接 ruby trigger.rb
http://7e9ea9dc.ngrok.io/payload
用于项目A和B' 通过这种方式,A和B的开发没有变化,新的构建可以自动触发。
链接地址: http://www.djcxy.com/p/92279.html上一篇: How can a commit in git submodule trigger a build in continuous integration?