我有一些安全的(加密的)环境变量的.travis.yml
。现在我需要解密这些变量,以便在不同的项目中使用它们。
是否有简单的方法来做到这一点(除了触发提交并在控制台输出中打印它们)?
您无法从我所理解的本地解密,但您可以恢复密钥/值。从本质上讲,它们必须被解密才能在构建过程中使用。
- 转到当前项目的最后一次构建。
- 选择"Debug Build"
- 使用提供的用户和主机
***********@to2.tmate.io
SSH到实例 - 进入远程shell后,运行
env
。
这将打印所有的环境变量,所以你将不得不挖掘你的安全变量,但他们将在那里。
我不认为你能解密它。公钥是用来加密数据的,只能用travis没有提供的私钥解密。
Daniel的答案可能会起作用,但它依赖于Travis CI的Debug Mode,由于安全考虑,默认情况下该模式对公共存储库是禁用的。
实际上还有另一种方法。它的灵感来自于这篇博客文章"恢复丢失的TRAVISCI变量-两种方法"。
先解释一下:
- 为什么可能?因为Travis-CI必须将其解密为纯文本并将其设置为环境变量,以便在他们的机器上工作。这是你恢复它的机会。
- 然而
echo $SECRET
不会从控制台日志中显示它,因为Travis-CI扫描所有标准输出并过滤该特定值。(咄。)这根本不是一件坏事,因为您不希望在控制台日志中显示您恢复的秘密,无论如何都可以使用。解决方案是使用另一个KNOWN_SECRET加密它,在您需要安装的命令行工具ccrypt
的帮助下。 - 最后,您需要另一个工具对加密的秘密进行编码,以便它在控制台日志中显示为正常字符。命令行工具
base64
会派上用场,因为它已经在Travis CI的构建机器上可用,并且在您的本地git bash(如果您在Windows上使用git)或shell(如果您使用Linux)中可用。
TL;DR:就像1-2-3一样简单!
- 添加或修改您的
.travis.yml
以包含以下内容。
sudo: required
install:
- sudo apt-get install -y ccrypt
- echo $UNKNOWN_SECRET > info.txt
- ccencrypt info.txt -K $KNOWN_SECRET
- cat info.txt.cpt | base64
将上述更改提交到实验分支,并触发Travis CI运行。浏览控制台日志,找到那行输出,比如
A1B2C3D4...
。在本地机器上运行:
echo `A1B2C3D4...` | base64 -d > info.txt.cpt
sudo apt-get install -y ccrypt # If you haven't already
ccrypt –d info.txt.cpt
# When prompt, type in the KNOWN_SECRET, and then you will have info.txt in plain text