【问题标题】:Trigger a TeamCity build on changes in a git submodule根据 git 子模块中的更改触发 TeamCity 构建
【发布时间】:2014-07-12 14:45:14
【问题描述】:

如何设置 TeamCity 触发器以开始构建 git 子模块中的更改?

目前您必须更新子模块提交指针以触发主存储库中的构建,以便 TC 将在主存储库中注册更改。

更新

问题是子模块应该始终跟踪一个分支主模块。 AFAIK 这不能通过 git 本身来实现。我只是希望构建能够克服这方面的 git 限制。

【问题讨论】:

    标签: git teamcity teamcity-8.0


    【解决方案1】:

    这不是一个简洁的解决方案,而是实现了使用子模块的尖端构建项目的目标,而不需要手动更新子模块。 (钩子可能会这样做)

    在子模块上创建一个单独的构建配置作为主仓库,并设置一个命令行构建步骤来克隆一个主仓库,拉/更新子模块并将更新的子模块指针推回主仓库。

    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 新手,所以这可能可以优化。

    【讨论】:

      【解决方案2】:

      这是不可能的,因为 TeamCity(和 git)无法知道有更新。存储库中的子模块条目仅指向提交。

      对它有什么更新?此提交可以有多个分支和提交。只有可以决定子模块要更新到哪里。

      【讨论】:

      【解决方案3】:

      我一直在考虑尝试使用 TeamCity 实现相同的目标,但很快得出结论,这样做没有意义。您的 TeamCity 构建应该基于您的主存储库中的内容,正如您所说,GIT 子模块的工作方式意味着它取决于主存储库来更新它指向子存储库中新提交的指针,这将触发构建.

      底线是,我不希望 TeamCity 构建我无法从源代码重新创建的东西,即克隆主存储库不会反映 TeamCity 实际构建的内容。

      【讨论】:

      • 抱歉,我不是在征求意见,我只是想解决手头的任务。
      • 很公平,但我只是想验证问题区域。您是否尝试过为子模块设置第二个 VCS 根并从中触发?只是一个想法。
      • 我放弃了这个想法,因为只能有一个 VCS 触发器,但老实说,我没有检查是否有多个 VCS 根和一个触发器是否可以解决问题。我正在努力。
      猜你喜欢
      • 1970-01-01
      • 2013-06-15
      • 2019-04-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-15
      • 2015-12-03
      • 1970-01-01
      相关资源
      最近更新 更多