我们正在使用https克隆一个repo,如下所示:Jenkins build:
git clone https://${repo_username}:${repo_password}@internalgit.com/scm/project/repo.git -b ${branch_name} $tmp
在上面的命令中:$ {repo_username}& $ {repo_password}是作为机密传递的Jenkins变量,因此它们不会以明文形式记录。
但是,这会将用户凭据添加到git远程URL,如果出现任何推送失败,则会在以下错误中以明文形式显示凭据:
[ERROR] To https://user:password@internalgit.com/scm/project/repo.git
[ERROR] ! [remote rejected] master -> master (pre-receive hook declined)
[ERROR] error: failed to push some refs to 'https://user:password@internalgit.com/scm/project/repo.git'
推送失败可能有许多正当理由,但是,屏幕上的打印凭据是不可接受的。
有没有办法:
继续工作但在我们的用例中不可接受:
答案 0 :(得分:1)
假设输出可见但输入不是:
<删除> git clone https://${repo_username}:${repo_password}@internalgit.com/scm/project/repo.git -b ${branch_name} $tmp | sed "s/${repo_password}/<redacted>/g"
应该做你想做的事。
我误解了这个问题;对于这个工作的答案,你必须在每次推送时运行它(即git push 2>&1 | sed "s/${repo_password}/<redacted>/g"
。我也错过了git打印到stderr
,所以除非你想使用process substition ,重定向输出将很困难。
如果密码包含任何特殊的正则表达式字符,您应该转义密码(否则sed可能会比您的意思更多或更少)。 This answer有一些现成的解决方案可以转义字符串以与sed一起使用。