有没有人在本地设置一个gradle构建来生成Jobs?
因此,我为作业和插件依赖添加了一个sourceSet。这样我就可以将groovy构建成类。现在,我想添加一个执行任务,我链接到编译,或者测试,它在一个等价物中生成,但是我不太确定实现这个任务的最佳方法。
我已经通过类路径(理论上)访问了这个jar,所以我应该能够轻松地执行
curl -O https://repo.jenkins-ci.org/public/org/jenkins-ci/plugins/job-dsl-core/@version@/job-dsl-core-@version@-standalone.jar
java -jar job-dsl-core-@version@-standalone.jar sample.dsl.groovybuild.gradle
sourceSets {
...
jobs {
groovy {
srcDirs 'jenkins-job-dsl'
compileClasspath += main.compileClasspath
}
}
}
dependencies {
...
compile "org.jenkins-ci.plugins:job-dsl-core:$version"
}
task buildOneUsingClassFile(type: JavaExec) {
group = "Execution"
classpath = sourceSets.jobs.runtimeClasspath + sourceSets.jobs.compileClasspath
main = 'my_pipeline_dsl_job_class_name'
}
task generateDSLXml(type: JavaExec) {
group = "Execution"
description = "generate all found groovy dsl files"
classpath = sourceSets.jobs.compileClasspath
main = 'javaposse.jobdsl.Run'
args sourceSets.jobs.groovy
.filter { it.path.endsWith('.groovy') }
.collect {it.path.toString() }
.unique()
}除了我看到在jenkins上运行的失败之外,上面的大部分都是有效的,即使在相同的版本中也是如此。然而,我在https://job-dsl.herokuapp.com/上也看到了同样的失败,因此它们可能代表着一个不同的问题
发布于 2022-07-05 15:57:30
Gradle
buildscript {
...
ext {
...
jobDslOutputDir = new File(buildDir, 'generated/jenkins-job-dsl')
}
}
sourceSets {
// our shared library internal code
main {
groovy {
srcDirs = ['src']
}
resources {
srcDirs = ['resources']
}
}
// out shared library test code
test {
groovy {
srcDirs = ['test']
}
resources {
srcDirs = ['resources']
}
}
// job DSL files
jobs {
groovy {
srcDirs 'jenkins-job-dsl'
compileClasspath += main.compileClasspath
}
}
}
dependencies {
...
compile 'org.jenkins-ci.plugins.workflow:workflow-multibranch:2.24@jar'
compile 'org.jenkins-ci.plugins:job-dsl-core:1.77'
}
// Generate Task
task generateDSLXml(type: JavaExec) {
doFirst {
// ensure Project's ext.jobDslOutputDir directory exists
jobDslOutputDir.mkdirs()
}
group = "Execution"
description = "generate job xml for all found groovy dsl files"
classpath = sourceSets.jobs.compileClasspath
main = 'javaposse.jobdsl.Run'
workingDir = jobDslOutputDir
// collect all the groovy files found in the jobs source set for they represent
// the job dsl files creating jobs
args sourceSets.jobs.groovy.filter { it.path.endsWith('.groovy') }.collect { it.path.toString() }.unique()
}
// disable spotbugs for job DSL
task spotbugs(
group: "Verification",
description: """Marker task to enable Spotbugs (disabled by default)."""
)
gradle.taskGraph.whenReady { taskGraph ->
tasks.spotbugsMain.onlyIf { taskGraph.hasTask tasks.spotbugs }
tasks.spotbugsTest.onlyIf { taskGraph.hasTask tasks.spotbugs }
tasks.spotbugsJobs.onlyIf { false } // skip for job dsl
}作业DSL多分支缺失方法问题
对于多个分支,我们应该能够使用
multibranchPipelineJob('my-build') {
factory {
workflowBranchProjectFactory {
scriptPath('path-to-Jenkinsfile')
}
}
}但是,如果缺少方法错误,则会失败。当我们重新分析发现这里时,世代在dsl操场上工作,并通过gradle工作
it / factory(class: 'org.jenkinsci.plugins.workflow.multibranch.WorkflowBranchProjectFactory') {
owner(class: 'org.jenkinsci.plugins.workflow.multibranch.WorkflowMultiBranchProject', reference: '../..')
scriptPath("jenkinsfile")
}
}https://stackoverflow.com/questions/72805517
复制相似问题