标签: jenkins-job-dsl

创建一个 Job DSL,在同一个 View 中创建一个新的作业

我正在尝试使用 DSL 工作插件在 Jenkins 中创建新工作。有没有办法在创建作业时指定视图?

例如,我有一个视图NewJobsView。我想创建一个名为的 DSL 作业dsl-job,它正在创建一个新作业“dsl-created-job1”

像这样的DSL:

job {
    name 'dsl-created-job1'
    //view 'NewJobsView'
    //or view {...} to specify the view
}
Run Code Online (Sandbox Code Playgroud)

plugins jenkins jenkins-plugins jenkins-job-dsl

5
推荐指数
1
解决办法
3580
查看次数

使用 Job-DSL 配置 Jenkin 的 SonarQube 部分

使用 Job-DSL,我们可以在 Jenkins 中配置一个 C# 项目。

SonarQube 任务给我们带来了困难。

        StepContext.metaClass.sonar = {
        -> NodeBuilder nodeBuilder = new NodeBuilder()
            stepNodes << nodeBuilder.'hudson.plugins.sonar.SonarRunnerBuilder' {
                jdk('(Inherit From Job)')
                usePrivateRepository(false)
            }
    }
Run Code Online (Sandbox Code Playgroud)

如何sonar-project.properties使用 Job-DSL 脚本设置配置文件的路径?

声纳部分

最终剧本

感谢@Bruno César,我添加pathToSonarProjectProperties了参数。

    StepContext.metaClass.sonar = { String pathToSonarProjectProperties
        -> NodeBuilder nodeBuilder = new NodeBuilder()
            stepNodes << nodeBuilder.'hudson.plugins.sonar.SonarRunnerBuilder' {
                jdk('(Inherit From Job)')
                usePrivateRepository(false)
                project(pathToSonarProjectProperties)
            }
    }
Run Code Online (Sandbox Code Playgroud)

sonar使用相对于项目的根路径调用该函数sonar-project.properties

sonar("Framework\\xxx\\xxx\\sonar-project.properties")
Run Code Online (Sandbox Code Playgroud)

groovy jenkins sonarqube jenkins-job-dsl

5
推荐指数
1
解决办法
1768
查看次数

使用 Jenkins 中的作业 DSL 插件在子文件夹中创建列表视图

在 Jenkins 中,您可以使用 Job DSL 轻松创建列表视图

listView("myView") {
    jobs {
        regex(".*")
    }
}
Run Code Online (Sandbox Code Playgroud)

但是如果您尝试在文件夹中创建列表视图,则会创建文件夹但不会创建视图

folder("someFolder")

listView("someFolder/myView") {
    jobs {
        regex(".*")
    }
}
Run Code Online (Sandbox Code Playgroud)

有没有办法做到这一点?

jenkins jenkins-job-dsl

5
推荐指数
1
解决办法
4515
查看次数

一个种子作业可以处理来自多个存储库的DSL吗?

最近,我设法将几个手动创建的作业转换为DSL脚本(内联到临时的“种子”作业中),并且感到惊讶,它是如此的简单。现在,我想摆脱多个种子工作,并尝试更整洁地构建事物。

