2つのgitリポジトリを持つJenkinsfile これらは、単一のJenkinsジョブで複数のGITリポジトリを使用する例です。
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')
}
これら2つのリポジトリのSCM変更を追跡するようにこのジョブを構成して、少なくとも1つのリポジトリに更新があるたびにジョブがトリガーされるようにするにはどうすればよいですか?
問題は、ジョブがJenkinsfile内で言及されているリポジトリではなく、ジョブのGUI構成で言及されているJenkinsfile自体のリポジトリ(ソースコードと一緒ではなく、特別なリポジトリに格納されている)をポーリングしていることです。
古いJenkins(コード化されたパイプラインなし)とSVNプラグインを使用すると、N個のリポジトリすべてをGUI構成で参照し、単一のワークスペースの個別のサブディレクトリにチェックアウトして同時にポーリングできるため、非常に簡単でした。
GIT + Jenkins Pipeline-As-Codeで同じ結果を得るにはどうすればよいですか? Jenkinsfileで「poll:true」オプションも使用しようとしましたが、役に立ちませんでした。それでは、このオプションは何をしますか?
更新1:これが私が実際に使用しているパイプラインスクリプトであり、機能しません:
properties([
pipelineTriggers([
scm('H/5 * * * *')
])
])
node {
stage ('Checkout') {
dir('cplib') {
git(
poll: true,
url: 'ssh://git@<server>:<port>/base/cplib.git',
credentialsId: 'BlueOceanMsl',
branch: 'master'
)
}
dir('cpmffmeta') {
git(
poll: true,
url: 'ssh://git@<server>:<port>/base/cpmffmeta.git',
credentialsId: 'BlueOceanMsl',
branch: 'master'
)
}
}
stage ('Build') {
...
}
問題の原因を見つけました。 https://issues.jenkins-ci.org/browse/JENKINS-37731 によって記述された障害でした。間違った構文を使用しました。正しいものはそう見えます:
properties([
pipelineTriggers([
[$class: "SCMTrigger", scmpoll_spec: "H/5 * * * *"],
])
])
Gitステップには、trueに設定した「ポーリング」オプションが必要です。その後、ジョブはscmの変更をポーリングするように構成されます。また、一般的なscmステップを使用して、gitチェックアウトを実行し、ポーリングするように構成されていることを確認することもできます。 「poll:true」の設定が機能しない場合は、バグの可能性があります。ただし、最初に少なくとも1つのジョブを手動で実行する必要があります。