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/

  • 我建立了项目Monitor,它有两个子模块,项目A和B.
  • 在项目Monitor中创建文件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,使用./ngrok http 4567在VPS或长时间运行的commpuer上运行它。 你可能会得到像http://7e9ea9dc.ngrok.io这样的链接
  • 运行ruby trigger.rb
  • 将项目B分配给B',编写另一个脚本以确保所有提交都同步到项目B'
  • 转到项目设置页面,创建一个新的webhook,其网址为http://7e9ea9dc.ngrok.io/payload用于项目A和B'
  • 将项目监视器添加到Travis CI
  • 通过这种方式,A和B的开发没有变化,新的构建可以自动触发。

    链接地址: http://www.djcxy.com/p/92279.html

    上一篇: How can a commit in git submodule trigger a build in continuous integration?

    下一篇: Git submodules in .gitmodules not initialized