使用travis自动部署到gh-pages分支
在开发开源项目中,通常会在gh-pages分支上放文档或者示例。如果每次都是手动更新很麻烦。使用travis进行持续集成自动部署就方便很多。
主要有两种方法实现,一种是使用github的Personal Access Token,另一种是使用SSH。
假设我们现在在github上有一个项目,接下来我们就一步一步实现使用travis自动部署到gh-pages分支。
这里不涉及具体如何写.travis.yml,可以参考官方文档或者自行搜索。
相同操作
两种方法都涉及一些相同的操作。
-
在travis官网上激活项目
以github帐号登录travis官网,选择项目并激活。
-
安装travis客户端
travis客户端是ruby包,使用gem进行安装
$ gem install travis安装ruby可以参考之前的文章。
-
登录travis
使用github帐号登录travis
$ travis login --org -
创建一个空的
.travis.yml文件$ touch .travis.yml
Token
-
生成token
在github生成Personal access token,路径是
Settings -> Developer Settings -> Personal access tokens。 - 使用travis客户端加密token
$ travis encrypt -r <github-user-name>/<repo-name> GH_TOKEN=<token> --add在项目根目录运行以上命令,加密token。运行完成后,
.travis.yml中会添加全局变量secure和GH_TOKEN -
在
.travis.yml中添加部署到gh-pages分支的脚本script: - cd examples - git init - git remote add origin https://<github-user-name>:${GH_TOKEN}@gihub.com/<github-user-name>/<ropo-name>.git - git add . - git commit -m 'Update examples' - git push -u -f origin master:gh-pages以上的实例把examples的内容推送到了gh-pages分支。需要注意的是如果已经存在remote,要先删除再添加带token的remote,因为我们无法控制travis中克隆时是否会带token。
SSH
- 生成SSH私钥公钥对,
$ ssh-keygen -t rsa -C "<your_email@example.com>"注意不要
passphrase,因为没有办法输入。 -
在github上添加SSH公钥
添加路径是
Settings -> SSH and GPG keys。 - 使用travis客户端加密SSH私钥
$ travis encrypt-file ~/.ssh/id_rsa --add这里以使用
~/.ssh/id_rsa为例。运行完成后,当前路径下会生成加密文件id_rsa.enc,同时.travis.yml中的before_install会自动添加生成私钥的命令。不过
1.8.8客户端有一个bug,生成的命令的-out选项的值多了一个\,这会导致报错:~/.ssh/id_rsa: No such file or directory删掉多余的
\就好了。已经向官方提了issue,期待下个版本解决。 -
在
.travis.yml中添加部署到gh-pages分支的脚本before_install: - openssl aes-256-cbc -K $encrypted_xxx_key -iv $encrypted_xxx_iv -in bar_rsa.enc -out ~/.ssh/bar_rsa -d - chmod 600 ~/.ssh/bar_rsa - eval "$(ssh-agent -s)" - ssh-add ~/.ssh/bar_rsa - git config --global user.name <user-name> - git config --global user.email <email> - cd ~ - git clone --depth=50 git@github.com:<gihub-user-name>/<repo-name>.git <dir-name> - cd <dir-name> - git checkout master script: - cd examples - git init - git remote add origin git@github.com:<github-user-name>/<repo-name>.git - git add . - git commit -m 'Update examples' - git push -u -f origin master:gh-pages after_success: - rm -rf ~/.ssh