2014-11-04 133 views
1

我正在构建一个基于私有git存储库的持续集成部署。我的项目在资源目录中包含一个未版本化的PK文件。当我手动部署时,这工作正常,我确保私钥的副本位于任何工作站的路径上。何处存储用于持续集成(CI)部署的私钥?

现在我正在从存储库进行部署,我很好奇在哪里存储密钥。这是一个私人回购,我想我可以只是版本的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(); 
} 

回答

2

是的,在Git存储库中保存凭据或其他敏感数据几乎总是一个坏主意。

唯一的好做法,其中我知道的版本的东西如私钥将它们放在一个configuration management政策的私人仓库,如CFEnginePuppetAnsibleChefSalt。当配置管理系统守护进程运行时,它可以从存储库创建或更新密钥。然后,如果偶然完成,即使这可能导致可能被滥用的钥匙。

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

+0

感谢您的修改答案并提醒Ed – Sam 2014-11-04 21:13:18

相关问题