【发布时间】:2018-11-22 01:16:54
【问题描述】:
我正在尝试使用 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>
您能告诉我如何解决这个问题吗?
【问题讨论】:
-
也许加上你收到的错误
-
我提供了所有可能有用的详细信息,包括错误消息。简而言之,我想从 Jenkins 调用凭据以在脚本化管道中检索用户名和密码(出于某种原因)并将它们作为参数传递给配置文件提供程序 mvn 命令。
-
好的,之前的问题已经解决,我现在已经更新了帖子。您现在可以看一下并帮助我解决问题吗?
-
感谢马克的及时回复。是的,密码使用特殊字符。但是我怎么知道配置文件提供程序 sh 脚本是否甚至用我在该脚本中传递的值替换了 settings.xml 用户名和密码。?
-
尝试 sh "echo '${mvnHome}/bin/mvn' -s $MAVEN_SETTINGS deploy -Dserver.username="${usernameLocal}" -Dserver.password="${passwordLocal}""
标签: jenkins jenkins-plugins jenkins-pipeline