2016-05-23 18 views
12

私はJenkinsfileでJenkinsパイプラインプラグインを使用しています。2つのgitリポジトリを持つJenkinsfile

vms.gitと呼ばれる1つのリポジトリには、Jenkinsfileとそれが構築するアプリケーションがあります。

私は、deploy.gitという別のリポジトリを持っています。このリポジトリには、vms.gitでアプリケーションをデプロイするために使用するスクリプトが含まれています。

現時点では私のJenkinsfileはちょうどこの

node { 
    stage 'build' 
    checkout scm 

のように見えると私は、ジョブ設定でvms.gitレポを定義しています。

私がしたいのは、両方のリポジトリをチェックアウトし、次にvms.gitのJenkinsfileを使用して残りのビルドを定義することです。他のパイプラインでdeploy.gitスクリプトを再利用したいので、Jenkinsfileをそこに置く必要はありません。

答えて

23

checkoutを使用して複数のディレクトリをチェックアウトすることができますが、チェックアウトしたいディレクトリを指定する必要があります。ジェンキン(スニペットジェネレータベロースクリプトフィールド)を使用してスニペットを生成できます。 チェックアウト、次のgitリポジトリを選択し、Additional Behaviorsでサブディレクトリへのチェックアウトを選択します。

リポジトリが2つある場合は、loadというリポジトリからスクリプトを読み込むことができます。例:

node { 
    // first repository 
    checkout([$class: 'GitSCM', branches: [[name: '*/master']], doGenerateSubmoduleConfigurations: false, extensions: [[$class: 'RelativeTargetDirectory', relativeTargetDir: 'subdirectory1']], submoduleCfg: [], userRemoteConfigs: [[url: 'repo1.git']]]) 
    // second repository 
    checkout([$class: 'GitSCM', branches: [[name: '*/master']], doGenerateSubmoduleConfigurations: false, extensions: [[$class: 'RelativeTargetDirectory', relativeTargetDir: 'subdirectory2']], submoduleCfg: [], userRemoteConfigs: [[url: 'repo2.git']]]) 
    // run first script 
    load 'subdirectory1/Jenkinsfile' 
    // run second script 
    load 'subdirectory2/Jenkinsfile' 
} 
+1

'*/master'の意味をより完全'でhttp JenkinsfileのDSLを用いて説明する:// jenkinshost:8080 /ワークフローCPS-snippetizer/dslReference' –

14

単一のパイプライン内に複数のGitリポジトリを処理するための別のエレガントな解決策がat this threadを見つけることができます。

node { 
    dir('RepoOne') { 
     git url: 'https://github.com/somewhere/RepoOne.git' 
    } 
    dir('RepoTwo') { 
     git url: 'https://github.com/somewhere/RepoTwo.git' 
    } 

    sh('. RepoOne/build.sh') 
    sh('. RepoTwo/build.sh') 
} 
関連する問題