Git 子模块未在 Jenkins 构建中更新

问题描述 投票:0回答:9

我在 Jenkins 的项目中有一个子模块。我已启用高级设置以递归更新子模块。

当我运行构建时,我看到工作区包含子模块中的文件。问题是,它似乎是子模块的第一个修订版。当我推送更改(托管在 GitHub 上的存储库)时,Jenkins 似乎没有更新子模块以获得正确的更改。有人见过这个吗?

git jenkins git-submodules
9个回答
109
投票

请注意,Jenkins Git 插件 2.0 将具有“高级子模块行为”,这应确保子模块的正确更新:

正如 vikramvi

 
评论

Advanced sub-modules behavior
> “
Path of the reference repo to use during submodule update
”针对此字段,添加子模块 git url。


Owen B在评论中提到

对于身份验证问题,现在有一个“使用父存储库的默认远程凭据”选项

JENKINS-20941中看到:


38
投票

Jenkins 站点上的 Git 插件文档中的以下部分对此进行了介绍:递归子模块

摘录

GIT 插件支持带有子模块的存储库,而子模块本身又具有子模块。不过,必须打开此功能:在作业配置 - >部分源代码管理Git - >高级按钮(在要构建的分支下) - >递归更新子模块

示例

在作业的配置屏幕的“源代码管理”部分中,下拉“添加”按钮,选择“高级子模块行为”。    

s1                                

s2然后选择“递归更新子模块”:

   

s3


32
投票

如果您想使用子模块的较新版本,则必须在本地 Git 存储库中执行此操作: cd submoduledir git pull cd .. git add submoduledir git commit -m 'Updated to latest revision of submoduledir' git push # Go and watch Jenkins build with the new revision of the submodule

当您这样做时,Jenkins 将在构建过程中检查子模块的完全相同的版本。 Jenkins 不会自行决定使用子模块的哪个版本。这是 Git 子模块和 SVN 外部模块之间的根本区别。

您可能想阅读有关子模块的良好参考,例如
http://progit.org/book/ch6-6.html

.

终于偶然发现了一种方法,而且很简单。


19
投票

使用凭据的初始克隆工作正常,但后续

submodule

克隆因凭据不正确而失败。

自动高级子模块克隆:
Source Code Management >> Additional Behaviours >> Advanced sub-modules behaviours

:导致凭证错误。
  1. git submodule update --init
    部分中的
  2. Execute Shell
  3. 也因凭据错误而失败。
    
    
    
    解决方案:
  4. 我正在使用
jenkins-1.574

选中
Build Environment >> SSH Agent

框。
  1. 选择正确的凭据(可能与
    Source Code Management
    部分
  2. 中选择的相同)
  3. 更新
    Execute Shell
  4. 部分中的子模块
  5. git submodule sync git submodule update --init --recursive

    
    

    这是屏幕截图

enter image description here看来我找到了解决方案:


13
投票

git submodule foreach git checkout master git submodule foreach git pull

如果您使用 Jenkins Git 模块,您可以将其设置为“在构建之前清除工作区”,这样它将始终获得正确的子模块。 

7
投票

我正在使用带有结帐插件的脚本化管道。如果您希望子模块与存储库中的相同,只需关闭跟踪子模块选项,如下所示:


6
投票

在“高级子模块行为”上,选中“将跟踪子模块更新到分支尖端”

2
投票

我无法让

scmGit

0
投票
git

调用时失败:


/usr/bin/git config --get submodule..url”返回状态代码1:

所以我丑陋的黑客解决方案是手动初始化子模块:

scmGit ... sh 'git submodule add --force "<sub-path>" "<sub-name>"'

© www.soinside.com 2019 - 2024. All rights reserved.