所有阶段的Jenkins管道凭据

时间:2018-04-09 19:03:09

标签: jenkins-pipeline

我有多个阶段的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'
        }
    }
}

这种方法不行,因为真正的管道非常复杂。

任何替代方案?

1 个答案:

答案 0 :(得分:2)

根据this other stackoverflow questionthis 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'
        }
    }
}