如何在 Jenkins 控制台输出中隐藏密码?

How to hide passwords in Jenkins console output?

Mask Passwords 插件只允许将预设密码传递到构建过程中,因此它对作业的安全性没有任何作用。

我需要一个每次作业 运行 时都需要输入的密码参数(作为参数),我需要在控制台输出中屏蔽它。

根据我正在阅读的内容,管理 Jenkins -> 配置系统并选择屏蔽密码参数应该有效,但由于某种原因不是这样。有什么建议吗?

使用 Jenkins 1.609.1 和 Mask Passwords Plugin 2.7.3 进行测试。您需要在 "Configure System" 以及您要使用它的工作中激活它。在作业配置中有一个点"Mask passwords",它必须被激活,然后将使用全局配置来屏蔽密码。

如果您有 Linux 构建器,您可以隐藏 shell 命令的输出 在命令文本框中执行 shell 下,只需在第一行添加行:

#!/bin/bash +x
some other commands...

这将仅在控制台输出中隐藏带有密码的命令的输出

可以用Mask Passwords Plugin 这个很好用 https://wiki.jenkins-ci.org/display/JENKINS/Mask+Passwords+Plugin

我在这里使用 "Inject passwords to the build as environment variables" 表格 "Build Environment"。它真的很好用。它将隐藏控制台的密码。 更重要的是,它还通过 "password parameter"

隐藏用户输入的密码

真的很酷!! :)

请在下面找到我的发现和解决方案[不使用 Mask Passwords 插件]:

关于我的詹金斯工作的简要说明: 我写了一个作业,它根据 运行 时间给定的参数从 Nexus 下载工件,然后建立数据库 SQL 连接并使用 maven flyway 插件部署 SQL 脚本。我的工作需要 - 环境、数据库架构、工件版本号、Flyway 命令、数据库用户及其密码作为输入参数。

关于问题的简要背景: 在将密码作为 MAVEN GOAL(参数)传递时,它以纯文本形式出现在 Jenkins 控制台中。 虽然我在 运行 时使用 "Password Parameter" 传递密码,但随后它也以纯文本形式出现在控制台中。

我尝试使用 "secret text" 来加密密码,但后来我的工作开始失败,因为加密的密码正在传递给无法连接到数据库的 Maven Goals。

解法:

我使用了构建环境中的"Inject passwords to the build as environment variables"并将其值定义为我的"password parameter"(我的密码参数名称是 db_password),我在 运行 时将其作为参数传递(例如:我将我的注入密码值定义为:${db_password})。

这是按预期工作的。我在 运行 工作时传递的密码是 [*******]

[console log: Executing Maven: -B -f /work/jenkins_data/workspace/S2/database-deployment-via-flyway-EDOS/pom.xml clean compile -Ddb=UAT_cms_core -DdatabaseSchema=cms-core -Dmode=info -DdeploymentVersion=1.2.9 -Ddb_user=DB_USER -Ddb_password=[*******] ]

您可以使用凭据。添加秘密文本凭据并提供您将使用的 ID,如下所示:

          withCredentials([string(credentialsId: 'DOCKER_USER', variable: 'DOCKER_USER'), string(credentialsId: 'DOCKER_PASSWORD', variable: 'DOCKER_PASSWORD')]) {
            sh "docker login -u $DOCKER_USER -p $DOCKER_PASSWORD"
            sh "docker push '$DOCKER_USER/appName:test'" 
          }

DOCKER_USERDOCKER_PASSWORD 在 jenkins 凭据存储中,将在日志

中被 *** 替换