Travis-CI加密文件
前言
原文: Encrypting Files
请注意,加密文件不适用于pull requests from forks。
先决条件
1 | # 译者追加 |
有关系统所需版本的Ruby
和操作系统的更多信息,请参阅命令行客户端安装说明。
自动加密
假设:
- 这个仓库设置在了
Travis CI
上 - 你安装了1.7.0以上版本的
Travis CI
命令行客户端, 并成功登录Travis CI
- 你
clone
了仓库到本地, 并且工作目录pwd
在该本地仓库下 - 你在仓库中有一个名为
super_secret.txt
的文件, 你想要在Travis CI
使用这个文件,但你不想在GitHub
上公开这个文件的内容。
travis encrypt-file
命令将使用对称加密(AES-256)为你加密文件, 并将密钥存储在secure
变量中。travis encrypt-file
命令将输出以下命令, 你可以在你的构建脚本中解密这个文件。
1 | $ travis encrypt-file super_secret.txt |
您也可以使用--add
选项自动将解密命令添加到您的.travis.yml
1 | $ travis encrypt-file super_secret.txt --add |
加密多个文件
直接加密多个文件会有bug
,命令行客户端将会覆盖前一个加密文件。
如果您需要加密多个文件,请首先创建敏感文件的压缩包,然后在构建期间将其解密并解压.
假设我们有敏感文件foo
和bar
, 运行以下命令.
1 | $ tar cvf secrets.tar foo bar |
然后在.travis.yml
中添加解密步骤, 根据你的需求调整$*_key
和$*_iv
.
1 | before_install: |
警告
这个函数在本地Windows
机器上不起作用。 请使用WSL
(适用于Linux
的Windows
子系统)或Linux
或OS X
操作系统。
手动加密
假设:
- 这个仓库设置在了
Travis CI
上 - 你安装了1.7.0以上版本的`Travis CI命令行客户端, 并成功登录
- 你
clone
了仓库到本地, 并且工作目录pwd
在该本地仓库下 - 你在仓库中有一个名为
super_secret.txt
的文件, 你想要在Travis CI
使用这个文件,但你不想在GitHub
上公开这个文件的内容。
该文件可能太大,无法通过travis encrypt
命令直接加密。
但是,您可以使用密码来加密文件,然后再加密这个密码。在Travis CI上,您可以使用密码解密这个文件。
设置过程如下所示:
- 创建密码。首先,你需要一个密码。我们建议使用
pwgen
或1password
等工具生成随机密码。在我们的例子中,我们将使用ahduQu9ushou0Roh
作为密码。 - 加密这个密码并添加到.travis.yml。这里我们可以使用这个加密命令:
travis encrypt super_secret_password=ahduQu9ushou0Roh --add
, 注意,如果你有多个文件需要手动加密, 你必须使用不同的变量名, 这样密码就不会相互覆盖。 - 本地加密文件。使用你已经安装在本地的工具
GPG
或OpenSSL
,它也安装在Travis CI
上(见下文)。 - 设置解密命令。您应该将用于解密文件的命令添加到
.travis.yml
的before_install
阶段(请参阅下文)。
确保添加super_secret.txt
到你的.gitignore
文件中, 并提交你的加密后的文件
和.travis.yml
.
使用GPG加密
设置:
1 | $ travis encrypt super_secret_password=ahduQu9ushou0Roh --add |
1 | # .travis.yml |
加密的文件名为super_secret.txt.gpg
, 并且必须被提交到仓库。
使用OpenSSL
设置:
1 | $ travis encrypt super_secret_password=ahduQu9ushou0Roh --add |
1 | # .travis.yml |
加密的文件名为super_secret.txt.enc
, 并且必须被提交到仓库。