2016-09-02 15 views
1

更新: 自動生成されたDSL wikiエントリ... The generated DSL is only supported when running in Jenkins,...の下から。JenkinsジョブDSL定義でslackNotifierを使用すると、gradleテストが失敗する

slackNotifierはDSLが生成されるため、特定のインフラストラクチャでこれをテストする方法はないようです。 configureブロックを使ってconfigを生成する関数を書くつもりです。


私は我々がジェンキンスでそれを使用するときに正常に動作するようにもかかわらず、gradle testを失敗しているseed job definitionを持っています。

Job Definition抜粋

//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) 
     } 
    } 
} 

gradle testコマンドは、私はslackNotifier宣言をコメントアウトするとき正常に動作しますが、それが有効になっていたときに次のエラーで失敗する:

Test output抜粋

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: [[email protected]] 
     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) 

migration docによれば、slackNotiferはsincに対応していますe 1.47。 gradle.buildでは1.48を使用しています。 [試験ドキュメント] *(https://github.com/jenkinsci/job-dsl-plugin/wiki/Testing-DSL-Scripts)によって示唆されるように、私は、プラグインのバージョン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" 
... 

gradle.buildは、以下を含むと同じエラーを参照します。

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

ジョブ定義を正常にテストするには、何が必要ですか。これはバグですか、それとも私は別のものを見逃しましたか?

答えて

1

削除間違った回答


私はポイントを逃し参照EDIT

新しいアプローチは、プラグインによって公開さ@DataBoundConstructorを再利用するので、何もそれを想定した新しいプラグインをサポートするために書き込む必要がありませんDataBoundConstructor

を持って

あなた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を見て、このセクションに入るものを見ることができます。我々は、同様にこのに走った一般的なアプローチ

+0

私は私の質問で述べたように、[migration doc](https://github.com/jenkinsci/job-dsl-plugin/blob/master/docs/Migration.md#slack)は、1.47 slackNotificationsがdepであることに注意していますslackNotiferに賛成したので、廃止予定のDSLを使用したくありません。 – CVVS

+0

私は自分の答えを変えました、うまくいけばいいが、おそらく良いニュースではないかもしれません。 – KeepCalmAndCarryOn

+0

私は同じ結論に至りました。ありがとう。 – CVVS

1

についての記事へのリンク - 私はそれが入れ子構造

あなたがjob dsl google groupを試すことができていると思います。私たちの解決策は、ジェンキンスで使用していたスラックプラグインバージョンを、gradleのプラグインリストに追加することでした。

具体的には、依存関係のあるファイルbuild.gradleでは、次のコードを追加してプラグインを追加し、自動生成されたDSLを有効にしました。

あなたは、これは、ここで説明してtestPluginsの隣に別のプラグインの例を参照することができます

次のように:

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' 
} 
関連する問題