作业DSL创建"管道"打字工作

时间:2016-03-09 17:06:04

标签: jenkins jenkins-plugins jenkins-pipeline jenkins-workflow jenkins-job-dsl

我已经安装了Pipeline Plugin,之前曾被称为Workflow Plugin https://wiki.jenkins-ci.org/display/JENKINS/Pipeline+Plugin

我想知道如何使用Job Dsl创建和配置Pipeline类型的作业

enter image description here

5 个答案:

答案 0 :(得分:22)

您应该使用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()     
    }
  }
}

答案 1 :(得分:20)

我相信这个问题是在询问如何使用Job DSL来创建一个引用该项目的Jenkins文件的管道作业,并且不会将作业创建与详细的步骤定义结合起来,如在答案中给出的那样。日期。这是有道理的: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 = 'git@git.company.com: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来创建管道作业。

答案 2 :(得分:6)

在Job DSL中,管道仍称为工作流程,请参阅workflowJob

下一个Job DSL版本将包含一些管道增强功能,例如: JENKINS-32678

答案 3 :(得分:1)

首先,您需要安装Job DSL插件,然后在jenkins中创建一个自由式项目,然后从构建部分的下拉列表中选择处理作业DSL。

选择使用提供的DSL脚本并提供以下脚本。

pipelineJob('job-name') {
  definition {
    cps {
      script('''
        pipeline {
          agent any
          stages {
            stage('Stage name 1') {
              steps {
                // your logic here
              }
            }
            stage('Stage name 2') {
              steps {
                // your logic here
              }
            }
          }
        }
      }
    ''')   
    }
  }
}

或者您也可以通过指向远程git存储库中的jenkinsfile来创建工作。

pipelineJob("job-name") {
  definition {
    cpsScm {
      scm {
        git {
          remote {
            url("<REPO_URL>")
            credentials("<CREDENTIAL_ID>")
          }
          branch('<BRANCH>')
        }
      }
      scriptPath("<JENKINS_FILE_PATH>")
    }
  }
}

答案 4 :(得分:0)

如果您使用的是git repo,请在repo的根目录中添加名为Jenkinsfile的文件。这应该包含你的工作dsl。