我正在尝试使用jenkins脚本化管道来调用配置文件提供程序插件,并从jenkins中获取用户名和密码的凭据,但以下方法似乎无效。
node {
def mvnHome
def mvnSettings
stage('Prepare') {
mvnHome = tool 'maven-3.5.4'
}
stage('Checkout') {
checkout scm
}
stage('Deploy'){
def usernameLocal, passwordLocal, usr, psw
withCredentials([[$class: 'UsernamePasswordMultiBinding', credentialsId: 'xyz', passwordVariable: 'PASSWORD', usernameVariable: 'USERNAME']]) {
usernameLocal = env.USERNAME
passwordLocal = env.PASSWORD
}
configFileProvider(
[configFile(fileId: '*********', variable: 'MAVEN_SETTINGS', replaceTokens: true)])
{
usr="${usernameLocal}"
psw="${passwordLocal}"
sh "echo $usr"
sh "'${mvnHome}/bin/mvn' -s $MAVEN_SETTINGS deploy -Dserver.username="${usernameLocal}" -Dserver.password="${passwordLocal}""
}
}
}
其中server.username和server.password定义为settings.xml服务器部分下的用户名和密码属性。
好像我发现了问题,这与此处使用的withCredentials无关,而与配置文件提供程序插件无关。因此,我能够正确打印凭证用户名,但是以某种方式,配置文件提供程序无法替换settings.xml中的变量值。
所以我再也不会收到任何错误,只是部署不会通过未经授权的401进行,因为我的settings.xml中的以下内容从未获得正确的值:-
<server>
<id>snapshot</id>
<username>${server.username}</username>
<password>${server.password}</password>
</server>
请问如何解决这个问题?
答案 0 :(得分:2)
withCredentials创建的变量是Groovy变量,而不是环境变量。请尝试以下操作:
stage('Deploy'){
withCredentials([usernamePassword(credentialsId:'xyz', passwordVariable: 'Password', usernameVariable: 'Username')]) {
configFileProvider([configFile(fileId: 'abcde', variable:'MAVEN_SETTINGS')]) {
sh "'${mvnHome}/bin/mvn' -s $MAVEN_SETTINGS deploy -Dserver.username=${Username} -Dserver.password=${Password}"
}
}
}
答案 1 :(得分:0)
好吧,我找到了解决方案,在configFileProvider
块下声明withCredentials
整个部分并通过:
-Dserver.username='${usernameLocal}' -Dserver.password='${passwordLocal}'
(请注意单引号)。这样,值也将被替换,并在被屏蔽的日志中输出。