我们使用 JJB(Jenkins Job Builder)来生成我们的工作,但最近我决定尝试 Jenkins DSL 插件,因为它与 JJB 相同或非常强大,根据我找到的信息。尝试另一种技术的原因是我无法使用 JJB 解决一个任务。它让我深入研究 DSL 插件技术,尝试以 JJB 的方式创建工作并组织所有内容,以了解 DSL 插件是更好还是更糟,我们应该使用它代替 JJB 还是作为补充。
网上关于这两个插件的优缺点的资料不多,所以想请大家帮我了解一下:
就我个人而言,我可以说以下几点: DSL 插件优势:
DSL 插件缺点:
我找到了关于创建作业以及使用DSL插件添加到新创建的视图的以下问题.
如何使用DSL插件将创建的作业添加到现有视图?我在文档中找不到任何提示.也许很明显我看不到解决方案?
虽然我读过,如果视图已经存在,创建视图将导致重新创建.对于这种观点下的现有项目意味着什么?
谢谢你的帮助.
我正在使用一个Freestyle项目/工作,其中包含Jenkins Job DSL插件Process Job DSLs提供的构建步骤,即这是"种子"工作.如何从提供的代码中获取种子作业的名称?Use the provided DSL script
我试图应用这个问题的答案,但没有一个有效.
理想情况下,我希望能够在我在Jenkins上执行之前使用某种单元测试来调用脚本.
除了让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。有一个种子作业会生成一些文件,这些文件应该在可以在不同节点上运行的其他作业之间共享。如果未生成文件,则可以将配置文件提供程序插件用于此任务。但是我需要文件是动态的,这样就不需要 Jenkins UI 交互。
是否可以使用 groovy 脚本向插件添加文件?
我能想到的唯一其他选择是记录 UI 交互并让脚本使用修改后的数据重放它。在更安全的 Jenkins 的情况下,这还需要正确获得身份验证和 CSRF 令牌。
我有一个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.groovy和job2.groovy是标准Jenkinsfile样式管道。
我想将一些常见的地图传递给这些工作。这些包含在环境之间可能有所不同的内容,例如目标服务器、凭证名称。
就像是:
def SERVERS_MAP = [
'prod': [
'prod-server1',
'prod-server2',
],
'dev': [
'dev-server1',
'dev-server2',
],
]
Run Code Online (Sandbox Code Playgroud)
我可以在种子作业中定义一个映射,然后将其作为管道作业中的映射进行传递和访问吗?
我已经阅读了很多关于 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) 我需要从管道触发Jenkins Job DSL(具体来说,我需要模仿“从工作空间读取定义文件”的行为),但是job dsl插件尚未在管道步骤列表中。我该如何实现?