web-dev-qa-db-ja.com

Jenkinsfile内の複数のGITリポジトリをポーリングしてジョブをトリガーします

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') {
    ...
  }
5

問題の原因を見つけました。 https://issues.jenkins-ci.org/browse/JENKINS-37731 によって記述された障害でした。間違った構文を使用しました。正しいものはそう見えます:

properties([
    pipelineTriggers([
        [$class: "SCMTrigger", scmpoll_spec: "H/5 * * * *"],
    ])
])
3

Gitステップには、trueに設定した「ポーリング」オプションが必要です。その後、ジョブはscmの変更をポーリングするように構成されます。また、一般的なscmステップを使用して、gitチェックアウトを実行し、ポーリングするように構成されていることを確認することもできます。 「poll:true」の設定が機能しない場合は、バグの可能性があります。ただし、最初に少なくとも1つのジョブを手動で実行する必要があります。

0
Jake