我们所有的实现都在src目录下,我在管道中重用了引用:
def static myFunction(steps, context) {
steps.withCredentials([steps.usernamePassword(
credentialsId: 'credentialsId',
usernameVariable: 'GITHUB_USERNAME',
passwordVariable: 'GITHUB_PASSWORD')]) {
// use of steps.env.GITHUB_PASSWORD
}
}
如https://wiki.jenkins.io/display/JENKINS/Credentials+Binding+Plugin中所述,该问题可能与凭据绑定多次使用时如何屏蔽凭据绑定有关。也就是说,一旦我们使用$ {env.PASSWORD}一次,它将屏蔽所有具有相同值的使用。
我正在使用curl to并且需要生成URL
def teamMembersApi = sh(curl -H 'Authorization: token ${env.PASSWORD}' ${githubRepoApi}")
此调用的响应是另一个API URL,我使用“ teamMembersApi ”创建了另一个URL。因此,拨打第二个电话...
def teamMembers = sh("curl -H 'Authorization: token ${env.PASSWORD}' ${teamMembersApi}")
此时, $ {env.PASSWORD} 的值被屏蔽,因此,第二次调用由于凭据无效而失败
据我了解,这是由于通过任何会导致“ toString()”将使其无法在字符串中重用的方法访问时,“屏蔽”值的结果。
使用httpRequest,我得到了 MalformedURLException ,其中包含格式明确的URL ...我确定该URL为String格式并具有协议...
java.net.MalformedURLException: no protocol: https://github.company.com/org/repo
答案 0 :(得分:1)
您可以随时使用 computed: {
prettyAmount: function () {
return this.amount + ' ' + this.currency.toUpperCase()
}
}
<div>{{prettyAmount}}</div>
块内的username/password
。但
请记住,withCredentials
只能在username/password
块内生存。
我在下面的代码中两次使用相同的withCredentials
,效果很好。
username/password
代码中的另一个问题,如果您没有为步骤node('docker') {
withCredentials([steps.usernamePassword(
credentialsId: 'ba2e4f46-56f1-4467-ae97-17b356d7f854',
usernameVariable: 'JENKINS_USERNAME',
passwordVariable: 'JENKINS_PASSWORD')]) {
def log = sh(
returnStdout: true,
script: "curl -u ${env.JENKINS_USERNAME}:${env.JENKINS_PASSWORD} -k ${env.BUILD_URL}" + 'consoleText').trim()
def pipelineSteps = sh(
returnStdout: true,
script: "curl -u ${env.JENKINS_USERNAME}:${env.JENKINS_PASSWORD} -k ${env.BUILD_URL}" + 'flowGraphTable').trim()
echo '\n## build log ##\n' + log
echo '\n## pipelineSteps ##\n' + pipelineSteps
}
echo "JENKINS_USERNAME: ${env.JENKINS_USERNAME}"
// print JENKINS_USERNAME: null
// because JENKINS_USERNAME's lifecycle is limited inside withCredentials blok.
}
指定选项returnStdout: true
,则它应该返回null。示例:sh
,def output = sh('command')
将是output