コントローラパイプラインジョブの入力パラメータに応じて、いくつかの異なるパイプラインジョブをトリガーしたい。Jenkins Groovyスクリプトのすべてのパイプラインジョブを取得する
この仕事の中で、私はパイソンスクリプトから返されたリストからトリガーしたい他のパイプラインの名前をビルドします。
node {
stage('Get_Clusters_to_Build') {
copyArtifacts filter: params.file_name_var_mapping, fingerprintArtifacts: true, projectName: 'UpdateConfig', selector: lastSuccessful()
script {
cmd_string = 'determine_ci_builds --jobname ' + env.JOB_NAME
clusters = bat(script: cmd_string, returnStdout: true)
output_array = clusters.split('\n')
cluster_array = output_array[2].split(',')
}
echo "${clusters}"
}
jobs = Hudson.instance.getAllItems(AbstractProject.class)
echo "$jobs"
def builders = [:]
for (i=0; i<cluster_array.size(); i++) {
def cluster = cluster_array[i]
def job_to_build = "BuildCI_${cluster}".trim()
echo "### branch${i}"
echo "### ${job_to_build}"
builders["${job_to_build}"] =
{
stage("${job_to_build}") {
build "${job_to_build}"
}
}
}
parallel builders
stage ("TriggerTests") {
echo "Done"
}
}
私の問題は、それは私がステージGet_Clusters_to_Build
から取得する名前を持つジョブのカップルが存在しないことを、ケースかもしれません、です。したがって、それらは引き起こされず、私の仕事は失敗します。
私の質問には、すべてのパイプラインジョブの名前を取得する方法があります。ビルドをトリガできるかどうかを確認するために、これらを使用する方法はありますか?
私はjobs = Hudson.instance.getAllItems(AbstractProject.class)
で試しましたが、これは私に "普通の" FreeStyleProject-Jobsだけを与えます。
私はループの中でこのような何かをしたい:
def builders = [:]
for (i=0; i<cluster_array.size(); i++) {
def cluster = cluster_array[i]
def job_to_build = "BuildCI_${cluster}".trim()
echo "### branch${i}"
echo "### ${job_to_build}"
// This part I only want to be executed if job_to_build is found in the jobs list, somehow like:
if job_to_build in jobs: // I know, this is not proper groovy syntax
builders["${job_to_build}"] =
{
stage("${job_to_build}") {
build "${job_to_build}"
}
}
}
parallel builders
可能な失敗ブロックを 'try/catch'で囲んでエラーケースを処理することができます。ジョブの種類は['org.jenkinsci.plugins.workflow.job.WorkflowJob'](https://github.com/jenkinsci/workflow-job-plugin/blob/master/src/main/java/org/jenkinsci/)です。プラグイン/ワークフロー/ジョブ/ WorkflowJob.java)。 – mkobit
'job_to_build'の名前を知っていたら、'Hudson.instance.getItemByFullName(job_to_build) 'を試しましたか?そのような項目がない場合、nullを返す必要があります。したがって、あなたは正常にそのジョブをスキップすることができます... – tom