最近又把烂尾的开源项目alfred-femine拾起来了,这个项目旨在开发一系列前端常用的alfred workflow,提供前端开发的查询效率.时隔这么久,再次搞起,希望自己能够一直维护下去,也欢迎志同道合的同学一起完善这个工具链。

为了便于项目的维护,我觉得用上传说中的“持续集成”的思想,本人不才,虽然看过很多持续集成的文章,但是连这种npm发包这种简单的“持续集成”都没实践过,这次下定决心要用上它,早就听说过Github和Travis是天生的组合,就使用它了

需要注意的是,目前Travis维护了两套系统,之前travis-ci.com是给私人付费用户使用的,travis-ci.org是给免费开源项目使用的,但是2018年某个时候,官方统一了到travis-ci.com一个平台下,逐步迁移travis-ci.org的项目到travis-ci.com,并且对于开源项目仍然免费.
travis-ci.com
travis-ci.org
目前网上的教程基本上还是以travis-ci.org为例,官方还是建议新项目直接对接到travis-ci.com,如果使用的是travis-ci.org按照官方教程可能会遇到一些坑

使用travis非常简单,使用github授权登录travis平台,打开需要build的项目。

在项目根目录下,添加一个配置文件.travis.yml,大体如下,后面会一一解释其中的字段。

language: node_js
node_js:- '8'
deploy:provider: npmemail: YOUR_EMAILapi_key: YOUR_AUTHskip_cleanup: trueon:tags: truebranch: mastertag: latestcondition: '$TRAVIS_TAG =~ ^v[0-9]+.[0-9]+.[0-9]+$'

language: 项目语言node_js
node_js: - '8'指定node版本
deploy:字段配置部署选项

npm:指定包管理工具
email:是你在npm注册的账户邮箱
api_key:是授权travis平台发布包到npm的令牌,该选项后面会介绍如何生成
skip_cleanup:配置travis平台是否清理生成的额外文件,为true则跳过
on:

tags:一般情况下,只有需要版本更新时,才需要发布到npm平台,通常我们通过打tag来实现,指定tags: true这样travis只会在我们向git仓库提交tag时才会发布到npm
branch:指定代码分支

tag: latest指定npm发布的包的tag,这里指定为最新版
condition: '$TRAVIS_TAG =~ ^v[0-9]+.[0-9]+.[0-9]+$'指定只有当tag的为vx.x.x(如v1.0.0)才发包

上面的一些字段中,api_key的生成比较麻烦,首先我们需要获取npm平台的授权token,有两种方法可以获取

  1. 登录npm平台,到Profile Settings页面可以生成token,注意需要publish权限

2.使用NPM CLI command npm adduser to 添加你的npm账户, 然后打开 ~/.npmrc文件:里面有个authToken的字段就是需要的token

$ npm adduser
Username: xxxx
Password:
Email: (this IS public) xxxxx
Logged in as feminer on https://registry.npmjs.org/.

这里我也踩了一个坑,我在使用nrm管理npm源,在登录npm时,需要把源切换回https://registry.npmjs.org/.

通过上面两种方法获取的token不能直接放到.travis.yml的配置中,因为你的代码是开源的,别人直接拿到你的token就不安全了,travis提供了加密的方法,需要先安装命令行工具

sudo gem install travis

安装好后需要在项目根目录下

 travis encrypt YOUR_AUTH_TOKEN --add deploy.api_key

直接执行上面的命令可以会出现not logged in, please run travis login --pro的错误

$ travis login --pro
We need your GitHub login to identify you.
This information will not be sent to Travis CI, only to api.github.com.
The password will not be displayed.Try running with --github-token or --auto if you don't want to enter your password anyway.Username: xxxxx
Password for xxxx: ***********
Bad credentials
for a full error report, run travis report --pro

上面的命令需要输入github的账户,但是我在执行命令的时候还是报错了,查找资料才发现我原来对接到了travis-ci.org,需要执行下面的命令才能登录成功

$ travis login --org

最后再加密

$ travis encrypt TOKRN --add deploy.api_key --org

该命令执行完后会自动修改.travis.yml文件

这里我还踩了一个坑,为了快速安装npm包,我在项目根目录添加了一个.npmrc文件规定了npm源,我改成了淘宝源,发现后面travis发包时token错误,应该制定为官方源

//registry=https://registry.npm.taobao.org/
registry=https://registry.npmjs.org/

另一个需要解决的问题是npm包版本的问题,当然我们可以直接修改package.json里的版本号,再打一个tag提交代码和tag

git push origin --tags

但是这样每次修改很麻烦,还有可以导致版本号和tag不一致,我写了一个release脚本自动做这件事如下:

const fs = require('fs')
const { execSync } = require('child_process')function cmd(command) {try {const output = execSync(command)return output.toString()} catch (error) {return ''}
}function getVersion() {try {const tag = cmd('git describe --tags').split('-').filter(Boolean)[0]if (tag && /^v\d+.\d+.\d+$/.test(tag)) {return tag.slice(1)}return ''} catch (error) {return ''}
}const packageInfo = JSON.parse(fs.readFileSync('package.json'))
const version = getVersion()
if (version && version !== packageInfo.version) {packageInfo.version = versionfs.writeFileSync('package.json', JSON.stringify(packageInfo, null, 2) + '\r')
}

