当前位置: 首页 > 知识库问答 >
问题:

如何通过作业DSL设置主动选择参数的脚本沙盒

申屠晟
2023-03-14

我有一个JobDSL脚本,它使用主动选择参数插件提供的主动选择参数创建了一个Jenkins管道作业。不幸的是,JobDSL不支持在沙盒中运行Active Choice Groovy脚本的参数(在UI中它是可用的),所以我试图通过configure block来启用它。

这是我的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 list builds']")
      }
      referencedParameter('Branch')
    }
    activeChoiceReactiveReferenceParam('Artifacts') {
      description('Lists artifacts from build specified')
      choiceType('FORMATTED_HTML')
      groovyScript {
          script(scriptGen("return ['Job artifacts']")
          fallbackScript("return ['Unable to list artifacts']")
      }
      referencedParameter('Branch')
      referencedParameter('Build')
    }
  }
  definition {
    cpsScm {
      scm {
        git {
          remote {
            github('mainorg/my-repo', 'https', 'github.com')
            credentials('my-creds')
          }
          branch('*/master')
        }
      }
      scriptPath("ci/Jenkinsfile")
      lightweight(true)
    }
  }
  configure { 
      it / 'properties' / 'hudson.model.ParametersDefinitionPropert' / 'parameterDefinitions' / 'org.biouno.unochoice.ChoiceParameter' / 'script' / 'secureScript' {
        'sandbox'('true')
    }
  }
}

使用配置块,我正在尝试覆盖

下面是作业XML的链接,供参考:https://gist.github.com/vzabawski/aae51eddd45a51978224e403cc505b5b


共有1个答案

缑泓
2023-03-14

activeChoiceParamactiveChoiceReactiveParamactiveChoiceReactiveReferenceParam 函数是静态 API 的一部分。Job DSL的作者引入了动态API。每当可以使用动态 API 执行某些操作时,就不再支持负责相同逻辑的静态 API。

你应该阅读这些页面:

    < li >作业DSL动态API < li>JENKINS-41308支持在activeChoiceParams中使用Groovy沙盒脚本

如何从静态 API 切换到动态 API 的示例:

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']")
  }
}

choiceParameter {
  name('Branch')
  description('Lists branches for integration job')
  filterable(true)
  choiceType('PT_SINGLE_SELECT')
  script {
    groovyScript {
      script {
        script("return ['The list of branches']")
        sandbox(true)
      }
      fallbackScript {
        script("return ['Unable to list branches']")
        sandbox(true)
      }
    }
  }
  randomName('')
  filterLength(0)
}
 类似资料:
  • 问题内容: 如何通过PHP脚本设置cron作业。 问题答案: 这将添加一个每天上午9:30运行的脚本。 如果从Web服务器运行此脚本,可能会遇到权限问题。为了解决这个问题,我建议使用另一种方法。 这是一种可能的解决方案。创建需要运行的脚本列表。您可以将其保存在文本文件或数据库中。创建一个脚本来读取此列表,并每分钟或每5分钟(使用cronjob)运行它。您的脚本将需要足够聪明,以决定何时运行脚本列表

  • 问题内容: 很简单,我有要每月执行一次的节点脚本。 但这是行不通的,大概是因为该命令正在运行的路径或外壳。我尝试了以下通过cron执行节点的方法(已通过-v测试): 我没办法尝试了,有什么建议吗? 问题答案: 只需提供cron作业中node的完整路径即可,例如:

  • 问题内容: 我正在尝试根据文档中的值创建动态参数。 我到目前为止在这里尝试过 这引发了以下错误: 我想使参数动态化,以便doc值确定要扣除的值。 使用ElasticSearch 7.2 一个复杂而糟糕的方法是使用以下脚本 Es对象: 问题答案: 您需要尝试不使用单引号。

  • 我正在为maven类型的Jenkins作业编写DSL脚本。 https://jenkinsci.github.io/job-dsl-plugin/#path/mavenJob-性质 在上面链接的帮助下,我编写了几乎所有的DSL脚本,但找不到“构建和构建设置”步骤部分的DSL脚本(用于maven类型的作业)。 请帮助我如何在DSL脚本中提到上述两个步骤。

  • 问题内容: 我有一个选择控件,并且在javascript变量中有一个文本字符串。 我想使用jQuery将select控件的selected元素设置为具有我的文本描述的项目(而不是我没有的值)。 我知道按值设置它是微不足道的。例如 但是我对通过文本描述进行操作感到有些困惑。我想一定有办法从文本描述中获取价值,但是星期五下午我的大脑太忙了,无法计算出来。 问题答案: 按说明选择jQuery v1.6

  • 问题内容: 如何使用Jenkins DSL将作业超时设置为10分钟? 从http://job-dsl.herokuapp.com/中,我可以输入 并为超时生成以下块,默认为3分钟。 我需要输入什么作为“ timeoutClosure”来生成DSL 相反? 问题答案: 在工作中DSL参考说,需要关闭与这种情况: 您可以省略前缀,但是我发现最好将其明确表示为时间单位。