【问题标题】:How can Java code read a Jenkins Global credentials during Jenkins build?Java 代码如何在 Jenkins 构建期间读取 Jenkins Global 凭据?
【发布时间】:2019-02-11 03:51:27
【问题描述】:

我有一个基于 Jenkins 的 Java 项目。此代码需要一个 Secret 文件(.pem 格式)才能运行。我无法将文件保存在 Java 项目本身中(出于安全原因)。

文件格式为key_v2-XXXXX.pem,内容为

-----BEGIN PRIVATE KEY-----
XXX
XXXX
-----END PRIVATE KEY-----

目前,Java 代码正在访问 Local 中存在的 Secret 文件。所以本地构建很好。 但是在 Jenkins 上执行此代码时,构建失败,因为它找不到本地文件或 Jenkins 无法访问该文件。

我已将 秘密文件 添加为 Jenkins 中的全局凭据(不受限制)。 (参考——https://jenkins.io/doc/book/using/using-credentials/

我需要找到一种方法让 Java 代码 在运行 Jenkins 构建时访问此 Secret 文件(存储在 Jenkins 中)。

或者有没有其他方法可以处理这种情况?

【问题讨论】:

  • 您要检索的 Secret 是文件还是密钥?

标签: java jenkins


【解决方案1】:

有很多方法可以做到这一点。

其中最简单的方法是使用 Jenkins 凭据插件(可以定义密钥或文件等)https://wiki.jenkins-ci.org/display/JENKINS/Credentials+Plugin

使用的相当常见的模式:

1) 使用 CI/CD 工具加密功能(即 Jenkins,使用 Jenkins Credentials Plugin)

2) 将您的秘密存储在 SCM 中(显然是加密的)。然后问题就变成了在构建时安全地传递秘密(或在启动时提供),以便能够解密已部署的秘密(密码、凭据、秘密、证书)。这就是秘密管理工具(例如 Vault)的用武之地。秘密管理工具将允许您安全地检索您的秘密,以便在需要时用于解密。

3) 另一种方法是将 SCM 之外的所有秘密、证书等实际存储在秘密管理工具本身中,并在部署/启动时检索它们。

我会说使用方法 2。让您的代码每次都以相同的方式(相同的文件路径等)访问文件。当涉及到构建时,您尝试解密的实际文件位于工作目录中的某个位置。因此,只要代码知道在哪里查找机密文件等,让您的 Java 代码访问它应该不是问题。然后使用 Credentials 插件 Secret 来解密文件作为构建的初始步骤。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-30
    • 2017-04-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多