更简单地用Travis自动发布GitHub Releases
2017-10-02 00:11:56 +08 字数:1257 标签: GitHub CIGitHub每次打Tag时,都会在项目首页的releases
那里增加。
Tag是Git的概念,除此之外,GitHub还特有Release(发布)这个概念。
基于Tag,Release除了既有的源码压缩包以外,还可以新增其它发布文件、撰写标题与说明。
Travis是GitHub上最流行的CI服务,开源免费。 孤一年前曾撰文《从Travis回GitHub》,描述如何配置Travis,让其自动根据Tag,发布文件到GitHub Release。
本文介绍一种更简单的办法。
预备 ¶
这种方法需要已经安装travis.rb。 这是Travis的CLI客户端,用Ruby写的。 安装方法,大致如下,详见官方文档。
gem install travis -v 1.8.8 --no-rdoc --no-ri
在不知道什么版本起,这个CLI有了setup
这个子命令,可以自动生成一些.travis.yml
文件的片段。
本文介绍的方法,就是基于这个子命令,可以省去很多人工操作。
为了确保没有版本问题,建议在使用前,先升级travis.rb到v1.8.8。
实战样例 ¶
输入travis setup releases
,并且根据提示,依次输入GitHub账户、密码、需要上传的文件等信息。
以下以孤在yanqd0/docker-hugo中的配置为例,展示过程与结果。
$ travis setup releases
Username: yanqd0
Password for yanqd0: ****************
File to Upload: Dockerfile
Deploy only from yanqd0/docker-hugo? |yes| yes
Encrypt API key? |yes| yes
完成后,即可在.travis.yml
文件,得到以下代码片段。
deploy:
provider: releases
api_key:
secure: jm5XX...
file: Dockerfile
on:
repo: yanqd0/docker-hugo
这个工具有两点不好。
一是会自动格式化整个.travis.yml
文件,造成排版、版本管理问题。
这一点可以通过三个步骤,简单修复。
- 保存以上代码片段
git checkout .travis.yml
- 再把代码片段复制回去
第二个问题是,没有自动配置tags: true
。
孤习惯在打Tag时做发布,而不是每次提交时。
所以,只能把它手动添加到on:
里去。
...
on:
repo: yanqd0/docker-hugo
tags: true
一个小坑 ¶
要注意,如果此前设置过CI的分支限制,tags: true
不会生效。
因为,对Travis来说,Tag也算是一种branch。
branches:
only:
- master
去掉以上代码块,否则自动发布将不会执行。
原理简介 ¶
travis setup releases
的原理是,利用GitHub的账户密码,生成一个access token。
如本例,就叫automatic releases for yanqd0/docker-hugo — public_repo
。
与直接配置账户与(加密后的)密码在.travis.yml
相比,用token会更安全。
前者拥有所有权限,而后者仅有公开库的访问权限。
得到这个token后,travis.rb自动将其加密,并配置到.travis.yml
中。
自动配置后的格式化,也有玄机。
travis.rb并非简单地将其写到文件最后,而是通过解析YAML的方式,插入其中,整个文件会被重写。
如果有其它多个deploy
配置,这个命令并不会导致错误。
在GitHub上,这条命令执行后,会新增一个token, 可以在【Settings】【Personal access tokens】这个页面查看。
默认情况下,自动发布的标题是Tag名,描述是Tag的描述。 虽然显示效果比较差,但看在是自动发布的份上,在本例勉强可以接受。