为此,我创建了一个新的存储jenkins-ci库,并将所有Groovy DSL脚本提交给它。然后,我创建了一个job-generatorJenkins作业,该作业从存储jenkins-ci库中提取,并且只有一个Process Job DSLs步骤。此步骤已选中“在文件系统查找”框,“ DSL脚本”字段设置为jobs/*.groovy。有了全局推送通知后,此操作或多或少地达到了预期的效果:如果我对存储库进行了更改jenkins-ci,该job-generator作业将自动运行并重新生成所有作业,真棒!

我对该解决方案不满意的是,它的参考位置很差:该作业的DSL脚本位于与代码完全独立的存储库中。我倒是真的很喜欢,是保持工作DSL脚本中的每个单独的代码库,在一个jenkins子文件夹,有一个单一的种子作业过程中他们所有。这样,就可以在代码旁边同时检查对CI设置的更改。对我来说,这就像是一个理想的设置。

不幸的是,我对如何实现这一目标尚无明确的想法。如果我能找到一种方法来使种子作业监视多个存储库,从而使对它们中任何一个的提交都将触发它,也许我可以在“ 处理作业DSL”步骤之前注入另一个构建步骤,并(以某种方式)编写脚本来胜利,但是...我不确定如何甚至得到这一点。(我当然不想只生成DSL脚本就对生成器作业中的每个仓库进行完整的克隆!)

我怀疑我不是第一个希望他们可以将Job DSL脚本与代码放在一起的人,尽管也许我高估了它的好处。感谢您提供有关该主题的任何建议!

jenkins jenkins-job-dsl

5
推荐指数
1
解决办法
885
查看次数

Jenkins 管道中作业 DSL 中的工作区路径

我正在创建一个 jenkins 管道作业来使用 jenkins 作业 DSL 插件播种作业。如何获取 DSL 文件中的工作区路径?jenkins 管道代码如下:

#!groovy
  node{
    stage("build jobs"){
      ws{
        git poll: true,  credentialsId: 'xxx', url: 'ssh://git@aaaaa.cc.xxx.com:/xxx/xxx.git'
        checkout scm
        jobDsl(removedJobAction: 'DISABLE', removedViewAction: 'DELETE', targets: 'jobs/*.groovy', unstableOnDeprecation: true)
      }
    }
  }
Run Code Online (Sandbox Code Playgroud)

失败的 DSL 代码是:

hudson.FilePath workspace = hudson.model.Executor.currentExecutor().getCurrentWorkspace()
Run Code Online (Sandbox Code Playgroud)

随着错误:

Processing DSL script pipeline.groovy
java.lang.NullPointerException: Cannot invoke method getCurrentWorkspace() on null object
    at org.codehaus.groovy.runtime.NullObject.invokeMethod(NullObject.java:91)
    at org.codehaus.groovy.runtime.callsite.PogoMetaClassSite.call(PogoMetaClassSite.java:48)
    at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:48)
    at org.codehaus.groovy.runtime.callsite.NullCallSite.call(NullCallSite.java:35)
    at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:48)
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:113)
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:117)
    at pipeline.run(pipeline.groovy:1)
    at pipeline$run.call(Unknown Source)
Run Code Online (Sandbox Code Playgroud)

在作业 DSL 步骤中无法访问在管道区域中创建的变量

jenkins jenkins-job-dsl devops jenkins-pipeline

5
推荐指数
2
解决办法
8617
查看次数

如何在 DSL 中将参数传递给 pipelineJob

我有非常相似的管道作业,唯一的区别是参数。目标是通过在 DSL 脚本中传递参数来创建这些作业,而无需任何代码重复。

我关注了这篇文章。因此,如果您在执行本文中提到的步骤后运行下面的 DSL 脚本,我的脚本就可以运行。

TL;DR 在那篇文章中添加了一个共享库,并且让 Jenkinsfile 使用该共享库。

我有一个非常相似的方法。不同之处在于我想通过 DSL 创建构建作业,并通过 DSL 上的设置更改 Jenkinsfile 的默认参数。

问题是如何传递/覆盖 Jenkinsfile 中的参数。

// BTW I'll run this code below in a loop. Open for any suggesstion 
pipelineJob('AwesomeBild') {

    description("A pipeline created by dsl")

    definition {
        cpsScm {
            scm {
                git {
                    remote { url('https://github.com/jalogut/jenkinsfile-shared-library-sample.git') }
                    branches('master')
                    // how can I pass params to the file
                    scriptPath('Jenkinsfile')
                    extensions { }
                }
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

编辑

参数效果良好。这是 DSL 文件的最新版本。

pipelineJob('AwesomeBild') { …
Run Code Online (Sandbox Code Playgroud)

groovy jenkins jenkins-job-dsl jenkins-pipeline

5
推荐指数
1
解决办法
6938
查看次数

退出代码以设置构建不稳定-Jenkins DSL脚本

我试图利用退出代码job-> publishers-> postBuildScripts-> steps-> shell->高级选项中设置构建不稳定,以根据情况将构建不稳定。我有下面的脚本。

...
postBuildScripts {
                onlyIfBuildSucceeds(false)
                steps {
                  shell('echo "Before exit 1"\n' +
                        'if [ ! condition ]; then\n' +
                        'echo failed-condition\n' +
                        'exit 1\n' +
                        'fi'
                       )
                }
            }
...
Run Code Online (Sandbox Code Playgroud)

执行上面的DSL脚本后,我在jenkins中得到如下信息 在此处输入图片说明

使用以上脚本exit 1,构建失败。但我想让它不稳定,我不要想用markBuildUnstable(true)。我只想根据某些退出代码将构建标记为不稳定。我可以将退出代码手动设置为1,如下所示 在此处输入图片说明 此后,将构建标记为不稳定。

我正在寻找脚本来通过脚本而不是手动设置此字段,因为我有很多工作。

有人可以在建议方面帮助我吗?

jenkins jenkins-plugins jenkins-job-dsl

5
推荐指数
1
解决办法
1279
查看次数

git describe --tags 不适用于 Jenkins 管道构建

我见过这个问题,它朝着类似的方向发展,但并不完全。问题在于标签没有正确推送。

我目前正在使用 Jenkins 构建我的 python 项目setuptools_scm,它基本上用于git describe获取(或多或少)合理的版本号,即使不在标签上。管道是使用 JobDSL 中的种子作业定义的,如下所示(缩写为了解要点):

import BuildProjects

BuildProjects.build_projects.each { def bproject ->
   multibranchPipelineJob("tool/${bproject}") {
      branchSources {
         branchSource {
            source {
               git {
                  id('tool_${bproject}')
                  remote("${BuildProjects.scmBaseLocation}/${bproject}.git")
                  credentialsId(BuildProjects.scmUser)
                  traits {
                     gitBranchDiscovery()
                     gitTagDiscovery()
                     cloneOptionTrait {
                        extension {
                           shallow(false)
                           noTags(false)
                           reference('grmblwrx')
                           timeout(1)
                        }
                     }
                  }
               }
            }
         }
      }

   }
}
Run Code Online (Sandbox Code Playgroud)

一些配置值取自BuildProjects.

运行 jenkins 时,我看到它获取标签:

 > git fetch --tags --progress -- ssh://git@git.my-company.net/tools.git +refs/heads/*:refs/remotes/origin/* # timeout=1
Run Code Online (Sandbox Code Playgroud)

事实上,当我使用 Jenkinsfile 输出标签时,我可以看到标签

sh "git tag"
Run Code Online (Sandbox Code Playgroud)

堵塞。但是使用

sh …
Run Code Online (Sandbox Code Playgroud)

git jenkins jenkins-job-dsl

5
推荐指数
1
解决办法
1296
查看次数

Jenkinsfile 是纯 Groovy 中的吗?Jenkinsfile 的“steps”中使用什么 Groovy 语言结构?

Jenkinsfile 中的以下代码片段使用了什么 Groovy 语言构造、语法或控制结构?

stage('Stage 1') {
    steps {
        // One or more steps
    }
}
Run Code Online (Sandbox Code Playgroud)

即,就纯 Groovy 语言而言,Jenkinsfile 中的块是什么?

什么是“步骤”?或者stage?是调用函数吗?或定义?或者带有匿名(lambda)参数的函数调用?

这个问题本质上是另一个问题:

问题2:

Jenkinsfile 是 groovy 语言的代码片段吗?

换句话说, 1. Jenkinsfile 是否遵循纯 Groovy 的所有语法和控制结构?(也许通过隐式库 import-ed 或 #include d 在开始时默默地),

与 DSL 相反: 2. Jenkinsfile 几乎是一个 Groovy 源文件,增加了新的 Jenkins 特定结构,而这些结构最初并非在 Groovy 中,例如使用预处理的 Jenkins。

以上两者哪一个成立?

有关的:

groovy jenkins-job-dsl jenkins-pipeline

5
推荐指数
1
解决办法
6301
查看次数

为什么 Gradle 无法从 Maven 中央存储库解析 org.connectbot.jbcrypt:jbcrypt:1.0.0?

我使用 Gradle 6.9,这是我的 build.gradle 文件:

plugins {
    id "groovy"
    id "java"
}

group "com.matthiasdenu"
version "1.0-SNAPSHOT"

repositories {
    mavenCentral()
    maven {
        url 'https://repo.jenkins-ci.org/releases/'
    }
}

ext {
    jobDslVersion = "1.77"
    jenkinsVersion = "2.252"
}

sourceSets {
    jobs {
        groovy {
            srcDirs "jobs"
            compileClasspath += main.compileClasspath
        }
        compileClasspath += sourceSets.main.output
        runtimeClasspath += sourceSets.main.output
    }
}

dependencies {
    compile("org.jenkins-ci.main:jenkins-war:${jenkinsVersion}"){
        // https://github.com/sheehan/job-dsl-gradle-example/issues/87
        exclude group: "org.jenkins-ci.ui", module: "bootstrap"
    }
}

test {
    useJUnitPlatform()
}
Run Code Online (Sandbox Code Playgroud)

这是我收到的错误消息:

Execution failed for task ':compileTestGroovy'.
> Could not resolve …
Run Code Online (Sandbox Code Playgroud)

jbcrypt gradle maven jenkins jenkins-job-dsl

5
推荐指数
1
解决办法
1338
查看次数