加密文件

请注意,加密文件不可用于 来自 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.

加密多个文件 #

如果您使用命令行客户端加密多个文件,则它会 覆盖加密的条目

如果您需要加密多个文件,请先创建一个敏感文件的存档,然后在构建期间对其进行解密和展开。

假设我们有敏感文件 foobar,运行以下命令

$ 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 上,您可以使用密码再次解密文件。

设置过程如下

  1. 想出一个密码。 首先,您需要一个密码。我们建议使用 pwgen 或 1password 等工具生成随机密码。在我们的示例中,我们将使用 ahduQu9ushou0Roh
  2. 加密密码并将其添加到 .travis.yml 中。 这里我们可以使用 encrypt 命令:travis encrypt super_secret_password=ahduQu9ushou0Roh --add - 请注意,如果您为多个文件多次设置此项,则必须使用不同的变量名,以便密码不会相互覆盖。
  3. 在本地加密文件。 使用您已在本地安装且也已在 Travis CI 上安装的工具(见下文)。
  4. 设置解密命令。 您应该将解密文件的命令添加到 .travis.ymlbefore_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,必须提交到存储库。