如何解决如何为sh命令从管道隐藏敏感数据
我有Jenkinsfile
创建了mt
对象并将vaultToken
传递给了psl库:
Jenkinsfile:
@Library('shared-library@psl')
Maintenance mt = new Maintenance()
mt.setVaultToken(config.vaultToken)
mt.setApiUrl(config.apiUrl)
pslService.createMaintenance(mt)
pslService:
String createMaintenance(Maintenance mt){
dockerBuildHelper.getDockerImage(dockerBuildHelper.getWdBuildDockerImageName()).inside('-u root'){
String cmd = "curl -X POST '${mt.getApiUrl()}'" +
" -H 'Content-Type: application/json'" +
" -H 'Authorization: Api-Token ${mt.getVaultToken()}'" +
" -d ${mt.getPayload()} | jq -r '.id'"
return sh(script: cmd,returnStdout: true).trim()
}
}
但这会打印curl命令并在管道中公开Vault令牌。
有人知道我如何隐藏敏感信息和/或整个curl命令吗? 除非别无选择,否则我不想将其存储在凭据存储中。
我听说我可以使用set +x
。但是我不确定如何使用它以及是否有帮助。有什么想法吗?
解决方法
尝试使用掩码密码插件。或在詹金斯中创建秘密,然后在管道的环境块中调用它们。
,我和set +x
String cmd = """set +x
curl -X POST '${mt.getApiUrl()}' -H 'Content-Type: application/json' -H 'Authorization: Api-Token ${mt.getVaultToken()}' -d ${mt.getPayload()} | jq -r '.id'
"""
return sh(script: cmd,returnStdout: true).trim()