如何将变量传递给 JenkinsFiles 中的凭证参数?

How to pass down variables to credential parameters in JenkinsFiles?

我正在尝试编写一个 JenkinsFile,它会自动通过 ssh 访问 git 存储库并执行一些操作,但我想让存储库和 ssh 密钥使用带有存储在 Jenkins 中的 ssh id 的变量但我似乎缺少有关如何将变量传递给 Jenkins 文件的 Jenkins 文档,因为我无法将值传递给凭据密钥。传递给 sh 命令的变量虽然解析得很好...

下面的示例管道:

pipeline {
  parameters {
    string(name: 'SSH_priv', defaultValue: 'd4f19e34-7828-4215-8304-a2d1f87a2fba', description: 'SSH Credential with the private key added to Jenkins and the public key to the username stored in Git Server, this id can be found in the credential section of Jenkins post its creation.')
    string(name: 'REPO', defaultValue: 'git@--------------------')
  }
  stages {
    stage ('Output Variables'){
      // checks I can get these variables
      steps{
        sh("echo ${params.SSH_priv}")
        sh("echo ${params.REPO}")
      }
    }

stage('Do Something') {
      steps {
        // this below commented line, does not work.  
        // sshagent (credentials: ['${params.SSH_priv}']){

        // this line does work
        sshagent (credentials: ['d4f19e34-7828-4215-8304-a2d1f87a2fba']){
          sh("git clone --mirror ${params.REPO} temp")
          dir("temp"){
            // start doing fancy stuff ...
            ....
            ....
          }
        }
      }
    }

目标是我的开发人员同事可以调用的管道,并将使用他们自己的存储库和我没有使用的 ssh id。当我尝试 运行 使用 SSH_priv 参数传递值时,我在 Jenkins 中遇到以下故障。

JenkinsFile 与硬编码的凭据 ID 完美配合——如下所示:

最好在管道中使用环境步骤。

pipeline {
    agent any
    environment { 
                AN_ACCESS_KEY = credentials('an_access_key_id') 
            }
    stages {
        stage('Example') {
            steps {
                sh 'printenv'
            }
        }
    }
}

并且凭据应该存在于 jenkins 中,id 为 an_access_key_id

看看官方文档here

所以在测试了不同的东西之后,一位朋友在不到 5 分钟的时间内解决了这个问题。 Quotation mark types matter in Groovy Script

改变

sshagent (credentials: ['${params.SSH_lower}']){

sshagent (credentials: ["${params.SSH_lower}"]){

问题已解决。