Я хочу, чтобы этот код с таким синтаксисом был в моем конвейерном скрипте:
withXCredentials(id: 'some-cred-id', usernameVar: 'USER', passwordVar: 'PASS') {
//do some stuff with $USER and $PASS
echo "${env.USER} - ${env.PASS}"
}
Обратите внимание, что вы можете поместить любой код в withXCredenitals
для выполнения. withXCredentials.groovy
находится в моей общей библиотеке Jenkins в папке vars
, и в ней будут использоваться оригинальные withCredentials
:
//withXCredentials.groovy
def userVar = params.usernameVar
def passwordVar = params.passwordVar
def credentialsId = params.credentialsId
withCredentials([[$class: 'UsernamePasswordMultiBinding', credentialsId: credentialsId, usernameVariable: usernameVar, passwordVariable: passwordVar]]) {
body()
}
. Я все еще изучаю расширенный материал groovy, но не могу понять, как чтобы сделать это.
Обратите внимание :
Мой вопрос больше о синтаксисе в groovy и использовании Closure
и ответе здесь не то, что я после. С этим решением мне нужно сначала создать экземпляр класса, а затем вызвать метод. Поэтому я стараюсь не делать что-то вроде этого:
new WithXCredentials(this).doSomthing(credentialsId, userVar, passwordVar)
В документации Jenkins есть пример использования замыкания:
// vars/windows.groovy
def call(Closure body) {
node('windows') {
body()
}
}
//the above can be called like this:
windows {
bat "cmd /?"
}
Но это не объясняет, как пройти параметры, подобные этому
windows(param1, param2) {
bat "cmd /?"
}
Смотрите здесь