我们正在travis-ci服务器上编译Doxygen文档,并希望将它们推送到我们的gh-pages分支.
我该如何处理授权git push
?有人在travis-ci中有一个使用加密变量的例子吗?我应该使用https授权还是SSH密钥?
在环境变量中使用HTTPS API令牌的分步示例
其他人已提到它,但这里有一个更详细的程序.
为网站创建单独的存储库(可选).这将降低您覆盖主存储库的可能性,并使输出文件不会污染它.
在https://github.com/settings/tokens下获取个人访问令牌
仅对公共存储库启用"public_repo"访问,对私有启用"repo".
将令牌保存在某处,因为您只能看到它一次.
在存储库的Travis设置上https://travis-ci.org/
创建一个环境变量:
GITHUB_API_KEY=
并确保将"在构建日志中显示值"标记为"关闭".
这是安全的,因为只有您通过授权推送才能看到这样的环境变量,因此如果恶意用户尝试发出拉取请求来获取您的字符串,则该变量将不存在.
只需确保您永远不会在您的构建中列出您的环境变量!
将以下内容添加到您的.travis.yml
:
after_success: | if [ -n "$GITHUB_API_KEY" ]; then cd "$TRAVIS_BUILD_DIR" # This generates a `web` directory containing the website. make web cd web git init git checkout -b gh-pages git add . git -c user.name='travis' -c user.email='travis' commit -m init # Make sure to make the output quiet, or else the API token will leak! # This works because the API key can replace your password. git push -f -q https://:$GITHUB_API_KEY@github.com/ / -gh-pages gh-pages &>/dev/null cd "$TRAVIS_BUILD_DIR" fi
替代travis加密方法
详细解释:https://stackoverflow.com/a/33109519/895245
GITHUB_API_KEY=
使用travis
gem 加密字符串,并将其添加到您的.travis.yml
:
env: secure:
这样做的好处是它不需要使用Travis Web界面,但需要使用Gem和更多的复制粘贴.
我不知道它是最近的,但Travis现在有一个内置的部署选项,基本上添加到你的travis文件:
deploy: provider: pages skip_cleanup: true local_dir: myfolder/ # or remove this line to upload from root of repo github_token: $GITHUB_TOKEN # Set in travis-ci.org dashboard on: branch: master
确保上传的文件夹中没有.gitignore; 它只上传未被忽略的文件.
请参阅travis的在线官方文档:https: //docs.travis-ci.com/user/deployment/pages/
使用"存储库设置"方法没有公钥问题,您在Github中生成密钥,然后将其粘贴到Travis的秘密/非可见字段中.
上传历史记录问题: 请注意,每次上传都会破坏之前上传的所有数据,而不保留历史记录.
您现在可以(2017年11月以上)通过添加keep_history: true
一行来保留历史记录
这可能是合乎需要的,因为这些快照构建可能非常庞大,并且无论如何都可以随意重现(只需将您的软件仓库从您想要的修订版中分支出来).指向此类工件通常指向最后一次成功构建快照.
但是要触发存储到稳定的位置,只需编辑你的travis以添加标志:
target_branch:分支以推动力,默认为gh-pages
例如target_branch:rc1.2
并在将其设置回快照模式之前运行一次.
可能对发布有用的另一种替代方法(我没有经过亲自测试)是发布到标签请参阅:https://docs.travis-ci.com/user/deployment/releases/
这里的travis-ci文档建议添加它以推送到git repo:
after_success: - chmod 600 .travis/deploy_key.pem # this key should have push access - ssh-add .travis/deploy_key.pem - git remote add deploy DEPLOY_REPO_URI_GOES_HERE - git push deploy
但是,这是不安全的,因为它将您未受保护的私钥存储在github存储库中.
相反,您可以使用travis工具将ssh密钥添加为加密环境变量:
travis encrypt DEPLOY_KEY=--add env.matrix
现在您只需将此行添加到after_success的开头:
cat $DEPLOY_KEY > .travis/deploy_key.pem
请注意,after_success将在构建矩阵中的每个构建中切换,因此如果每个构建中有多个作业,则代码将被多次推送,这将无法做任何事情,但很高兴知道它正在发生.
只是为了添加另一个解决方案,我使用了来自github的HTTPS令牌,对其加密并使用HTTPS进行检查和推送