我尝试了各种解决方案,找不到有效的方法。我的问题是我希望能够在我的Travis设置中将部署密钥(GitHub称之为个人授权令牌或个人OAuth令牌)放入加密变量中存储库,以便配置文件永远不必更改。例如,我想这样做:
deploy:
api_key:
secure: $DEPLOYMENT_KEY
我现在可以签入不需要更改的代码以便部署。如果有多个人分配我的存储库,他们可以简单地添加他们自己的Travis变量而不是触及代码。
然而,我没有成功地让它发挥作用。如果可能的话,将会实现什么序列?
我接受了下面的答案,让我走上了正确的轨道,虽然我的配置文件中需要的实际文本没有显示。我把它放在这里:
deploy:
api_key: $DEPLOYMENT_KEY
我有一个“尤里卡!”时刻并意识到任何“安全:”的地铁都可以用实际的未加密的值替换,这是Travis在替换加密的变量时插入的值。 (它执行解密并将结果放入变量中,然后通过美元符号将其替换为api_key
。)
答案 0 :(得分:0)
你不能写:
deploy:
api_key:
secure: $DEPLOYMENT_KEY
解密发生在Travis CI构建处理的早期阶段;加密的值将传递给应用程序,该应用程序编译要构建的bash脚本。由于负责解密密码的部分对$DEPLOYMENT_KEY
一无所知,因此该配置将失败。
要实现您的目标,您可以使用存储库设置来定义机密。请参阅https://docs.travis-ci.com/user/environment-variables#Defining-Variables-in-Repository-Settings。
答案 1 :(得分:0)
因此,我了解到:
.travis.yml
,或者,您将未加密的密钥放在Travis环境变量中,这样,如果GitHub项目的任何开发人员都可以在.travis.yml
中添加以下内容:
echo "${API_TOKEN:0:1}%POISON%${API_TOKEN:1}"
他可以通过读取travis日志来获取您的私有API_TOKEN秘密(即使您的变量未设置为DISPLAY VALUE IN BUILD LOG
,因为这种黑客行为会破坏日志中通常的[secure]
替换)
提醒:由于GitHub API_TOKEN不受存储库的限制,坏家伙可以对您所有的存储库执行任何操作(对私有存储库的写访问权限和读访问权限)。
注意:我发现此blog post带有更安全的解决方案(但不是完美的解决方案),该解决方案要求外部服务器提供临时API_TOKEN。
还有其他解决方案吗?