2017-01-31 10 views
2

あなたは私のお手伝いができますか?Jenkins withCredentials with動的に選択されたパラメータ

私はジェンキンと素晴らしいプラグインで解決策を見つけようとしました:uno-choice、しかし私はそれをできませんでした。一般的に

#!/usr/bin/env groovy 
def sout = new StringBuffer(), serr = new StringBuffer() 
def proc ='/var/lib/jenkins/script.sh location'.execute() 

proc.consumeProcessOutput(sout, serr) 
proc.waitForOrKill(1000) 

def credential(name) { 
    def v; 
    withCredentials([[$class: 'UsernamePasswordMultiBinding', credentialsId: name, usernameVariable: 'USERNAME', passwordVariable: 'PASSWORD']]) { 
     v = "${env.USERNAME}" 
    } 
    return v 
} 

def key = credential('aws_prod_api') 

String str = sout.toString() 
String s = str.trim() 
String[] items = s.split(","); 
def v1 = Arrays.asList(items) 
return v1 

私はbashスクリプトからジェンキンスに保存し、それを何かをAWS Credentionalを取得したい:

は、私は非常に簡単なスクリプトを持っています。

選択したリストを作成するブロックでは、[必須]を使用しますが、どうすればいいのか分かりません。

お手伝いできますか? は、私は非常に

それを感謝します私はグルーヴィー内withCredentialsを使用してみましたが、私はエラーだ:withCredentialsScript1の範囲に存在しないためにです

Fallback to default script... groovy.lang.MissingMethodException: No signature of method: Script1.withCredentials() is applicable for argument types: (java.util.ArrayList, Script1$_credential_closure1) values: [[[$class:UsernamePasswordMultiBinding, credentialsId:aws_prod_api, ...]], ...] at org.codehaus.groovy.runtime.ScriptBytecodeAdapter.unwrap(ScriptBytecodeAdapter.java:58) at org.codehaus.groovy.runtime.callsite.PogoMetaClassSite.callCurrent(PogoMetaClassSite.java:81) at

+0

はStackOverflowのへようこそ。これを最小限の例に絞り込んでください。あなたの見積もりには無関係の情報がたくさん含まれているように見えます。 – StephenKing

答えて

0

。これは、Jenkinsfile DSLの範囲内に存在します。あなたはそれを渡す必要があります。

スクリプトを関数に変換することをお勧めします。その後、Jenkinsfile DSLをGroovyコードに渡します。その後、

def doAwsStuff(dsl) { 
    ... 
    def key = credential(dsl, 'aws_prod_api') 
    ... 
} 

def credential(dsl, name) { 
    def v; 
    dsl.withCredentials([[$class: 'UsernamePasswordMultiBinding', credentialsId: name, usernameVariable: 'USERNAME', passwordVariable: 'PASSWORD']]) { 
     v = "${env.USERNAME}" 
    } 
    return v 
} 

として、あなたのJenkinsfileからそれを呼び出す:

def result = MyAwsStuff.doAwsStuff(this) 
関連する問題