我在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定义的"神奇"的东西.
我有一个像下面的詹金斯工作习惯脚本。我希望从参数值中获取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) 大家好我有一个问题,我似乎无法搞清楚.
所以我正在为我的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版本,那么脚本会调用方法.
我正在使用Jenkins 隐藏参数插件,但无法像在其他参数中那样找到在DSL中编写语法。
例如:https : //jenkinsci.github.io/job-dsl-plugin/#method/javaposse.jobdsl.dsl.helpers.BuildParametersContext.activeChoiceParam
有什么方法可以反映DSL中的隐藏参数?
插件网站的文档似乎是错误的: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) 我无法运行这段代码:
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),它正在工作,但我需要执行循环来自动化作业创建。
有任何想法吗?
我是 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 库中的案例 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) 我有一个 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