将 Jenkins 全局凭据传递给 Python 脚本

119次阅读
没有评论

问题描述

在使用 Jenkins 时遇到一个问题:他有一个全局 Jenkins 凭据,以及一个包含以下代码行的配置脚本:

API_TOKEN = "Token XXX"

由于安全原因,他们不能将令牌存储在脚本本身中(脚本位于版本控制中)。用户想知道是否有一种方法可以从 Jenkins 将凭据传递给 Python 配置脚本。

解决方案

请注意以下操作可能因 Jenkins 版本和插件不同而有所差异,做好备份工作。

使用 Jenkins Credentials 插件

对于凭据,CloudBees 推荐使用 Credentials 插件,该插件将凭据注入到调用的脚本可用的环境中。根据 在 Jenkins 构建任务中注入 Secrets 文章:

在您的脚本中,您可以从脚本的环境中获取变量:

import os

API_TOKEN = os.getenv('API_TOKEN')

使用类似的方法,您还可以传递任意变量(除了凭据),使用 EnvInject 插件(请注意其中的警告)。

另一种可能的方法是配置 Jenkins 以将值作为参数传递给您的脚本。在脚本中,您可以使用您首选的方法来处理脚本参数。

使用 Jenkins Pipeline 的 withCredentials

如果您在使用 Pipeline(例如 Jenkinsfile),可以使用 withCredentials。以下是一个简单的示例:

withCredentials([
  usernamePassword(credentialsId: 'my-credentials', usernameVariable: 'user', passwordVariable: 'pw')
]) {
  sh("./my-python-script.py --user \${user} --password \${pw}")
}

您的凭据将自动从控制台输出中隐藏,以防止敏感信息泄漏。

请注意,凭据插件仅在 Jenkins 控制台中隐藏敏感信息。如果 Python 脚本创建日志并将凭据存储在其中,它将无法被掩码。目前,我还不知道有效地清理日志文件的方法。

这些解决方案提供了多种方式来处理将 Jenkins 全局凭据传递给 Python 脚本的问题。您可以根据您的需求和环境选择最合适的方法。

正文完