Jenkins管道-可选凭证

pxyaymoc  于 2023-05-16  发布在  Jenkins
关注(0)|答案(1)|浏览(168)

我有一个管道,它将一些凭据作为参数。

credentials(name: 'API_TOKEN', description: 'API Access Token', defaultValue: null, credentialType: "org.jenkinsci.plugins.plaincredentials.impl.StringCredentialsImpl")

稍后在环境部分中,我将像这样使用它:

pipeline {
    agent any

    environment {
        MY_TOKEN = credentials('API_TOKEN')
    }

稍后我在管道中引用MY_TOKEN。
我的问题是,如果Jenkins在git提交后自动启动这个作业(没有传递任何凭证),或者如果你决定在没有凭证的情况下运行一个作业,这个作业就无法启动(即时失败)。我尝试将defaultValue设置为“dummy”,但credentials('dummy')抛出类似于credentials(null)的错误。
我试图给予在环境部分设置additionall变量,并直接引用API_TOKEN,但它没有帮助,因为在这种情况下,手动给定的参数没有得到尊重,而是使用默认值(null或'dummy')。
如何在管道中正确实现可选凭证?

stszievb

stszievb1#

根据这里的Jenkins文档,我没有看到credentials作为参数的选项。但是,从Jenkins GUI编辑管道配置时,credentials参数确实可用。
查看GUI中凭据参数的选项,我发现它引用了Jenkins Credentials Provider中存储的凭据。知道了这一点,我的建议是添加一个字符串参数,它引用存储的凭证的凭证ID。就像这样:

string(name: 'TOKEN_CRED_ID', defaultValue:'', description: 'Credential ID to API Access Token')

然后,在你的流水线逻辑中,处理一个空字符串作为你的TOKEN_CRED_ID的事件,如下所示:

String credId = params.TOKEN_CRED_ID.trim();
if(credId) {
   withCredentials([string(credentialsId: credId, variable: 'apiToken')]) {
      // Use 'apiToken' here
   }
} else {
   // Manage the case where no credential ID is provided
}

相关问题