在Jenkins控制台输出中回声

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在Jenkins控制台输出中回声相关的知识,希望对你有一定的参考价值。

我正在关注guideline如何用Jenkins签名安卓apk。我已经使用KSTOREPWD和KEYPWD参与了Jenkins的工作。 Jenkins的作业配置(Build-> Execute shell)的一部分是获取这些参数并将它们存储为环境变量:

export KSTOREPWD=${KSTOREPWD}
export KEYPWD=${KEYPWD}
...
./gradlew assembleRelease

问题是当构建结束时,任何人都可以访问构建“控制台输出”并查看输入的密码;部分输出:

08:06:57 + export KSTOREPWD=secretStorePwd
08:06:57 + KSTOREPWD=secretStorePwd
08:06:57 + export KEYPWD=secretPwd
08:06:57 + KEYPWD=secretPwd

所以我想在export命令输出之前抑制回声,并在export命令之后重新启用echo。

答案

默认情况下,Jenkins使用set -x启动Execute Shell脚本。这会导致所有命令都被回显

您可以在任何命令之前键入set +x以临时覆盖该行为。当然你需要set -x再次开始展示它们。

您可以通过将以下内容置于构建步骤的顶部来覆盖整个脚本的此行为: #!/bin/bash +x

另一答案

在您的特定情况下(使用gradle和jenkins),您还可以使用密码参数,使用Gradle's pattern for environment variablesORG_GRADLE_PROJECT_prop)。Gradle将在您的项目中设置propproperty。

在你的情况下,这看起来像这样

enter image description here

你可以在你的gradle.properties中使用它

signingConfigs {
    release {
        storeFile file(KEYSTORE)
        storePassword KSTOREPWD
        keyAlias ALIAS
        keyPassword KEYPWD
    }
}

顺便说一句 - 我建议使用credentials binding plugin用于KEYSTORE enter image description here

另一答案

这是一个如何在sh中编写Jenkinsfile参数的示例,没有以更安全的方式输出,如official documentation中所述。 set +xthis answer写的主要魔法。

单引号将导致shell将密钥扩展为环境变量。由于Groovy插入了秘密,因此双引号可能不太安全,因此典型的操作系统进程列表(以及Blue Ocean和经典用户界面中的管道步骤树)将意外地泄露它:

node {
  withCredentials([string(credentialsId: 'mytoken', variable: 'TOKEN')]) {
    sh /* WRONG! */ """
      set +x
      curl -H 'Token: $TOKEN' https://some.api/
    """
    sh /* CORRECT */ '''
      set +x
      curl -H 'Token: $TOKEN' https://some.api/
    '''
  }
}

以上是关于在Jenkins控制台输出中回声的主要内容,如果未能解决你的问题,请参考以下文章

如何在 PHP“回声”中插入带有撇号和其他特殊字符的文本? [复制]

在 Jenkins 控制台输出中回显

jenkins获取控制台日志|Jenkins文件系统中的“控制台输出”日志位置

Jenkins 控制台输出中的奇怪字符

如何让jenkins控制台输出显示时间

回声'档案:'。单猫标题();显示错误的输出