标签: jenkins-job-dsl

如何从帮助程序类访问Job DSL的readFileFromWorkspace?

我在Job DSL中有大量的Jenkins作业定义,它们都依赖于我在helper类中实现的一些常用功能.这是jobDsl运行这些脚本的步骤的本质:

jobDsl {
  additionalClasspath('jobdsl/src/main/groovy')
  targets('jobdsl/*.groovy')
  sandbox(true)
}
Run Code Online (Sandbox Code Playgroud)

其中一个辅助类jobdsl/src/main/groovy需要从工作区读取文件,但无法访问该readFileFromWorkspace函数.

所以这个不行:

class MyHelper {
  static Closure processFile(String src) {
    ...
    def txt = readFileFromWorkspace(src)
    ...
  }
}
Run Code Online (Sandbox Code Playgroud)

我必须改为使用一个闭包参数:

class MyHelper {
  static Closure processFile(String src, Closure rffw) {
    ...
    def txt = rffw(src)
    ...
  }
}
Run Code Online (Sandbox Code Playgroud)

这使得调用此帮助程序的代码变得臃肿:

MyHelper.processFile('foo.txt', { readFileFromWorkspace(it) })
Run Code Online (Sandbox Code Playgroud)

有没有办法让我的课看到readFileFromWorkspace?实际上,我甚至无法弄清楚这个函数属于哪个类.或者它是一个真正的功能还是由DSL定义的"神奇"的东西.

groovy jenkins jenkins-job-dsl

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

如何从参数值替换jenkins job scm中的github分支

我有一个像下面的詹金斯工作习惯脚本。我希望从参数值中获取Github分支。

