詹金斯控制台输出回波关闭

我跟随 指南如何与詹金斯签署 Android apk。我已经参数化詹金斯与 KSTOREPWD 和 KEYPWD 的工作。Jenkins 的作业配置(Build-> Execute shell)的一部分是获取这些参数并将它们存储为环境变量:

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

问题是,当构建结束时,任何人都可以访问构建“ Console Output”并查看输入了什么密码; 输出的一部分:

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

因此,我希望在 export命令的输出之前禁止 echo,并在 export命令之后重新启用 echo。

97819 次浏览

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

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

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

在您的特定情况下(使用 gradle 和 jenkins) ,您也可以使用密码参数,使用 环境变量的格拉德尔模式(ORG_GRADLE_PROJECT_prop)。然后,Gradle 将在您的项目上设置一个 prop属性。

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

enter image description here

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

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

顺便说一下-我建议使用 证书绑定插件KEYSTORE enter image description here

下面是一个如何在 Jenkinsfile中编写 sh参数的示例,正如在 正式文件中所建议的那样,在没有输出的情况下,以更安全的方式编写 sh参数。set +x的主要魔术已经写在 这个答案

单引号 使这个秘密被外壳作为一个环境展开 双引号可能不如 secret 安全 是由 Groovy 插入的,所以是典型的操作系统过程 列表(以及 Blue Ocean 和管道步骤树中的 经典用户界面)会不小心泄露它:

不安全,错误的用法:

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

正确用法 something:

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