首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Jenkins管道git命令子模块更新

Jenkins管道git命令子模块更新
EN

Stack Overflow用户
提问于 2017-02-17 05:32:15
回答 5查看 66.7K关注 0票数 37

我想更新git克隆上的子模块。

有什么方法可以用Jenkins管道Git命令来完成吗?

目前我正在做这个..。

代码语言:javascript
运行
复制
git branch: 'master',
    credentialsId: 'bitbucket',
    url: 'ssh://bitbucket.org/hello.git'

但是,一旦克隆了子模块,它就不会更新

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2017-02-17 05:39:07

使用当前的Git插件,您甚至不需要这样做。

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

但OP使用的是管道。

因此,简单的第一步构建就足够了:

代码语言:javascript
运行
复制
git submodule update --init --recursive

然而,“任择议定书”补充说:

是的,但是如果我使用的是sh 'git submodule update --init --recursive',这将使用$HOME/id_rsa,对吗?如果可能的话,我想传递这个命令的私钥。

这是可能的:在管道语法中,您可以使用定义环境变量

这意味着您可以设置GIT_SSH_COMMAND (使用Git 2.10+)。

这样你就可以引用您自己的私钥了。

代码语言:javascript
运行
复制
pipeline {
    agent any

    environment {
        GIT_SSH_COMMAND = 'ssh -i /path/to/my/private/key'
    }

    stages {
        stage('Build') {
            steps {
                sh 'printenv'
                sh 'git submodule update --init --recursive'
            }
        }
    }
} 

如果任何克隆涉及ssh url,该ssh克隆将使用正确的私钥。

注意,圣洁指出了在评论中

不幸的是,这不起作用:JENKINS-38860上面报告的错误: 致命:命令"git get submodule.MySubModule.url“返回状态代码1 每当您有嵌套子模块时,都会为我发生。 考虑一个场景,其中repo A包含子模块B,其中包含子模块C。 如果没有启用带有"Recursively update submodules“的”Recursively update submodules“,Jenkins将克隆A、结帐/克隆B,并且无法初始化/克隆C。 这可能是预期的行为。 如果启用"Recursively update submodules",则会得到以下错误: 致命:命令"git get submodule.C.url“返回状态代码1

票数 33
EN

Stack Overflow用户

发布于 2017-02-17 09:03:43

git命令作为管道步骤是相当有限的,因为它提供了更复杂的签出命令的默认实现。对于更高级的配置,应该使用签出命令,为此可以传递大量参数,包括所需的子模块配置。

您想要使用的可能是这样的东西:

代码语言:javascript
运行
复制
checkout([$class: 'GitSCM',
          branches: [[name: '*/master']],
          doGenerateSubmoduleConfigurations: false,
          extensions: [[$class: 'SubmoduleOption',
                        disableSubmodules: false,
                        parentCredentials: false,
                        recursiveSubmodules: true,
                        reference: '',
                        trackingSubmodules: false]], 
          submoduleCfg: [], 
          userRemoteConfigs: [[url: 'your-git-server/your-git-repository']]])

从文档来看,编写这类行通常很麻烦,我建议您使用Jenkins非常好的Snippet Generator (YourJenkins > yourProject > PipelineSyntax)来自动生成结帐行!

票数 61
EN

Stack Overflow用户

发布于 2017-07-21 18:08:30

代码语言:javascript
运行
复制
checkout([
    $class: 'GitSCM', 
    branches: scm.branches, 
    doGenerateSubmoduleConfigurations: false, 
    extensions: [[
      $class: 'SubmoduleOption', 
      disableSubmodules: false, 
      parentCredentials: true, 
      recursiveSubmodules: true, 
      reference: '', 
      trackingSubmodules: false
    ]], 
    submoduleCfg: [], 
    userRemoteConfigs: scm.userRemoteConfigs
  ])
票数 27
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42290133

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档