根据环境获取凭据

Ant*_*nrd 6 jenkins-pipeline

我可以像这里的示例中所解释的那样获取凭据 - https://jenkins.io/doc/book/pipeline/syntax/#environment

stage('Example') {
        environment { 
            CREDS = credentials('MY_CREDS_DEV') 
        }
        steps {
            sh 'echo hello'
        }
}
Run Code Online (Sandbox Code Playgroud)

但我想做的是根据某些条件获得凭证。

例如,我已经在 J​​enkins 凭证中定义了MY_CREDS_DEVMY_CREDS_QAENV=dev在 Jenkins 的“为运行准备环境”部分中定义了一个属性。

我想根据我的环境(即ENV属性)访问凭据。

我尝试使用CREDS = credentials('MY_CREDS_' + ${ENV})并尝试将字符串连接提取到一个单独的函数并像这样调用它,CREDS = credentials(concatenate(${ENV}))但我得到了Internal function call parameters must be strings.

所以看来我只能将一个字符串放入credentials()函数中,这基本上意味着对其进行硬编码。但是我如何选择使用哪些凭据 - dev 或 qa?

Joe*_*g S 3

使用CREDS = credentials('MY_CREDS_' + ENV)CREDS = credentials("MY_CREDS_${ENV}"). ${ENV}不会成为'dev'${'dev'}因此不是字符串。

为了完整性:

事实上 - 在使用 groovy 控制台之后 - 看起来${ENV}会尝试调用一个$使用闭包参数调用的函数{ENV},该函数又会返回'dev'。它会给出相同的结果,就ENV好像您定义了一个函数一样:

def $(Closure closure) {
    closure()
}
Run Code Online (Sandbox Code Playgroud)

但很可能这不是您想要做的。