Groovy脚本:

 git_url = "git@github.deere.com:ABC/XYZ.git" jenkins_node = "master"
    freeStyleJob('myjob') {
    logRotator(numToKeep = 100)
    parameters {    stringParam("GIT_BRANCH", "master" , "master cert dev")   }
    label(jenkins_node)
    scm {
     git {
      remote { url(git_url) }
      branch($GIT_BRANCH)  
      extensions { }
         }
     }
Run Code Online (Sandbox Code Playgroud)

groovy github jenkins jenkins-job-dsl

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

在jenkins job dsl中使用类

大家好我有一个问题,我似乎无法搞清楚.

所以我正在为我的dsl创建一些帮助类,但它似乎并没有在这些类中执行任何方法.

我创建了一个包含以下dsl的作业:

class TestIt {
  def static helloStatic() {
    println "[STATIC] - Hello"
  }

  def hello() {
    println "[NORMAL] - Hello"
  }
}

def runIt() {
  println "Starting test"
  println "-------------"
  TestIt _test = new TestIt()
  _test.hello();
  TestIt.helloStatic();
  println "-------------"
  println "Done"
}

runIt();
TestIt.helloStatic();
Run Code Online (Sandbox Code Playgroud)

当我使用jenkins运行此作业时,它不显示/执行静态或普通方法.我是否需要以某种方式在当前运行的上下文中注入类或执行其他操作?

另请注意,如果我从命令行运行这个完全相同的脚本,使用作业dsl插件和gradle的github版本,那么脚本会调用方法.

groovy jenkins jenkins-job-dsl

2
推荐指数
1
解决办法
2834
查看次数

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

如何使用 Jenkins job dsl 为 gitlab 插件设置秘密令牌?

插件网站的文档似乎是错误的:https://github.com/jenkinsci/gitlab-plugin

作业 dsl 文档的示例:https://jenkinsci.github.io/job-dsl-plugin/#method/javaposse.jobdsl.dsl.helpers.triggers.TriggerContext.gitlabPush

GitLabPushTrigger可以设置secretToken,但我如何通过 job dsl 设置它?

我目前的工作:

job('seed-job-v2') {

    description('Job that makes sure a service has a build pipeline available')

    triggers {
        gitlabPush {}
    }

    ...
}
Run Code Online (Sandbox Code Playgroud)

jenkins gitlab jenkins-job-dsl

2
推荐指数
1
解决办法
2417
查看次数

multibranchPipelineJob 作业 DSL:如何启用发现分支和抑制自动 SCM 触发

如何在 Jenkins 作业 DSL 中为多分支管道启用行为Discover Benches和 Property 策略Suppress 自动 SCM 触发

在此输入图像描述

jenkins jenkins-job-dsl multibranch-pipeline

2
推荐指数
1
解决办法
4701
查看次数

jenkins job dsl - 没有方法签名:java.lang.String.call()

我无法运行这段代码:

buildPath = 'applications'
buildJob(['java', 'nodejs'])


def buildJob(def jobList){
  for(job in jobList){
    def jobName = "${job}_seed"
    def jobDescription = "Jenkins DSL seed for ${job}"
    def jobScriptPath = "resources/dsl/${jobName}.groovy"
    job("${buildPath}/${jobName}")
  }
}
Run Code Online (Sandbox Code Playgroud)

所以,我收到这个错误:

buildPath = 'applications'
buildJob(['java', 'nodejs'])


def buildJob(def jobList){
  for(job in jobList){
    def jobName = "${job}_seed"
    def jobDescription = "Jenkins DSL seed for ${job}"
    def jobScriptPath = "resources/dsl/${jobName}.groovy"
    job("${buildPath}/${jobName}")
  }
}
Run Code Online (Sandbox Code Playgroud)

我不知道在哪里或什么原因导致了这个错误。我在函数之外创建了一个作业buildJob(def jobList),它正在工作,但我需要执行循环来自动化作业创建。

有任何想法吗?

dsl groovy jenkins jenkins-job-dsl jenkins-groovy

2
推荐指数
1
解决办法
8602
查看次数

如何在 dsl 中使用 jenkins 插件获取用户名和密码?

我是 jenkins 新手,我正在尝试使用凭证插件在 dsl 中使用凭证

模板.xml

<com.cloudbees.plugins.credentials.impl.UsernamePasswordCredentialsImpl>
      <scope>GLOBAL</scope>
      <id>PROD</id>
      <description>prod credentials</description>
      <username>prod</username>
      <password>{{ encrypted_password_prod }}</password
</com.cloudbees.plugins.credentials.impl.UsernamePasswordCredentialsImpl>
Run Code Online (Sandbox Code Playgroud)

我已在 jenkins 中将凭据定义为 username with password 。上述加密值保存在ansible中。

我的问题是我应该如何在我的 dsl 中调用它们

Map credentials = [:]

credentialsBinding {
                    credentials.each { key, value ->
                        string("${key}", "${value}")
                    }


.credentials(["TF_VAR_username": "PROD" ,"TF_VAR_password" : "password_prod"])
Run Code Online (Sandbox Code Playgroud)

错误:

22:11:16 致命:凭证“PROD”的类型为“带密码的用户名”,其中预期为“org.jenkinsci.plugins.plaincredentials.StringCredentials”

jenkins jenkins-plugins jenkins-job-dsl jenkins-groovy

2
推荐指数
1
解决办法
1万
查看次数

一些变量没有在单引号内的詹金斯管道中呈现

我在 jenkins 库中的案例 1 中使用下面的代码,它能够在 sh 块内渲染人工密码和用户名,但无法渲染变量 docker_repo ,如果我用案例 2 中的代码替换它,它工作正常,但它是一种不安全的做法,知道为什么会发生这种情况吗?以及如何克服它?

情况1

def dockerAuth(String creds = 'mysecret',String docker_repo = ARTF_URL) {
    withCredentials([usernamePassword(credentialsId: creds,
                     usernameVariable: 'ARTIFACTORY_USER',
                     passwordVariable: 'ARTIFACTORY_PASSWORD')]) {
        //opts = '-u $ARTIFACTORY_USER -p $ARTIFACTORY_PASSWORD'
        sh 'sudo docker login -u $ARTIFACTORY_USER -p $ARTIFACTORY_PASSWORD $docker_repo'


    }
}
Run Code Online (Sandbox Code Playgroud)

案例2

def dockerAuth(String creds = 'mysecret',String docker_repo = ARTF_URL) {
        withCredentials([usernamePassword(credentialsId: creds,
                         usernameVariable: 'ARTIFACTORY_USER',
                         passwordVariable: 'ARTIFACTORY_PASSWORD')]) {
            //opts = '-u $ARTIFACTORY_USER -p $ARTIFACTORY_PASSWORD'
            sh "sudo docker login -u ${ARTIFACTORY_USER} -p ${ARTIFACTORY_PASSWORD} ${docker_repo}"
    
    
        }
    }
Run Code Online (Sandbox Code Playgroud)

groovy jenkins jenkins-plugins jenkins-job-dsl

2
推荐指数
1
解决办法
4480
查看次数

如何通过Job DSL设置Active Choice Parameter的脚本沙箱

我有一个 JobDSL 脚本,它使用 Active Choice 参数插件提供的 Active Choice 参数创建 Jenkins 管道作业。不幸的是,JobDSL 不支持在沙箱中运行 Active Choice Groovy 脚本的参数(在 UI 中可用),因此我尝试通过配置块启用它。

这是我的 JobDSL 脚本:

pipelineJob("my-pipeline") {
  logRotator(-1, 10)
  parameters {
    activeChoiceParam('Branch') {
      description('Lists branches for integration job')
      filterable()
      choiceType('SINGLE_SELECT')
      groovyScript {
          script("return ['The list of branches']")
          fallbackScript("return ['Unable to list branches']")
      }
    }
    activeChoiceReactiveParam('Build') {
      description('Specifies which build from selected branch will be used for deployment. Only builds that contain Terraform plan are listed.')
      choiceType('SINGLE_SELECT')
      groovyScript {
          script("return ['Selected build']")
          fallbackScript("return ['Unable to …
Run Code Online (Sandbox Code Playgroud)

groovy jenkins jenkins-plugins jenkins-job-dsl jenkins-groovy

2
推荐指数
1
解决办法
5521
查看次数