6

更简单地用Travis自动发布GitHub Releases

 3 years ago
source link: https://note.qidong.name/2017/10/travis-setup-releases/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

更简单地用Travis自动发布GitHub Releases

2017-10-02 00:11:56 +08  字数:1257  标签: GitHub CI

GitHub每次打Tag时,都会在项目首页的releases那里增加。 Tag是Git的概念,除此之外,GitHub还特有Release(发布)这个概念。 基于Tag,Release除了既有的源码压缩包以外,还可以新增其它发布文件、撰写标题与说明。

TravisGitHub上最流行的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.rbv1.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文件,造成排版、版本管理问题。 这一点可以通过三个步骤,简单修复。

  1. 保存以上代码片段
  2. git checkout .travis.yml
  3. 再把代码片段复制回去

第二个问题是,没有自动配置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的描述。 虽然显示效果比较差,但看在是自动发布的份上,在本例勉强可以接受。

参考


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK