首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >gradle从作业-dsl-plugin生成xml。

gradle从作业-dsl-plugin生成xml。
EN

Stack Overflow用户
提问于 2022-06-29 17:22:46
回答 1查看 61关注 0票数 0

有没有人在本地设置一个gradle构建来生成Jobs?

因此,我为作业和插件依赖添加了一个sourceSet。这样我就可以将groovy构建成类。现在,我想添加一个执行任务,我链接到编译,或者测试,它在一个等价物中生成,但是我不太确定实现这个任务的最佳方法。

我已经通过类路径(理论上)访问了这个jar,所以我应该能够轻松地执行

代码语言:javascript
复制
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.groovy

build.gradle

代码语言:javascript
复制
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/上也看到了同样的失败,因此它们可能代表着一个不同的问题

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-07-05 15:57:30

Gradle

  • 为作业-dsl文件添加源代码集
  • 为作业添加输出dir -dsl ext.jobDslOutputDir
  • 为作业-dsl添加依赖项
  • 为作业添加任务-dsl
代码语言:javascript
复制
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多分支缺失方法问题

对于多个分支,我们应该能够使用

代码语言:javascript
复制
multibranchPipelineJob('my-build') {
    factory {
        workflowBranchProjectFactory {
            scriptPath('path-to-Jenkinsfile')
        }
    }
}

但是,如果缺少方法错误,则会失败。当我们重新分析发现这里时,世代在dsl操场上工作,并通过gradle工作

代码语言:javascript
复制
        it / factory(class: 'org.jenkinsci.plugins.workflow.multibranch.WorkflowBranchProjectFactory') {
            owner(class: 'org.jenkinsci.plugins.workflow.multibranch.WorkflowMultiBranchProject', reference: '../..')
            scriptPath("jenkinsfile")
        }
    }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72805517

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档