我有一个基于Jenkins的Java项目。此代码需要运行Secret文件( .pem格式)。我无法将文件保存在Java项目本身中(出于安全原因)。
文件格式为key_v2-XXXXX.pem,内容为
[1, 7, 2, 8, 3, 9]
当前,Java代码正在访问Local中存在的Secret文件。因此本地构建很好。 但是,当在Jenkins上执行此代码时,构建将失败,因为它找不到本地文件或Jenkins无法访问该文件。
我在詹金斯(Jenkins)中添加了秘密文件作为全局凭据(不受限制)。 (参考-https://jenkins.io/doc/book/using/using-credentials/)
我需要找到一种方法,使 Java代码在运行Jenkins构建时访问此Secret文件(存储在Jenkins中)。
或者还有其他方法可以解决这种情况吗?
答案 0 :(得分:0)
有很多方法可以做到这一点。
最简单的方法是使用Jenkins凭据插件(可以定义密钥或文件等)。https://wiki.jenkins-ci.org/display/JENKINS/Credentials+Plugin
使用的常见模式:
1)使用CI / CD工具的加密功能(即Jenkins,使用Jenkins凭据插件)
2)将您的秘密存储在SCM中(显然已加密)。然后,问题就变成了在构建时安全地传送机密(或在启动时使其可用),以便能够解密已部署的机密(密码,凭据,机密,证书)。这就是秘密管理工具(例如Vault)的所在。秘密的管理工具可让您安全地检索您的秘密,以便在需要时将其解密。
3)另一种方法是将所有秘密,证书等实际存储在SCM之外的秘密管理工具本身中,并在部署/启动时进行检索。
我想说的是使用方法2。在这种情况下,您的代码每次都以相同的方式(相同的文件路径等)访问文件。当涉及到构建时,您尝试解密的实际文件位于工作目录中的某个位置。因此,只要您的Java代码知道知道在哪里寻找秘密文件等,那么访问Java代码就不会成为问题。然后,使用Credentials插件Secret来解密文件,这是构建的第一步。