web-dev-qa-db-ja.com

Jenkinsパイプラインgitコマンドサブモジュールの更新

Git cloneのサブモジュールを更新したい。

JenkinsのパイプラインGitコマンドでこれを行う方法はありますか?

現在、私はこれをやっています...

git branch: 'master',
    credentialsId: 'bitbucket',
    url: 'ssh://bitbucket.org/hello.git'

ただし、複製されたサブモジュールは更新されません。

19

現在の Gitプラグイン では、それさえ必要ありません。

GITプラグインは、サブモジュール自体を持つサブモジュールを持つリポジトリをサポートします。
これはオンにする必要があります:

ジョブ構成->セクションソースコード管理、Git->詳細ボタン(ビルドするブランチの下)->サブモジュールを再帰的に更新

しかし、OPはパイプラインを使用しています。

したがって、簡単な最初のビルド手順で十分です。

git submodule update --init --recursive

ただし、OPは以下を追加します。

はい。ただし、sh 'git submodule update --init --recursive'を使用している場合、$HOME/id_rsaを使用しますか?可能であれば、このコマンドの秘密鍵を渡します。

可能です: パイプライン構文 では、 環境変数の定義 が可能です。
これは、GIT_SSH_COMMANDwith Git 2.10 + )を設定できることを意味します。
これにより、 独自の秘密鍵を参照 が可能になります。

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クローンは正しい秘密鍵を使用します。

23
VonC

gitコマンド は、より複雑な checkoutコマンド のデフォルトの実装を提供するため、パイプラインステップとしてはかなり制限されています。より高度な構成の場合は、 checkout command を使用する必要があります。これに対して、目的のサブモジュール構成を含む、多くのパラメーターを渡すことができます。

使用したいのはおそらく次のようなものです:

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)チェックアウト行を自動的に生成します!

39
Pom12
checkout([
    $class: 'GitSCM', 
    branches: scm.branches, 
    doGenerateSubmoduleConfigurations: false, 
    extensions: [[
      $class: 'SubmoduleOption', 
      disableSubmodules: false, 
      parentCredentials: true, 
      recursiveSubmodules: true, 
      reference: '', 
      trackingSubmodules: false
    ]], 
    submoduleCfg: [], 
    userRemoteConfigs: scm.userRemoteConfigs
  ])
16
deepelement