Travis CI 可以在同一个 repo 的不同分支中使用加密文件吗?

Can Travis CI use an encrypted file in different forks of the same repo?

我正在尝试让 Travis CI 构建在我自己的私人分支和我组织的仓库中工作。

我使用 travis encrypt-file 命令加密了一个配置文件,它似乎在 travis 设置中为我自己的 fork 创建了两个环境变量,看起来像:"encrypted_d1234_key" 和 "encrypted_d1234_iv" .

这些在构建运行时用于解密配置文件,如下所示:

openssl aes-256-cbc -K $encrypted_d1234_key -iv $encrypted_d1234_iv -in test.config.enc -out test.config -d

我能否以某种方式将这些安全环境变量复制到我的 org 的 repo 的设置中,以便构建可以解密配置文件,无论它是在我的分支中还是在我的组织的分支中。

或者有更好的方法来处理这些情况吗?

这可能与以下问题相同:What do I need for Travis-CI to decrypt secure variables on my fork?

我想出了一个方法来让它工作。由于您无法获得 Travis 为您生成的密钥,因此您只需要生成自己的密钥即可。然后,加密你的秘密好东西并将密钥推送到任何需要它们的私人仓库(以及你信任的成员):

openssl aes-256-cbc -K 1000000000000000000000000000000000000000000000000000000000000001 -iv 10000000000000000000000000000001 -in test.config -out test.config.enc

现在,我们将密钥提供给 Travis,Travis 将它们存储在每个 repo 的基础上。这些命令将它们存储在 git:

中设置为 "origin" 的任何回购中
travis env set encrypted_d1234_key 1000000000000000000000000000000000000000000000000000000000000001
travis env set encrypted_d1234_iv 10000000000000000000000000000001

还将它们存储在您组织的存储库中。

travis env set encrypted_d1234_key 1000000000000000000000000000000000000000000000000000000000000001 -r MyOrg/MyRepo
travis env set encrypted_d1234_iv 10000000000000000000000000000001 -r MyOrg/MyRepo

Encrypting Files 文档的 "Manual Encryption" 部分对此进行了(部分)解释。

请注意,有一些 Security Restrictions when testing Pull Requests。 Travis 为您提供了一个环境变量,因此您可以有条件地跳过需要安全配置的测试。