我正在研究项目A,A依赖于快速开发的项目B(其主分支)。
因此,B是A的子模块,每次构建A,B也会重建。此外,每次B有一个新的提交,我需要构建B,然后重新构建A.(幸运的是,项目足够小,所以编译时间并不重要)。
现在,重点是。当项目A或B中有新的提交时,我想在Travis CI或其他持续集成服务中触发新的构建。
我刚试过Github&特拉维斯CI。项目B中的提交不会触发项目A中的构建。是否有一种简单的方法来运行这种持续集成?
答案 0 :(得分:6)
项目B中的提交不会触发项目A中的构建
这是预期的,考虑到B不知道A存在。
您需要通过以下方式记录项目A的B的新状态(新 gitlink ,special entry in the index):
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更新为A的.gitmodules
文件中记录的分支的最新提交。
请参阅“git submodule tracking latest”和“Git submodules: Specify a branch/tag”
然后将为A触发新的Travis构建。
如果你想自动化上述序列,你需要一个webhook (GitHub)(or BitBucket)用于projectB,一个本地监听器,它在repo B上的push事件中会触发命令之前在项目A的本地回购中提到过。
答案 1 :(得分:2)
基于@VonC的问题,我解决了这个问题。 参考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的开发不受影响,并且可以自动触发新版本。