使用Travis-CI和Github自动化构建node程序

突发奇想,想要将昨天发现的一个 nodejs 项目当做练手,练习下用 Travis CI 来做持续集成/部署。

目标

想要达成的目标是:

  • 当我们推送代码到 master 分支时自动构建/测试代码。
  • 当我们推送新标签时自动将新标签对应的代码编译成 windows、Linux、macOS 三个平台的可执行文件,并且自动上传 Github releases,方便下载。

过程略过不说,说遇到的问题,本篇文章仅当记录,可能后续还会有相应补充,暂且不做教程用。

问题

遇到的问题为:

  • 登录 Github 时遇到的登录 token 无效的问题。
  • 推送时构建时机的问题。

上最终配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
language: node_js
node_js:
- node

install:
- npm install pkg -g

script:
- pkg package.json --out-path=./dist

deploy:
provider: releases
api_key:
secure: ${ttt}
file_glob: true
file: ./dist/*
skip_cleanup: true
on:
tags: true

解决

编译

编译 node 使用 pkg 工具直接编译成三个平台的可执行文件,这里使用默认值直接生成三个可执行文件。编译命令为:pkg package.json --out-path=./dist,输出可执行文件到当前目录的 dist 文件夹中,方便下一步上传文件。

上传

在上传时遇到了 Github Token认证失败的问题,起初以为是 Token 写错了,后来才知道是环境变量写法错了。

部分错误日志:

1
raise_error.rb:16:in`on_complete':GET https://api.github .com / user:401  - 凭据错误//请参阅:https://developer.github.com/v3(Octokit :: Unauthorized)

错误的配置:secure: getenv(“ttt”)

正确的配置:secure: ${ttt}

Linux 基础薄弱,硬伤没办法。

构建

因为配置中加了在推送标签时才触发编译并且上传,所以需要在每次 push 时需要加 --tags 参数,这时 git pushgit push --tags 两条命令的先后顺序就需要斟酌。

当使用命令 git push 推送代码时,只会将本地的 commit 推送到云端,不会推送标签,所以只会触发构建,会跳过编译流程。当使用 git push --tags 时不仅会将标签推送到云端,还会触发编译。所以要将 git push 命令放在 git push --tags 前边执行,确保代码已经正确 push 并且通过测试才可以推送标签触发编译&&上传流程。

参考链接:

https://docs.travis-ci.com/

本文章首发于个人博客 LLLibra146’s blog
本文作者:LLLibra146
版权声明:本博客所有文章除特别声明外,均采用 © BY-NC-ND 许可协议。非商用转载请注明出处!严禁商业转载!
本文链接https://blog.d77.xyz/archives/d3d74bf5.html