我有多个阶段的Jenkins脚本管道,所有阶段都需要相同的密码才能与第三方API进行交互。
node {
stage ('stage1') {
sh 'curl --user login:password http://trird-party-api'
}
stage ('stage2') {
sh 'curl --user login:password http://trird-party-api'
}
}
出于显而易见的原因,我希望保持此密码的安全,例如詹金斯证书。
我发现的唯一安全方法是添加withCredentials
部分,但必须将其添加到每个管道阶段,例如:
node {
stage ('stage1') {
withCredentials([string(credentialsId: '02647301-e655-4858-a7fb-26b106a81458', variable: 'mypwd')]) {
sh 'curl --user login:$mypwd http://trird-party-api'
}
}
stage ('stage2') {
withCredentials([string(credentialsId: '02647301-e655-4858-a7fb-26b106a81458', variable: 'mypwd')]) {
sh 'curl --user login:$mypwd http://trird-party-api'
}
}
}
这种方法不行,因为真正的管道非常复杂。
任何替代方案?
答案 0 :(得分:2)
根据this other stackoverflow question和this tutorial,您应该能够在声明性管道中指定所需的凭据,如下所示:
environment {
AUTH = credentials('02647301-e655-4858-a7fb-26b106a81458')
}
stages {
stage('stage1') {
sh 'curl --user $AUTH_USR:$AUTH_PSW http://third-party-api'
}
stage('stage2') {
sh 'curl --user $AUTH_USR:$AUTH_PSW http://third-party-api'
}
使用脚本化管道,您几乎可以放心地使用withCredentials
来访问想要访问它们的内容。您是否尝试过使用凭据围绕各个阶段,如:
node {
withCredentials([string(credentialsId: '02647301-e655-4858-a7fb-26b106a81458', variable: 'mypwd')]) {
stage ('stage1') {
sh 'curl --user login:password http://trird-party-api'
}
stage ('stage2') {
sh 'curl --user login:password http://trird-party-api'
}
}
}