利用travis发布nodejs

最近编写了一个vscode插件,又懒着不想发布到vscode,想着直接在vscode里安装即可,那需要我把build好的插件放到github releases里,每次更新插件后可以自动打包并发布。当当当,利用travis做到了这一点,其实travis可以做很多功能的。

Travis CI是什么?

官网地址: https://travis-ci.org/

Test and Deploy with Confidence
Easily sync your GitHub projects with Travis CI and you’ll be testing your code in minutes!

轻松的集成到github里,使我们的项目便于测试和部署。

注册登陆travis CI

直接点击官网有上角的Signin with github即可。

在个人中心可以看到所有关联的github项目,但此时还不能跑travis ci,我们还缺少了一个重要的东西:.travis.yml

.travis.yml

.travis.yml文件是我们的自动化测试/部署的声明文件,当Travis CI检测到我们的.travis.yml文件,会在Travis Dashboard里看到正在跑的自动化,帮助我们测试/构建/部署我们的应用。

构建一个node.js应用

现在有一个vscode插件项目,我为此项目编写了一个.travis.yml文件:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
env:
global:
- PACKAGE_VERSION=`node -p -e 'require("./package.json").version'`
language: node_js

node_js:
- 10

script:
- echo package version...
- echo $PACKAGE_VERSION

before_deploy:
- npm install -g vsce
- vsce package

deploy:
- provider: releases
api_key:
secure: $GITHUB_OAUTH_TOKEN
file_glob: true
file: "*.vsix"
skip_cleanup: true
name: "zsdoc-${PACKAGE_VERSION}"
email: dillonliang@163.com
on:
repo: dillonliang224/zsdoc
tags: true

如何编写.travis.yml文件呢,根据项目语言,查看对应的travis文档即可。

我这里使用的node.js开发的应用,所以我的.travis.yml文件language配置如下:

1
2
3
4
5
6
## 选择运行语言环境 node_js
language: node_js

## 指定测试时的node.js版本,可以指定多个,会依此验证测试。
node_js:
- 10

在node.js环境里,默认会执行如下命令:

1
2
3
4
5
## 安装项目依赖
npm install or npm ci

## 执行测试脚本
npm test

所以在我的.travis.yml文件里没有这两条命令。

发布vscode插件到releases page

当有新版本插件发布时,release version会有变化,这个一般体现在package.json文件里的version字段上。
所以我使用如下命令获取新的version:

1
2
3
env:
global:
- PACKAGE_VERSION=`node -p -e 'require("./package.json").version'`

env是travis里的环境,把node -p -e ‘require(“./package.json”).version’获取的version赋值到PACKAGE_VERSION变量上,然后在下面打印了一次,看是否是预期值:

1
2
3
script:
- echo package version...
- echo $PACKAGE_VERSION

然后在发布之前,需要编译node.js代码并打包,这里使用到了vscode的vsce命令:

1
2
3
4
5
before_deploy:
## 全局安装vsce
- npm install -g vsce
## 打包vscode插件
- vsce package

此时已经编译打包好应用了,如何发布到releases page呢?

  1. 首先获取github oauth token,这样使travis有操作release page的权限。参考:https://blog.wyrihaximus.net/2015/09/github-auth-token-on-travis/
  2. 把获取的github oauth token配置在travis ci对应项目的settting里。参考:https://blog.wyrihaximus.net/2015/09/github-auth-token-on-travis/
  3. 配置.travis.yml文件,详细解析如下:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    ## 部署命令
    deploy:
    ## github的releases page页面
    - provider: releases
    ## 授权的token
    api_key:
    ## 这个GITHUB_OAUTH_TOKEN是配置在travis 项目setting-->Environment Variables里的
    secure: $GITHUB_OAUTH_TOKEN
    ## 指定文件&&文件类型
    file_glob: true
    file: "*.vsix"
    skip_cleanup: true
    ## 重命名文件,PACKAGE_VERSION即是上面获取到的package.json里的version字段
    name: "zsdoc-${PACKAGE_VERSION}"
    email: dillonliang@163.com
    ## 发布到github的哪个项目,以及限定只有打了tag的情况下,才会触发部署操作。
    on:
    repo: dillonliang224/zsdoc
    tags: true

至此,本项目算告一段落,可以发布部署了。

利用travis发布nodejs

编写好.travis.yml文件后,操作流程如下:

  1. 本地更新package.json里的version
  2. 提交代码并打tag(同version)
  3. travis自动构建.vsix文件到release界面
  4. 更新release界面的日志(可选)

其他

travis可以做的不止于此,更多特性可自行查阅官方文档


参考资料:
javascript-with-nodejs travis文档
如何获取github oauth token及配置