1. ホーム
  2. git

[解決済み] Jenkinsパイプラインで複数のgitレポを同一ジョブでチェックアウトする方法

2023-06-20 20:39:05

質問

私はJenkins Multiple SCMプラグインを使用して、Jenkinsジョブで3つのgitリポジトリを3つのサブディレクトリにチェックアウトしています。それから、3 つのリポジトリすべてから引き出された情報とコードで 1 つの成果物のセットを構築するために、1 つのコマンド セットを実行します。

複数の SCM は現在では非推奨となっており、テキストではパイプラインへの移行が推奨されています。試してみましたが、それを動作させる方法がわかりません。

Jenkinsのジョブディレクトリの最上位から見た気になるディレクトリ構造はこんな感じです。

$ ls
Combination
CombinationBuilder
CombinationResults

これら3つのサブディレクトリには、それぞれ1つのgitレポがチェックアウトされています。複数の SCM で、私は git を使用し、そして "checkout to a subdirectory" という動作を追加しました。以下は、パイプラインスクリプトを使った私の試みです。

node('ATLAS && Linux') {
    sh('[ -e CalibrationResults ] || mkdir CalibrationResults')
    sh('cd CalibrationResults')
    git url: 'https://github.com/AtlasBID/CalibrationResults.git'
    sh('cd ..')
    sh('[ -e Combination ] || mkdir Combination')
    sh('cd Combination')
    git url: 'https://github.com/AtlasBID/Combination.git'
    sh('cd ..')
    sh('[ -e CombinationBuilder ] || mkdir CombinationBuilder')
    sh('cd CombinationBuilder')
    git url: 'https://github.com/AtlasBID/CombinationBuilder.git'
    sh 'cd ..'

    sh('ls')
    sh('. CombinationBuilder/build.sh')
}

しかし、gitコマンドはワークスペースのトップレベルのディレクトリで実行されるようで(これはある程度意味があります)、構文にもよるとcheckout-to-sub-directoryの動作はないようです。

どのように解決するのですか?

を使用することができます。 dir コマンドを使用して、サブディレクトリ内のパイプラインステップを実行することができます。

node('ATLAS && Linux') {
    dir('CalibrationResults') {
        git url: 'https://github.com/AtlasBID/CalibrationResults.git'
    }
    dir('Combination') {
        git url: 'https://github.com/AtlasBID/Combination.git'
    }
    dir('CombinationBuilder') {
        git url: 'https://github.com/AtlasBID/CombinationBuilder.git'
    }

    sh('ls')
    sh('. CombinationBuilder/build.sh')
}