How to publish to Github Pages from Travis CI?
我们正在Travis CI服务器上编译doxygen文档,并希望将其推送到我们的GH页面分支。
我如何处理
环境变量中包含https api标记的分步示例
其他人也提到过,但这里有一个更详细的过程。
为网站创建单独的存储库(可选)。这将减少覆盖主存储库的可能性,并防止输出文件污染主存储库。
在https://github.com/settings/tokens下获取个人访问令牌
仅对公共存储库启用"public_repo"访问,对private启用"repo"。
将令牌保存在某个地方,因为您只能看到它一次。
在存储库的travis设置中,
1 | GITHUB_API_KEY=<token> |
并确保将"生成日志中的显示值"标记为"关闭"。
这是安全的,因为只有经过授权的推送才能看到这样的环境变量,所以如果恶意用户试图发出请求以获取字符串,那么该变量就不存在。
只要确保永远不会在构建中列出环境变量!
在您的
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | 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://<me>:[email protected]/<me>/<myrepo>-gh-pages gh-pages &>/dev/null cd"$TRAVIS_BUILD_DIR" fi |
替代Travis加密方法
详情请访问:https://stackoverflow.com/a/33109519/895245
用
1 2 | env: secure: <encrypted> |
它的优点是不需要使用Travis Web界面,但需要使用gem和更多的复制粘贴。
我不知道它有多新,但Travis现在有一个内置的部署选项,基本上添加到您的Travis文件中:
1 2 3 4 5 6 7 | 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以添加标志:目标分支:要强制执行的分支,默认为GH页例如,目标公司:RC1.2
并在将其设置回快照模式之前运行一次。
另一个可能对发行版有好处的选择是发布到一个标签上,请参见:https://docs.travis-ci.com/user/deployment/releases/
这里的travis ci文档建议将其添加到一个git repo中:
1 2 3 4 5 | 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密钥添加为加密的环境变量:
1 | travis encrypt DEPLOY_KEY=<private ssh key with write access> --add env.matrix |
现在您只需将这一行添加到成功后的开头:
1 | cat $DEPLOY_KEY > .travis/deploy_key.pem |
请注意,成功后将在构建矩阵中的每个构建中切换,因此如果每个构建有多个作业,代码将被多次推送,这不会做任何事情,但很好地知道它正在发生。
为了添加另一个解决方案,我使用了一个来自Github的HTTPS令牌,对其进行加密,并使用HTTPS进行签出和推送
几天前我刚写了一篇关于这个的博客。以下是简介:
为此,我编写了一个自定义部署脚本。脚本的核心功能如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | #!/bin/bash git clone --depth=1 --branch=master"https://github.com/iBug/iBug.github.io.git" deploy cd deploy git rm -rf . cd .. mv _site/* deploy cd deploy git add --all git config user.name"Travis CI" git config user.email"[email protected]" git commit --message"Auto deploy from Travis CI" git remote add deploy"https://[email protected]/iBug/iBug.github.io.git" &>/dev/null git push deploy master &>/dev/null |
现在转到https://github.com/settings/tokens并生成一个token。给予它1〔0〕的特权。转到travis ci上的存储库设置,并存储变量名为
将部署脚本添加到travis:
1 2 3 | script: bundle exec jekyll build after_success: - bash .travis/deploy.sh |
把这些东西推到Github上,Travis就会被触发。
我的博客在这里。如果在这里作为答案发布,它是全面的,因此是冗余的(因为堆栈溢出用户大多是经验丰富的开发人员)。我在博客中发布的脚本也缺少一个功能:它不保留已构建站点的提交历史记录,而上面这个答案中的脚本却保留了。