标签: jenkins-job-dsl

JJB 和 Jenkins DSL 插件 - 优点和缺点

我们使用 JJB(Jenkins Job Builder)来生成我们的工作,但最近我决定尝试 Jenkins DSL 插件,因为它与 JJB 相同或非常强大,根据我找到的信息。尝试另一种技术的原因是我无法使用 JJB 解决一个任务。它让我深入研究 DSL 插件技术,尝试以 JJB 的方式创建工作并组织所有内容,以了解 DSL 插件是更好还是更糟,我们应该使用它代替 JJB 还是作为补充。

网上关于这两个插件的优缺点的资料不多,所以想请大家帮我了解一下:

  • JJB 与 Jenkins DSL 插件之间的优缺点是什么
  • 哪些任务可以用一个而不是另一个来完成?

就我个人而言,我可以说以下几点: DSL 插件优势:

  1. DSL 插件允许我们使用强大的编程语言(groovy),它允许创建更有效的作业配置。
  2. DSL 插件不依赖于插件开发 - 如果添加了新的参数和元素,您可以使用节点语法轻松添加它们。
  3. 例如,您可以使用类导入轻松地从其他 DSL 脚本中获取变量(这就是我决定尝试 DSL 插件的原因)。

DSL 插件缺点:

  1. 使用它创建模板更加困难,您需要添加额外的代码才能使其工作。“using()”命令不允许您传递变量。
  2. 语法有点困难。

groovy jenkins jenkins-plugins jenkins-job-dsl

4
推荐指数
1
解决办法
2031
查看次数

Jenkins DSL插件:如何在现有的jenkins视图中创建作业?

我找到了关于创建作业以及使用DSL插件添加到新创建的视图的以下问题.

将作业添加到新创建的视图.

如何使用DSL插件将创建的作业添加到现有视图?我在文档中找不到任何提示.也许很明显我看不到解决方案?

虽然我读过,如果视图已经存在,创建视图将导致重新创建.对于这种观点下的现有项目意味着什么?

谢谢你的帮助.

groovy jenkins jenkins-job-dsl

4
推荐指数
1
解决办法
4000
查看次数

如何在Jenksin Job DSL脚本中获取种子作业的名称?

我正在使用一个Freestyle项目/工作,其中包含Jenkins Job DSL插件Process Job DSLs提供的构建步骤,即这是"种子"工作.如何从提供的代码中获取种子作业的名称?Use the provided DSL script

我试图应用这个问题的答案,但没有一个有效.

groovy jenkins jenkins-job-dsl

4
推荐指数
1
解决办法
6902
查看次数

可以测试Job DSL脚本

理想情况下,我希望能够在我在Jenkins上执行之前使用某种单元测试来调用脚本.

除了让jenkins运行它之外,有没有办法测试Job DSL脚本?

jenkins jenkins-plugins jenkins-job-dsl

4
推荐指数
1
解决办法
2624
查看次数

Jenkins Job DSL,视图创建无法正常工作

我正在尝试通过 Groovy 代码为 Jenkins Job DSL 插件创建列表视图。运行后,视图已创建,但不会添加任何作业。以下代码段之前的代码创建了构建和部署作业,并且在调用视图创建代码之前,我已验证它们是否已正确创建。我的代码如下所示。我错过了什么?

def viewName = "${appName}"
listView(viewName) {
  jobs {
    name(buildJobName)
    name(deployJobName)
  }
}
Run Code Online (Sandbox Code Playgroud)

jenkins-job-dsl

4
推荐指数
1
解决办法
756
查看次数

如何使用 jenkins 中的 groovy 脚本为配置文件提供程序插件添加配置文件

我在 Jenkins 中使用Job DSL。有一个种子作业会生成一些文件,这些文件应该在可以在不同节点上运行的其他作业之间共享。如果未生成文件,则可以将配置文件提供程序插件用于此任务。但是我需要文件是动态的,这样就不需要 Jenkins UI 交互。

是否可以使用 groovy 脚本向插件添加文件?

