web-dev-qa-db-ja.com

「パイプライン」タイプのジョブを作成するジョブDSL

以前Pipeline Pluginとして呼び出されていたWorkflow Pluginをインストールしました。
https://wiki.jenkins-ci.org/display/JENKINS/Pipeline+Plugin

Job Dslを使用してPipelineタイプのジョブを作成および構成する方法を知りたい

enter image description here

22
meallhour

pipelineJob を使用する必要があります。

pipelineJob('job-name') {
  definition {
    cps {
      script('logic-here')
      sandbox()
    }
  }
}

ロジックをインラインで定義できます:

pipelineJob('job-name') {
  definition {
    cps {
      script('''
        pipeline {
            agent any
                stages {
                    stage('Stage 1') {
                        steps {
                            echo 'logic'
                        }
                    }
                    stage('Stage 2') {
                        steps {
                            echo 'logic'
                        }
                    }
                }
            }
        }
      '''.stripIndent())
      sandbox()     
    }
  }
}

または、ワークスペースにあるファイルからロードします。

pipelineJob('job-name') {
  definition {
    cps {
      script(readFileFromWorkspace('file-seedjob-in-workspace.jenkinsfile'))
      sandbox()     
    }
  }
}

例:

シードジョブファイルの構造:

jobs
   \- productJob.groovy
logic
   \- productPipeline.jenkinsfile

productJob.groovyコンテンツ:

pipelineJob('product-job') {
  definition {
    cps {
      script(readFileFromWorkspace('logic/productPipeline.jenkinsfile'))
      sandbox()     
    }
  }
}
23
agabrys

この質問は、Job DSLを使用して、プロジェクトのJenkinsfileを参照するパイプラインジョブを作成する方法を求めているものと考えており、これまでの回答で示されているように、ジョブの作成と詳細なステップ定義を組み合わせていませんこれは理にかなっています:Jenkinsのジョブの作成とメタデータの構成(説明、トリガーなど)はJenkinsの管理者に属することができますが、開発チームはジョブの実際の動作を制御する必要があります。

@meallhour、あなたが望んでいるのは以下ですか? (Job DSL 1.64で機能します)

pipelineJob('DSL_Pipeline') {

  def repo = 'https://github.com/path/to/your/repo.git'

  triggers {
    scm('H/5 * * * *')
  }
  description("Pipeline for $repo")

  definition {
    cpsScm {
      scm {
        git {
          remote { url(repo) }
          branches('master', '**/feature*')
          scriptPath('misc/Jenkinsfile.v2')
          extensions { }  // required as otherwise it may try to tag the repo, which you may not want
        }

        // the single line below also works, but it
        // only covers the 'master' branch and may not give you
        // enough control.
        // git(repo, 'master', { node -> node / 'extensions' << '' } )
      }
    }
  }
}

Job DSL pipelineJobを参照します: https://jenkinsci.github.io/job-dsl-plugin/#path/pipelineJob で、ハッキングして http:// job- dsl.herokuapp.com/ 生成された構成を確認します。


この例はうまくいきました。私のために働いたものに基づいた別の例を次に示します。

pipelineJob('Your App Pipeline') { 

  def repo = 'https://github.com/user/yourApp.git' 
  def sshRepo = '[email protected]:user/yourApp.git' 

  description("Your App Pipeline") 
  keepDependencies(false) 

  properties{ 

    githubProjectUrl (repo) 
    rebuild { 
      autoRebuild(false) 
    } 
  } 

  definition { 

    cpsScm { 
      scm { 
        git { 
          remote { url(sshRepo) } 
          branches('master') 
          scriptPath('Jenkinsfile') 
          extensions { }  // required as otherwise it may try to tag the repo, which you may not want 
        } 
      } 
    } 
  }

UIを介して最初にパイプラインを構築する場合、config.xmlファイルとJenkinsドキュメントを使用できます https://jenkinsci.github.io/job-dsl-plugin/#path/pipelineJob パイプラインジョブを作成します。

22
J.Z.

Job DSLでは、パイプラインはまだワークフローと呼ばれます。 workflowJob を参照してください。

次のJob DSLリリースには、パイプラインのいくつかの機能強化が含まれます。 JENKINS-32678

6
daspilker

Gitリポジトリを使用している場合は、リポジトリのルートディレクトリにJenkinsfileというファイルを追加します。これには、ジョブのDSLが含まれている必要があります。

0
ashwnacharya