我希望在管道 jenkins 期间将应用程序 Vault 中的密码注入到属性文件中。我找到了一个有效的解决方案。但我对这个解决方案不是很满意。
密码未隐藏。我可以在管道 Jenkins 的日志作业中读取密码。此日志是由于内容替换插件。
有人想保护这种行为吗?
以下是我的日志作业中的内容替换插件生成的日志示例:
00:46:17 replace file content: /tmp/workspace/EXAMPLE_JOB_CONTENTREPLACE/application.properties
00:46:17 replace times: 0, [{{FTP_PASSWD}}] => [thisismyftppwd]
我正在做的一个例子是,我禁止了 Vault 代码以简化演示。
stage ('Inject Secrets') {
steps {
script {
node {
def vaultData = [:]
vaultData['ftp_password'] = 'thisismyftppwd'
contentReplace(
configs: [ fileContentReplaceConfig(
configs: [ fileContentReplaceItemConfig(
search: '\{\{FTP_PASSWD\}\}', replace: vaultData['ftp_password'])],
fileEncoding: 'UTF-8', filePath:
" ${WORKSPACE}/application.properties")])
}
}
}
}
感谢您的帮助。
您可以使用 wrap: 通用构建包装器MaskPasswordsBuildWrapper
,如下所示:
pipeline {
agent any
stages {
stage('Build') {
steps {
script {
sh "touch ${WORKSPACE}/application.properties"
sh "echo '{{FTP_PASSWD}}' > ${WORKSPACE}/application.properties"
def vaultData = [ftp_password:'thisismyftppwd']
def ftp_password = vaultData['ftp_password']
wrap([
$class: 'MaskPasswordsBuildWrapper',
varPasswordPairs: [
[password: ftp_password, var: 'ftp_password']
]
]) {
echo "${ftp_password}"
contentReplace(
configs: [
fileContentReplaceConfig(
configs: [
fileContentReplaceItemConfig(
search: '\{\{FTP_PASSWD\}\}',
replace: "${ftp_password}"
)
],
fileEncoding: 'UTF-8',
filePath: "${WORKSPACE}/application.properties"
)
]
)
}
echo '########'
sh "cat ${WORKSPACE}/application.properties"
}
}
}
}
}