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

如何在jenkins管道groovy文件中使用withcredentials设置多个凭据,jenkins,groovy,jenkins-pipeline,jenkins-job-dsl,Jenkins,Groovy,Jenkins Pipeline,Jenkins Job Dsl,我需要为一个作业设置两个或多个凭据,我的计划是像下面一样单独使用它,以便可以在多个作业中使用它 static void _artifactoryCredentialBinding(Job job) { job.with { wrappers { credentialsBinding { usernamePassword('USERNAME', 'PASSWORD', 'xxxxx') }

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

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文件中任何需要的地方调用这两个方法作为助手方法

我需要在几个作业中添加多个凭据,而在一个作业中仅添加一个凭据

在一个包装器下添加凭证将有效-,但如果在同一包装器下添加多个凭证,则无法重用

我尝试使用上述方法返回作业,并使用相同的方法设置凭据,但在构建时出现错误-

错误:(CredentialBindingUtil.groovy,第28行)没有方法的签名:xxxx.CredentialBingUtil$uuuu pfJasyptCredentialBinding_closure3.wrappers()适用于参数类型:(xxx.CredentialBingUtil$uuuuuu pfJasyptCredentialBinding_closure9)值:[xxxx.CredentialBingUtil$uu pfJasyptCredentialBinding_closure3]$_closure9@11b4d391] [Office365connector]没有要通知的Webhook


如何将凭据附加到现有凭据中?

如注释中所述,可以通过配置块实现这一点

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)


static void\u artifactoryCredentialBinding(定义作业){
工作{
配置{node->
node/'buildWrappers'/'org.jenkinsci.plugins.credentialsbinding.impl.SecretBuildWrapper'/'bindings'

node/'buildWrappers'/'org.jenkinsci.plugins.credentialsbinding.impl.SecretBuildWrapper'/'bindings'如注释中所述,可以通过配置块实现这一点

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)


static void\u artifactoryCredentialBinding(定义作业){
工作{
配置{node->
node/'buildWrappers'/'org.jenkinsci.plugins.credentialsbinding.impl.SecretBuildWrapper'/'bindings'

node/'buildWrappers'/'org.jenkinsci.plugins.credentialsbinding.impl.SecretBuildWrapper'/'bindings'不确定您是否能够像示例中所指出的那样做到这一点……我将尝试使用纯groovy并构建一个数组,然后将其包含在dsl中(根据引用链接中的接受答案)@Tonivan Devorde是的,确实可以,但我需要重新使用凭证绑定。例如,我需要jobA的两个凭证,我只需要jobB或jobC的一个凭证。实际上,我没有仔细查看……您提供的参考是Jenkins管道代码,而不是JobDSL代码……我担心您在这方面不会成功e“传统”方式。应该可以通过配置块()实现方法。如果没有其他人提供解决方案和/或您没有找到解决方案,我会看看是否有时间找到解决方案。@Tonivandoworde将对此进行一次尝试。@Tonivandoworde不确定您是否能够像示例中所指出的那样做到这一点……我会尝试使用纯groovy并构建一个数组,然后将其包含在dsl中(根据您参考链接中的接受答案)@Tonivan Devorde是的,确实可以,但我需要重新使用凭证绑定。例如,我需要jobA的两个凭证,我只需要jobB或jobC的一个凭证。实际上,我没有仔细查看……您提供的参考是Jenkins管道代码,而不是JobDSL代码……我担心您在这方面不会成功e“传统”方式。应该可以通过Configure Block()方式实现。如果没有其他人提供解决方案和/或您没有找到解决方案,我将看看我是否有时间解决方案。@Tonivan Devorde将尝试使用Configure Block,但当种子作业运行时(用于创建其他作业的作业)获取以下异常。是否要执行任何以前的配置?错误:(CredentialBindingUtil.groovy,第44行)没有方法签名:xxx.CredentialBingUtil$\uuuu JasyptCredentialBing1\u closure4.configure()适用于参数类型:(xxx.CredentialBingUtil$\uu JasyptCredentialBing1\u closure4$\u closure13)值:[xxx.认证文件1\u结案4美元$_closure13@e2c2d41][办公室365连接器]没有要通知的Webhook已完成:FAILUREI需要对您正在使用的作业文件进行完整的种子设定。您能在某个地方共享吗?可能是一个公共git repo?您太棒了,这成功了。我必须尝试不同版本的org.jenkins ci。插件:job dsl core,目前我使用的是1.68,它正在接受我的更改。我厌倦了使用配置块,但是en种子作业运行(用于创建其他作业的作业)时出现以下异常。是否要执行任何以前的配置?错误:(CredentialBindingUtil.groovy,第44行)没有方法签名:xxx.CredentialBingUtil$JasyptCredentialBing1\u closure4.configure()适用于参数类型:(xxx.CredentialBindingUu jasyptCredentialBinding1\u closure4$\u closure13)值:[xxx.CredentialBindingUu jasyptCredentialBinding1\u closure4]$_closure13@e2c2d41][办公室365连接器]没有Webhook要通知已完成:FAILUREI需要对您正在使用的作业文件进行完整的种子设定。您能在某个地方共享吗?可能是一个公共git repo?您太棒了,这成功了。我必须试用不同版本的org.jenkins ci.plugins:job dsl core,目前我正在使用1.68,它正在接受我的更改。