在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 variables(ORG_GRADLE_PROJECT_prop)
。Gradle将在您的项目中设置prop
property。
在你的情况下,这看起来像这样
你可以在你的gradle.properties
中使用它
signingConfigs {
release {
storeFile file(KEYSTORE)
storePassword KSTOREPWD
keyAlias ALIAS
keyPassword KEYPWD
}
}
顺便说一句 - 我建议使用credentials binding plugin用于KEYSTORE
这是一个如何在sh
中编写Jenkinsfile
参数的示例,没有以更安全的方式输出,如official documentation中所述。 set +x
是this 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“回声”中插入带有撇号和其他特殊字符的文本? [复制]