我正在构建一个基于私有(private) git 存储库的持续集成部署。我的项目在资源目录中包含一个未版本控制的 PK 文件。当我手动部署时,这工作得很好,我确保私钥的副本位于任何工作站的路径上。
现在我正在从存储库进行部署,我很好奇在哪里存储 key 。这是一个私有(private)仓库,我想我可以只对 PK 进行版本控制,但如果有替代方案,我宁愿不这样做。
有什么提示或技巧吗?
更新:很抱歉含糊其辞,PK 是与 Google API 一起使用的服务帐户。因此,它必须在运行时提供给 Java API 库。例如:
public void startGoogleDrive() {
HttpTransport httpTransport = new NetHttpTransport();
JacksonFactory jsonFactory = new JacksonFactory();
GoogleCredential credential = new GoogleCredential.Builder()
.setTransport(httpTransport)
.setJsonFactory(jsonFactory)
.setServiceAccountId(SERVICE_ACCOUNT_EMAIL)
.setServiceAccountScopes(Arrays.asList(DriveScopes.DRIVE))
.setServiceAccountUser(userEmail)
.setServiceAccountPrivateKeyFromP12File(
new java.io.File(SERVICE_ACCOUNT_PKCS12_FILE_PATH)) // <- private key file
.build();
}
最佳答案
是的,在 Git 存储库中保存凭据或其他敏感数据几乎总是一个坏主意。
据我所知,对于诸如私钥之类的东西进行版本控制的唯一好的做法是将它们放入 configuration management 的私有(private)存储库中。政策,如CFEngine , Puppet , Ansible , Chef或Salt 。当配置管理系统守护程序运行时,它可以从存储库创建或更新 key 。但话又说回来,如果随意完成,即使这样也可能导致 key 被滥用。
我个人不会将该 key 保留在项目的源存储库中。您可能还会发现有人需要查看代码但无法访问 key 的情况。理想情况下, key 应手动或通过配置管理系统单独部署到应用程序服务器。
关于git - 在哪里存储持续集成 (CI) 部署的私钥?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26727668/