在Jenkins Job DSL定义中使用slackNotifier时,gradle测试失败



更新:从"自动生成的DSL wiki"条目... The generated DSL is only supported when running in Jenkins,...的底部。

由于slackNotifier是生成DSL的,所以似乎没有办法在我们的特定基础设施中测试它。我们将编写一个函数,使用configure块生成配置。


我有一个种子作业定义,它无法通过gradle test,尽管当我们在Jenkins中使用它时,它似乎工作得很好。

任务定义摘录

//package master
// GitURL
def gitUrl = 'https://github.com/team/myapp'
def slackRoom = null
job('seed-dsl') {
    description('This seed is updated from the seed-dsl-updater job')
    properties {
        //Set github project URL
        githubProjectUrl(gitUrl)
    }
    ...
    // publishers is another name for post build steps
    publishers {
        mailer('', false, true)
        slackNotifier {
            room(slackRoom)
            notifyAborted(true)
            notifyFailure(true)
            notifyNotBuilt(true)
            notifyUnstable(true)
            notifyBackToNormal(true)
            notifySuccess(false)
            notifyRepeatedFailure(false)
            startNotification(false)
            includeTestSummary(false)
            includeCustomMessage(false)
            customMessage(null)
            buildServerUrl(null)
            sendAs(null)
            commitInfoChoice('NONE')
            teamDomain(null)
            authToken(null)
        }
    }
}

当我用slackNotifier声明注释掉时,gradle test命令运行良好,但在启用时失败,并出现以下错误:

测试输出摘录

Caused by:
        javaposse.jobdsl.dsl.DslScriptException: (script, line 79) No signature of method: javaposse.jobdsl.dsl.helpers.publisher.PublisherContext.slackNotifier() is applicable for argument types: (script$_run_closure1$_closure9$_closure14) values: [script$_run_closure1$_closure9$_closure14@d2392a1]
        Possible solutions: stashNotifier(), stashNotifier(groovy.lang.Closure)
            at javaposse.jobdsl.dsl.DslScriptLoader.runScriptEngine(DslScriptLoader.groovy:135)
            at javaposse.jobdsl.dsl.DslScriptLoader.runScriptsWithClassLoader_closure1(DslScriptLoader.groovy:78)

根据迁移文档,slackNotifer自1.47以来一直得到支持。在我的grade.build中,我使用1.48。我看到与插件版本1.50 相同的错误

gradle.build摘录

ext {
 jobDslVersion = '1.48'
 ...
}
...
// Job DSL plugin including plugin dependencies
testCompile "org.jenkins-ci.plugins:job-dsl:${jobDslVersion}"
testCompile "org.jenkins-ci.plugins:job-dsl:${jobDslVersion}@jar"
...

grade.build还包括以下内容,正如[测试文档]所建议的那样*(https://github.com/jenkinsci/job-dsl-plugin/wiki/Testing-DSL-Scripts)。

testPlugins 'org.jenkins-ci.plugins:slack:2.0.1'

我需要做些什么才能成功测试我的工作定义。这是一个bug,还是我错过了其他东西?

删除了错误回复


编辑

我看我没有抓住要点。

新方法是重用插件公开的@DataBoundConstructor,因此不需要编写任何东西来支持新插件,假设它有DataBoundContractor

你的SlackNotifier有这个-注意DSL为你转换小写的第一个字母

@DataBoundConstructor
public SlackNotifier(
    final String teamDomain, 
    final String authToken, 
    final String room, 
    final String buildServerUrl,
    final String sendAs, 
    final boolean startNotification, 
    final boolean notifyAborted, 
    final boolean notifyFailure,
    final boolean notifyNotBuilt, 
    final boolean notifySuccess, 
    final boolean notifyUnstable, 
    final boolean notifyBackToNormal,
    final boolean notifyRepeatedFailure, 
    final boolean includeTestSummary, 
    CommitInfoChoice commitInfoChoice,
    boolean includeCustomMessage, 
    String customMessage) {
    ...
}

不幸的是,参数列表CommitInfoChoice中有一个嵌入类型,它没有DataBoundConstructor,也没有enum

public enum CommitInfoChoice {
    NONE("nothing about commits",                             false, false),
    AUTHORS("commit list with authors only",                  true,  false),
    AUTHORS_AND_TITLES("commit list with authors and titles", true,  true);
    ...
}

我要说的是,在嵌套枚举实现数据绑定构造函数并具有描述符之前,它不会解决这个问题,对不起。

我没有这个插件,但你可以看看XML,看看用这个插件真正创建的作业,看看这一节会有什么内容。我怀疑这是一个嵌套结构

你可以试试工作dsl谷歌小组-链接到一篇关于通用方法的文章

我们也遇到过这种情况。我们的解决方案是将我们在jenkins上使用的slack插件版本添加到gradle中的插件列表中。

更具体地说,在依赖项下的build.gradle文件中,我们添加了以下代码以包含我们的插件,从而允许自动生成的DSL工作。

您可以看到这里描述的内容,以及testPlugins:旁边的另一个插件示例

  • https://github.com/jenkinsci/job-dsl-plugin/wiki/Testing-DSL-Scripts

如下所示:

dependencies {
  ...
  // plugins to install in test instance
  testPlugins 'org.jenkins-ci.plugins:ghprb:1.31.4'
  testPlugins 'com.coravy.hudson.plugins.github:github:1.19.0'
}

相关内容

  • 没有找到相关文章

最新更新