【问题标题】:How can I make groovy on Jenkins mask the output of a variable the same way it does for credentials?如何让 Jenkins 上的 groovy 以与凭据相同的方式屏蔽变量的输出?
【发布时间】:2020-04-27 09:23:29
【问题描述】:

在 Jenkins 的 groovy 中是否有一种方法可以获取任意字符串变量——比如对另一个服务的 API 调用的结果——并让 Jenkins 在控制台输出中将其屏蔽,就像它自动为从凭据管理器读取的值所做的那样?

【问题讨论】:

    标签: jenkins groovy jenkins-pipeline jenkins-groovy


    【解决方案1】:

    更新的解决方案: 要隐藏变量的输出,您可以使用 Mask Password Plugin

    这是一个例子:

    String myPassword = 'toto'
    node {
      println "my password is displayed: ${myPassword}"
      wrap([$class: 'MaskPasswordsBuildWrapper', varPasswordPairs: [[password: "${myPassword}", var: 'PASSWORD']]]) {
       println "my password is hidden by stars: ${myPassword}"
       sh 'echo "my password wont display: ${myPassword}"'
       sh "echo ${myPassword} > iCanUseHiddenPassword.txt"
      }
      // password was indeed saved into txt file
      sh 'cat iCanUseHiddenPassword.txt'
    }
    

    https://wiki.jenkins.io/display/JENKINS/Mask+Passwords+Plugin

    正则表达式解决方案的原始答案:

    假设你想隐藏引号之间的密码,下面的代码将输出My password is "****"

    import java.util.regex.Pattern
    
    String myInput = 'My password is "password1"'
    
    def regex = Pattern.compile( /(?<=\")[a-z0-9]+(?=\")/, Pattern.DOTALL);
    
    def matchList = myInput =~ regex
    
    matchList.each { m ->
      myInput = myInput.replaceAll( m, '****')
    }
    println myInput
    

    您需要将a-z0-9 替换为密码中允许的字符模式

    【讨论】:

    • 这并不能完全满足我的需要。我需要该变量保留其在脚本中使用的实际值,但要在控制台输出中屏蔽它的任何和所有出现 - 就像它对从凭证管理器中提取的值所做的那样。
    • 问题标题很清楚,但问题本身并不多,抱歉,我不明白问题到底是什么。我更新了我的解决方案
    猜你喜欢
    • 2016-02-27
    • 1970-01-01
    • 2022-01-08
    • 1970-01-01
    • 2021-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-19
    相关资源
    最近更新 更多