我能想到的唯一其他选择是记录 UI 交互并让脚本使用修改后的数据重放它。在更安全的 Jenkins 的情况下,这还需要正确获得身份验证和 CSRF 令牌。

groovy jenkins jenkins-job-dsl

4
推荐指数
1
解决办法
2231
查看次数

将地图传递到 Jenkins 管道作业

我有一个Jenkins Job DSL种子作业,它调用了几个管道作业,例如

pipelineJob("job1") {
    definition {
        cps {
            script(readFileFromWorkspace('job1.groovy'))
        }
        parameters {
            choiceParam('ENV', ['dev', 'prod'], 'Build Environment')
         }
    }
}
pipelineJob("job2") {
    definition {
        cps {
            script(readFileFromWorkspace('job2.groovy'))
        }
        parameters {
            choiceParam('ENV', ['dev', 'prod'], 'Build Environment')
         }
    }
}
Run Code Online (Sandbox Code Playgroud)

job1.groovyjob2.groovy是标准Jenkinsfile样式管道。

我想将一些常见的地图传递给这些工作。这些包含在环境之间可能有所不同的内容,例如目标服务器、凭证名称。

就像是:

def SERVERS_MAP = [
'prod': [
        'prod-server1',
        'prod-server2',
      ],
'dev': [
        'dev-server1',
        'dev-server2',
      ],
]
Run Code Online (Sandbox Code Playgroud)

我可以在种子作业中定义一个映射,然后将其作为管道作业中的映射进行传递和访问吗?

groovy jenkins jenkins-job-dsl jenkins-pipeline

4
推荐指数
1
解决办法
8988
查看次数

指向 Git 存储库作为 Jenkins Job DSL 作业的源吗?

我可以选择文件系统或嵌入式脚本 - 如何指向 Git 存储库?

在此输入图像描述

我具体询问的是 Job DSL,而不是多分支管道。

jenkins jenkins-plugins jenkins-job-dsl

4
推荐指数
1
解决办法
2120
查看次数

在多个类中扩展 Jenkins 工作 DSL 代码

我已经阅读了很多关于 Jenkins 工作 DSL 插件的教程,但我无法弄清楚如何创建一个工作工厂类,而该类又使用另一个生成工作的类。

我已经有很多工作 Groovy 脚本可以直接调用作业工厂并且可以正常工作并且我的作业已正确生成。我需要的是另一个类,它反过来使用以前的作业工厂生成大量作业。

我花了几个小时试图调试这个问题。我很确定它与闭包和实例化工厂对象有关。

package company.factory

import javaposse.jobdsl.dsl.DslFactory
import javaposse.jobdsl.dsl.Job

/**
 * Base DSL templates for all Jenkins jobs.
 *
 */
class JobFactory {
    private DslFactory dslFactory

    JobFactory(DslFactory dslFactory) {
        this.dslFactory = dslFactory
    }

    Job generateBaseJob() {
        dslFactory.job('TEST-1') {
            logRotator(365, -1, 1, -1)
        }
    }

    def generate() {
        generateBaseJob()
    }
}
Run Code Online (Sandbox Code Playgroud)

将其称为 Groovy 脚本有效:

import company.factory.JobFactory

JobFactory jobfactory = new JobFactory(this)

jobfactory.generate()
Run Code Online (Sandbox Code Playgroud)

现在,当我尝试用另一个类扩展该类时,它失败了。

package company.flow

import company.factory.JobFactory

class DeploymentFlow {
    JobFactory jobfactory = new JobFactory(this) …
Run Code Online (Sandbox Code Playgroud)

groovy jenkins jenkins-job-dsl

4
推荐指数
1
解决办法
1347
查看次数

从Jenkins Pipeline调用Job DSL

我需要从管道触发Jenkins Job DSL(具体来说,我需要模仿“从工作空间读取定义文件”的行为),但是job dsl插件尚未在管道步骤列表中。我该如何实现?

jenkins jenkins-job-dsl jenkins-pipeline

3
推荐指数
1
解决办法
3496
查看次数