如何在 jenkins 管道 groovy 文件中使用 withcredentials 设置多个凭据

How to Set multiple credentials using withcredentials in jenkins pipeline groovy file

我需要为一个作业设置两个或多个凭据,我的计划是像下面这样单独使用它,以便它可以在多个作业中使用

static void _artifactoryCredentialBinding(Job job) {
    job.with {
        wrappers {
            credentialsBinding {
                usernamePassword('USERNAME', 'PASSWORD', 'xxxxx')
            }
        }
    }
}

static void _jasyptCredentialBinding(Job job) {
    return job.with {
        wrappers {
            credentialsBinding {
                usernamePassword('', 'PASSWORD', 'jasypt-credentials')
            }
        }
    }
}

当我这样做时,第一个凭据被第二个凭据覆盖。

我将在我的 groovy 文件中的任何需要的地方调用这两个方法作为辅助方法。

我需要在少数工作中添加多个凭据,而在一个工作中只需要一个凭据。

在一个包装器下添加凭据会起作用 - ,但如果我在同一包装器下添加多个,我将无法重复使用。

我尝试在上述方法中返回 Job 并使用相同的方法设置 creds 但在构建时出现错误 -

ERROR: (CredentialBindingUtil.groovy, line 28) No signature of method: xxxx.CredentialBindingUtil$__pfJasyptCredentialBinding_closure3.wrappers() is applicable for argument types: (xxx.CredentialBindingUtil$__pfJasyptCredentialBinding_closure3$_closure9) values: [xxxx.CredentialBindingUtil$__pfJasyptCredentialBinding_closure3$_closure9@11b4d391] [Office365connector] No webhooks to notify

如何使凭据附加到现有凭据?

正如评论中所讨论的,可以通过配置块实现这一点。

static void _artifactoryCredentialBinding(def job) {
    job.with {
      configure { node ->

        node / 'buildWrappers' / 'org.jenkinsci.plugins.credentialsbinding.impl.SecretBuildWrapper' / 'bindings' << 'org.jenkinsci.plugins.credentialsbinding.impl.UsernamePasswordMultiBinding' {

          usernameVariable 'some-credential-id'
          credentialsId PASS1
          passwordVariable USER1

        }
      }
    }
}

static void _jasyptCredentialBinding(def job) {
  job.with {
    configure { node ->

      node / 'buildWrappers' / 'org.jenkinsci.plugins.credentialsbinding.impl.SecretBuildWrapper' / 'bindings' << 'org.jenkinsci.plugins.credentialsbinding.impl.UsernamePasswordMultiBinding' {

        usernameVariable 'some-credential-id'
        credentialsId PASS2
        passwordVariable USER2

      }
    }
  }
}

def a_job = job('a-temporaryjob')

_artifactoryCredentialBinding(a_job)
_jasyptCredentialBinding(a_job)


要了解配置块的工作原理,我强烈建议阅读 wiki page and an older blog post,其中逐步解释了如何配置不受支持的插件。