【问题标题】:Create new Jenkins jobs using Pipeline Job and Groovy script使用流水线作业和 Groovy 脚本创建新的 Jenkins 作业
【发布时间】:2018-03-20 10:00:47
【问题描述】:

我有带有参数(名称、组、任务编号)的 Jenkins 管道作业

我需要编写管道脚本来调用 groovy 脚本(这个?:https://github.com/peterjenkins1/jenkins-scripts/blob/master/add-job.groovy

我想在每次构建主管道作业时创建新作业(名称为 name_group_taskNamber)。

我不明白: 我需要在哪里放置可能的 groovy 脚本? Pipeline 脚本应该是什么样子的? :

node{
    stage('Build'){
        def pipeline = load "CreateJob.groovy"
        pipeline.run()
    }
}

【问题讨论】:

标签: jenkins groovy jenkins-pipeline


【解决方案1】:

您可以像这里一样使用和配置shared library(一个git repo):https://github.com/lvthillo/shared-library。您需要在 Jenkins 全局配置中进行配置。

它包含一个文件夹vars/。在这里,您可以管理管道和 groovy 脚本,例如我的 slackNotifier.groovy。该脚本只是一个用于在 Slack 中打印构建结果的 groovy 脚本。

在 jenkins 管道作业中,我们将导入我们的共享库:

@Library('name-of-shared-pipeline-library')_

mavenPipeline {
  //define parameters
}

在上述情况下,管道也在共享库中,但这不是必需的。

您可以在作业本身中编写您的管道,然后只从管道中调用函数,如下所示: 这是共享库中的脚本:

// vars/sayHello.groovy
def call(String name = 'human') {
    echo "Hello, ${name}."
}

在您的管道中:

final Lib= library('my-shared-library')

...
  stage('stage name'){
    echo "output"
    Lib.sayHello.groovy('Peter')
  }
...

编辑: 在新的声明式管道中,您可以使用:

pipeline {
    agent { node { label 'xxx' } }

    options {
        buildDiscarder(logRotator(numToKeepStr: '3', artifactNumToKeepStr: '1'))
    }

    stages {
        stage('test') {
            steps {
                sh 'echo "execute say hello script:"'
                sayHello("Peter")
            }
        }
    }

    post {
        always {
            cleanWs()
        }
    }
}

def sayHello(String name = 'human') {
    echo "Hello, ${name}."
}

输出:

[test] Running shell script
+ echo 'execute say hello script:'
execute say hello script:
[Pipeline] echo
Hello, Peter.
[Pipeline] }
[Pipeline] // stage

【讨论】:

  • 我不认为这是个好主意。当我们拥有这样的库时,我们需要更多地考虑安全性。是否可以在没有共享资源的情况下将完整脚本添加到管道中?
  • @Anna 我已经修改了答案,您可以立即在脚本中使用 groovy 函数
【解决方案2】:

我们使用https://wiki.jenkins.io/display/JENKINS/Jobcopy+Builder+plugin 来实现,尝试在管道脚本中构建另一个步骤并传递要考虑的参数

【讨论】:

  • 我不需要副本。我只需要三个新的明确工作,例如:测试、预生产、生产。我想为此配置 pipeline-main-job-creator。
  • 上述插件将基于预先配置的模板作业创建新作业,我们有一个通用模板,根据需要我们只需更改要为每种作业类型替换的参数/配置跨度>
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多