首页 > 解决方案 > Java 代码如何在 Jenkins 构建期间读取 Jenkins Global 凭据?

问题描述

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

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

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

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

我已在 Jenkins中将Secret File添加为全局凭据(不受限制)。(参考 - https://jenkins.io/doc/book/using/using-credentials/

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

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

标签: javajenkins

解决方案


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

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

使用的相当常见的模式:

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

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

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

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


推荐阅读