git - 在哪里存储持续集成 (CI) 部署的私钥?

标签 git deployment continuous-integration

我正在构建一个基于私有(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 , ChefSalt 。当配置管理系统守护程序运行时,它可以从存储库创建或更新 key 。但话又说回来,如果随意完成,即使这样也可能导致 key 被滥用。

我个人不会将该 key 保留在项目的源存储库中。您可能还会发现有人需要查看代码但无法访问 key 的情况。理想情况下, key 应手动或通过配置管理系统单独部署到应用程序服务器。

关于git - 在哪里存储持续集成 (CI) 部署的私钥?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26727668/

相关文章:

git - git rebase --continue 的行为不一致

SQL报告服务部署

python - 通用 x64 处理器的 Numba 字节码生成?而不是第一次运行编译 SLOW @njit(cache=True) 参数

android - 使用 faSTLane 管理 alpha/beta/release channel 的 bundle id 的正确方法

Azure管道: error occurred while loading the YAML build pipeline: wrong number of segments

continuous-integration - TeamCity - 我可以在开始新构建时取消当前正在运行的相同配置的构建吗?

.net - 如何通过我们的 CI 平台 (Hudson) 自动增加 C# 程序集版本?

git - 将文件从一个存储库的特定提交/哈希复制到另一个(不相关)存储库

git:获取版本/标签中的*新*贡献者(作者)列表

linux - 如何针对 Kerberos 跳过 Git 的密码输入?