如何停止 Jenkins 控制台上的服务帐户凭据打印?

How to stop service account credential printing on Jenkins console?

我有构建项目的 Jenkins 服务器,构建 docker 图像并将其推送到 Google Container Registry。

我正在使用服务帐户使用命令 docker login -u _json_key -p "$(cat ${service-account.json})" https://gcr.io 登录 GCR,如所述 here

执行此行时,服务内容-account.json 文件会打印在 Jenkins 管道的控制台上。

如何停止在控制台上打印凭据?

如果您将 JSON 密钥文件和与之关联的用户名存储为 Jenkins 中的凭据,然后您可以在 withCredentials 步骤中引用密钥文件 (https://jenkins.io/doc/pipeline/steps/credentials-binding/)

在 withCredentials 步骤中使用的任何凭据都将自动屏蔽

诀窍是使用 --password-stdin 标志。

cat ${service-account.json} | docker login -u _json_key --password-stdin https://gcr.io

Provide a password using STDIN. To run the docker login command non-interactively, you can set the --password-stdin flag to provide a password through STDIN. Using STDIN prevents the password from ending up in the shell’s history, or log-files.

https://docs.docker.com/engine/reference/commandline/login/

注意:密码文件应仅包含密码,不应进行 json 编码。