加密文件
请注意,加密文件不可用于 来自 fork 的拉取请求.
先决条件 #
在按照本指南中的示例操作之前,请确保您已经
- 通过运行
$ gem install travis
安装了 Travis CI 命令行客户端 - 使用
$ travis login --com
登录到 Travis CI
有关 Ruby 和操作系统的系统所需版本,请参阅命令行客户端 安装说明.
从 2021 年 6 月开始,travis-ci.org 已停用,因此不再受支持。
自动加密 #
假设
- 存储库已在 Travis CI 上设置
- 您已安装并设置了 Travis CI 命令行客户端的版本 1.7.0 或更高版本(您已登录)
- 您拥有存储库的本地副本,以及一个终端,您当前的工作目录是在该副本中
- 在存储库中有一个名为 super_secret.txt 的文件,您需要它在 Travis CI 上,但您不想将其内容发布到 GitHub 上。
- 稍后加密另一个文件将 覆盖 安全变量,使旧文件无法使用。
travis encrypt-file
命令将使用对称加密 (AES-256) 为您加密文件,并将秘密存储在安全变量中。它将输出您可以在构建脚本中使用的命令来解密文件。
$ travis encrypt-file super_secret.txt
encrypting super_secret.txt for rkh/travis-encrypt-file-example
storing result as super_secret.txt.enc
storing secure env variables for decryption
请将以下内容添加到您的构建脚本中(例如,在您的 .travis.yml 文件的 before_install 阶段)
openssl aes-256-cbc -K $encrypted_0a6446eb3ae3_key -iv $encrypted_0a6446eb3ae3_iv -in super_secret.txt.enc -out super_secret.txt -d
确保将 super_secret.txt.enc 添加到 git 存储库中。确保不要将 super_secret.txt 添加到 git 存储库中。将对 .travis.yml 的所有更改提交。
您也可以使用 --add
使其自动将解密命令添加到您的 .travis.yml
中
$ travis encrypt-file super_secret.txt --add
encrypting super_secret.txt for rkh/travis-encrypt-file-example
storing result as super_secret.txt.enc
storing secure env variables for decryption
Make sure to add super_secret.txt.enc to the git repository.
Make sure not to add super_secret.txt to the git repository.
Commit all changes to your .travis.yml.
加密多个文件 #
如果您使用命令行客户端加密多个文件,则它会 覆盖加密的条目。
如果您需要加密多个文件,请先创建一个敏感文件的存档,然后在构建期间对其进行解密和展开。
假设我们有敏感文件 foo
和 bar
,运行以下命令
$ tar cvf secrets.tar foo bar
$ travis encrypt-file secrets.tar
$ vi .travis.yml
$ git add secrets.tar.enc .travis.yml
$ git commit -m 'use secret archive'
$ git push
并将解密步骤添加到您的 .travis.yml
中,根据您的需要调整 $*_key
和 $*_iv
before_install:
- openssl aes-256-cbc -K $encrypted_5880cf525281_key -iv $encrypted_5880cf525281_iv -in secrets.tar.enc -out secrets.tar -d
- tar xvf secrets.tar
警告 #
有报道称此功能在本地 Windows 机器上无法使用。请使用 WSL(适用于 Linux 的 Windows 子系统)或 Linux 或 macOS 机器。
手动加密 #
假设
- 存储库已在 Travis CI 上设置
- 您已安装并设置了 Travis CI 命令行客户端的最新版本(您已登录)
- 您拥有存储库的本地副本,以及一个终端,您当前的工作目录是在该副本中
- 在存储库中有一个名为 super_secret.txt 的文件,您需要它在 Travis CI 上,但您不想将其内容发布到 GitHub 上。
该文件可能太大,无法通过 travis encrypt
命令直接加密。但是,您可以使用密码加密文件,然后加密密码。在 Travis CI 上,您可以使用密码再次解密文件。
设置过程如下
- 想出一个密码。 首先,您需要一个密码。我们建议使用 pwgen 或 1password 等工具生成随机密码。在我们的示例中,我们将使用
ahduQu9ushou0Roh
。 - 加密密码并将其添加到 .travis.yml 中。 这里我们可以使用
encrypt
命令:travis encrypt super_secret_password=ahduQu9ushou0Roh --add
- 请注意,如果您为多个文件多次设置此项,则必须使用不同的变量名,以便密码不会相互覆盖。 - 在本地加密文件。 使用您已在本地安装且也已在 Travis CI 上安装的工具(见下文)。
- 设置解密命令。 您应该将解密文件的命令添加到
.travis.yml
的before_install
部分(见下文)。
确保将 super_secret.txt
添加到您的 .gitignore
列表中,并提交加密文件和 .travis.yml 更改。
使用 GPG #
设置
$ travis encrypt super_secret_password=ahduQu9ushou0Roh --add
$ gpg -c super_secret.txt
(will prompt you for the password twice, use the same value as for super_secret_password above)
.travis.yml
的内容(除了您可能在其中包含的任何其他内容)
env:
global:
secure: ... encoded secret ...
before_install:
- echo $super_secret_password | gpg --passphrase-fd 0 super_secret.txt.gpg
加密的文件名为 super_secret.txt.gpg
,必须提交到存储库。
使用 OpenSSL #
设置
$ travis encrypt super_secret_password=ahduQu9ushou0Roh --add
$ openssl aes-256-cbc -k "ahduQu9ushou0Roh" -in super_secret.txt -out super_secret.txt.enc
(keep in mind to replace the password with the proper value)
.travis.yml
的内容(除了您可能在其中包含的任何其他内容)
env:
global:
secure: ... encoded secret ...
before_install:
- openssl aes-256-cbc -k "$super_secret_password" -in super_secret.txt.enc -out super_secret.txt -d
加密的文件名为 super_secret.txt.enc
,必须提交到存储库。