2017-01-31 2 views
2

не могли бы вы помочь мне с litle throuble?Jenkins withCredentials в динамических выбранных параметрах

Я пробовал найти решение с дженкинсами и вашим замечательным плагином: 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 

В общем, я хочу получить AWS Credentional, который сохранить в Дженкинс из Баш скрипт и с ним что-то сделать.

Я хочу использовать withCredentials в блоке, который делает выбранный список, но я не понимаю, как это сделать.

Не могли бы вы мне помочь? я очень ценю это

Я попытался с помощью withCredentials внутри заводной, но я получил сообщение об ошибке:

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

Это потому, что withCredentials не существует в рамках Script1. Он существует в области DSL Jenkinsfile. Вы должны передать его.

Я предлагаю преобразовать ваш скрипт в функции. Затем передайте DSL Jenkinsfile на ваш код 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) 
Смежные вопросы