【问题标题】:How can I pass Jenkins Secret File to the Groovy Script?如何将 Jenkins 秘密文件传递给 Groovy 脚本?
【发布时间】:2021-09-09 03:53:50
【问题描述】:

我有一个基本上包含一些元数据的秘密文件。我正在使用“withCredentials”块将该文件读入局部变量:

stage('fetch')
   {
   steps{
       withCredentials([file(credentialsId: 'secret.json', variable: 'metadata')]) {
           script{
     def rootDir = pwd()
    def exampleModule = load "${rootDir}/test.groovy"
    def res=exampleModule.process(${metadata})
    sh 'echo $res'
           }
     }
    }
   }
       

但是元数据是作为 exampleModule 的 getData 的掩码出现的。我怎样才能传递它是未掩码的形式?

【问题讨论】:

    标签: jenkins jenkins-pipeline jenkins-plugins jenkins-groovy jenkins-job-dsl


    【解决方案1】:

    您可以解密并打印出秘密值

    println hudson.util.Secret.decrypt("<Your masked data>")
    

    如果您使用的是 secretbytes,您需要这样做:

    println(new String(com.cloudbees.plugins.credentials.SecretBytes.fromString("{<Your secretbytesmask>}").getPlainData(), "ASCII"))
    

    要知道秘密字节,您应该打开 JenkinsHome 目录中的 credentials.xml 文件并复制秘密字节,如下所示:


    注意:如果从 jenkins 管道运行,您需要批准脚本,因为您将在控制台中收到以下消息:



    您需要单击并批准此脚本,一旦批准,您将能够看到未屏蔽的内容。

    【讨论】:

    • 我已经更新了包含完整细节的代码。我应该在哪里使用它?在 exampleModule.process 中?是否可以在管道本身中做?
    • @user124 这是一个向您展示如何解密的示例。你可以使用def res=exampleModule.process(hudson.util.Secret.decrypt("${metadata}"))
    • 它不起作用,因为脚本中不允许使用静态方法。 org.jenkinsci.plugins.scriptsecurity.sandbox.RejectedAccessException:脚本不允许使用 staticMethod hudson.util.Secret 在 org.jenkinsci.plugins.scriptsecurity.sandbox.whitelists.StaticWhitelist.rejectStaticMethod(StaticWhitelist.java: 189) 有办法吗?
    • @user124 凭据仅在 withCredentials 块内被屏蔽。如果将它们分配给块外定义的变量,然后在块外打印该变量,则不会应用屏蔽。我已在答案中添加
    • 将加载 teamdetails 的元数据变量将是 shell 变量,对吧?我们可以像你说的那样使用它吗?对我来说,它只是打印文件名
    猜你喜欢
    • 2019-10-27
    • 1970-01-01
    • 2017-05-24
    • 2020-11-02
    • 1970-01-01
    • 2015-12-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多