使用Travis-CI和Github自动化构建node程序
突发奇想,想要将昨天发现的一个 nodejs 项目当做练手,练习下用 Travis CI 来做持续集成/部署。
目标
想要达成的目标是:
- 当我们推送代码到 master 分支时自动构建/测试代码。
- 当我们推送新标签时自动将新标签对应的代码编译成 windows、Linux、macOS 三个平台的可执行文件,并且自动上传 Github releases,方便下载。
过程略过不说,说遇到的问题,本篇文章仅当记录,可能后续还会有相应补充,暂且不做教程用。
问题
遇到的问题为:
- 登录 Github 时遇到的登录 token 无效的问题。
- 推送时构建时机的问题。
上最终配置
1 | language: node_js |
解决
编译
编译 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 push
和 git push --tags
两条命令的先后顺序就需要斟酌。
当使用命令 git push
推送代码时,只会将本地的 commit
推送到云端,不会推送标签,所以只会触发构建,会跳过编译流程。当使用 git push --tags
时不仅会将标签推送到云端,还会触发编译。所以要将 git push
命令放在 git push --tags
前边执行,确保代码已经正确 push
并且通过测试才可以推送标签触发编译&&上传流程。
参考链接:
本文章首发于个人博客 LLLibra146’s blog
本文作者:LLLibra146
版权声明:本博客所有文章除特别声明外,均采用 © BY-NC-ND 许可协议。非商用转载请注明出处!严禁商业转载!
本文链接:https://blog.d77.xyz/archives/d3d74bf5.html