走package.json中添加下面的命令,prepublishOnly前检查一下版本,同时使用husky走代码pre-commit阶段检查一下tag来更新版本.这样可以始终保持最新的tag和包的版本一致

  "scripts": {"prepublishOnly": "node release.js"},"husky": {"hooks": {"pre-commit": "npm run prepublishOnly"}},

参考

npm Releasing

转载于:https://www.cnblogs.com/star91/p/ji-yutravis-hegit-tag-shi-xiannpm-zi-dong-hua-fa-b.html

基于travis和git tag 实现npm自动化发版相关推荐

  1. 使用 maven-semantic-release 实现自动化发版

    原文发布于 https://seriouszyx.com/archives/37/ "如何发布 Java 包到 Maven 中央仓库" 讲解了本地将 Java 包发布到 Maven ...

  2. Jenkins 前端 自动化发版/CICD

    核心代码脚本: #!/bin/bash -il echo ${branch} echo ${branch} current=${branch} online="release" i ...

  3. 基于Travis CI实现 Hexo 在 Github 和 Coding 的同步部署

      各位朋友,大家好,我是Payne,欢迎大家关注我的博客,我的博客地址是 https://qinyuanpei.github.io .在曾经的一篇博客:<持续集成在Hexo自动化部署上的实践& ...

  4. git使用笔记总结(基于场景的git教程)

    1. 写在前面 这篇文章依然是想整理下git的基本使用,之前实习的时候,也整理过,但发现写的有些乱(废话太多),尤其是在场景上,并且在公司工作了两个多月之后, 又对git有了新的使用体验,所以想重新写 ...

  5. repo打了 tag之后如何提交tag_repo 导出本地 git tag 给他人

    背景 使用 repo 管理了多个 git 仓库,有时需要将本地仓库的tag同步给其他人,但又不能直接推到远程(例如权限问题). 实际场景举例 本地复现了一个问题,需要让其他人回退到相同环境来排查. 本 ...

  6. 基于jenkins结合git实现web程序的多服务器批量发布

    为什么80%的码农都做不了架构师?>>>    由于前一段时间发布了几篇关于web程序基于jenkins部署发布的博文,由于是基于svn作为版本库讲解的.这段时间有一些朋友问我git ...

  7. git 子命令 git tag 常用命令实操教程

    前言 通常在发布软件的时候打一个tag,tag会记录版本的commit号,方便后期回溯. git tag 常用操作命令 新建tag 命令格式:git tag tagName 例:git tag v1. ...

  8. git tag什么时候使用_git使用教程9pycharm 使用 tag 打标签

    前言 当我们的代码完成了第一阶段的需求,版本稳定后,希望能出个稳定版本.于是在 commit 后需要打个 tag 标签,也就是我们平常说的版本号,如v1.0版本 本篇讲解如何使用 pycharm 打 ...

  9. Postman+Newman+Git+Jenkins+Slack 接口自动化和监控

    2017.10.21 始发于TesterHome精华帖 Postman+Newman+Git+Jenkins+Slack 接口自动化和监控 打算写这个文章很久了,终于下定决心动一下懒得不能再懒的一双手 ...

最新文章

  1. centos6.5下安装docker
  2. chrome88 android,Chrome 88 的新特性
  3. mysql安装教程 没配置_MySQL安装和配置详细教程
  4. 使用vert.x 2.0,RxJava和mongoDB创建simpe RESTful服务
  5. 【原】git命令行查看全部分支与远程分支不同步问题
  6. 基于鸿蒙操作系统移植,基于鸿蒙OS的按键驱动
  7. ~~单调栈(数据结构)
  8. c语言通讯录人数显示,c语言实现通讯录
  9. 服务器 cpu 修改vt,虚拟机安装mac必看:Intel CPU虚拟技术VT-x支持列表
  10. (二)智能化技术如何赋能能源数字化转型及智慧化应用?
  11. iradon函数和radon函数
  12. python之Srcapy框架浅谈
  13. 计算机中汉字的顺序用什么牌,中国汉字的写做顺序,你知道吗?
  14. 微信小程序 上滑加载和下拉刷新
  15. StarUML用户手册
  16. 计算机名里的工作组和域都呈灰色无法修改了
  17. 算法产品化---在ArmNN上运行ONNX
  18. LeetCode day15 2014/11/3
  19. 语义分割网络系列1——FCN
  20. Element和Node的区别你造吗?

热门文章

  1. Fusing time-of-flight depth and color for real-time segmentation and tracking
  2. 为什么深绿系统不好用?
  3. 新造车2.0时代,“滑板底盘”概念的加减法
  4. 吴翰清讲web安全--安全概述
  5. 快手高层动荡:CTO陈定佳离职 两位高级副总裁将分担其职责
  6. DataWhale数据挖掘实践_智慧海洋(二)
  7. Linux库文件详解
  8. 四句话让你学会一个简单的爬虫【python】
  9. 温婉女汉子,人间气质女,TVB传奇人物之李施嬅
  10. 解决谷歌下载自动删除 Chrome download automatically delete