如何设置 TeamCity 触发器以开始构建 git 子模块中的更改?
目前,您必须更新子模块提交指针以触发主存储库中的构建,以便 TC 将在主存储库中注册更改。
更新
问题是子模块应该始终跟踪一个分支主机。AFAIK 这不能通过 git 本身来实现。我只是想让构建克服这方面的 git 限制。
如何设置 TeamCity 触发器以开始构建 git 子模块中的更改?
目前,您必须更新子模块提交指针以触发主存储库中的构建,以便 TC 将在主存储库中注册更改。
更新
问题是子模块应该始终跟踪一个分支主机。AFAIK 这不能通过 git 本身来实现。我只是想让构建克服这方面的 git 限制。
这不是一个简洁的解决方案,但实现了使用子模块的尖端构建项目的目标,并且不需要手动更新子模块。(钩子可能会这样做)
在子模块上创建一个单独的构建配置作为主仓库,并设置一个命令行构建步骤来克隆一个主仓库,拉/更新子模块并将更新的子模块指针推回主仓库。
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 新手,所以这可能可以优化。
这是不可能的,因为 TeamCity(和 git)无法知道有更新。存储库中的子模块条目仅指向提交。
它会有什么更新?此提交可以有多个分支和提交。只有您可以决定子模块的更新位置。
我一直在考虑尝试使用 TeamCity 实现相同的目标,但很快得出结论,这样做没有意义。您的 TeamCity 构建应该基于您的主存储库中的内容,正如您所说,GIT 子模块的工作方式意味着它取决于主存储库来更新它指向子存储库中新提交的指针,这将触发构建.
底线是,我不希望 TeamCity 构建我无法从源代码重新创建的东西,即克隆主存储库不会反映 TeamCity 实际构建的内容。