如何设置TeamCity触发器以开始构建git子模块中的更改?
目前,您必须更新子模块提交指针以在主存储库中触发构建,以便TC将在主存储库中注册更改。
更新
问题是子模块应该始终跟踪分支主控。 AFAIK这不能通过git本身来实现。我只是希望构建能够克服git限制。
答案 0 :(得分:3)
这不是一个简洁的解决方案,但是实现了使用子模块的尖端构建项目的目标,而不需要手动更新子模块。 (钩子可能会这样做)
使用子模块作为主仓库创建单独的构建配置,并设置命令行构建步骤以克隆maste-repo,拉/更新子模块并将更新的子模块指针推回到主仓库。
rm -r master-repo
git clone git@github.com:xxx/master-repo.git
cd master-repo
git status
git submodule update --init
git config -f .gitmodules submodule.submodule-repo.branch master
cd submodule-repo
git pull origin master
git status
cd ..
git add submodule-repo
git commit -m "sub module update"
git push origin master
我是git的新手,所以这可能会得到优化。
答案 1 :(得分:1)
由于TeamCity(和git)无法知道有更新,因此无法做到这一点。回购中的子模块条目只指向提交。
它会有什么更新?此提交可以有多个分支和提交。只有你可以决定子模块的更新位置。
答案 2 :(得分:1)
我一直在努力尝试与TeamCity达成同样的目标,但很快就认为做这件事没有意义。您的TeamCity构建应基于主存储库中的内容,并且正如您所说,GIT子模块的工作方式意味着由主存储库更新它指向子存储库中新提交的指针,这将触发构建
一句话是,我不希望TeamCity构建一些我无法从源代码重新创建的内容,即克隆主存储库不会反映TeamCity实际构建的内容。