背景

前端的开源我的项目公布的步骤:

  1. 将代码提交到GitHub
  2. 运行单元测试;
  3. 公布到npm上;

以上步骤每次公布都要做一边,不仅繁冗,而且人工实现容易出错,因而通过自动化来实现这些工作变得很有必要。
浏览本文须要你对应用jenkins + docker来实现自动化部署有肯定实践经验。

实现流程

  1. 将代码通过git提交至GitHub;
  2. GitHubwebhook触发jenkinspipeline工作;
  3. pipeline工作执行测试命令;
  4. 测试通过后,比照npm线上的包和以后package.json中的版本号;
  5. 版本号不同的状况下构建代码,登录npm,将包公布到npm

实现原理

本文不打算从零开始讲述每个实现的步骤和细节,只讲实现流程中一些比拟有价值的办法和原理。

代码提交到GitHub触发jenkinspipeline工作

  1. 装置一个jenkins插件:multibranch-scan-webhook-trigger
  2. 关上pipeline工作的配置,找到扫描 仓库 触发器,勾选Scan by webhook,并且在Trigger token中填入一个随机的字符串。
  3. 关上GitHub代码仓库 -> 点击Settings -> 点击Webhooks-> 点击Add webhook -> 在Payload URL中填入:JENKINS_URL/multibranch-webhook-trigger/invoke?token=Trigger token,其中JENKINS_URL是你的jenkins服务地址,Trigger token则对应步骤2填入的随机字符串。

实现以上配置,下次你提交代码就会主动触发对应的pipeline工作。

如何通过shell脚本登录npm

公布npm包只须要执行:

npm publish --access public

然而前提是要先登录你的npm账户,通常状况下能够通过执行npm login,而后输出用户名明码邮箱即可登录,然而在jenkins中没法实现这种交互式输出的。解决办法是装置npm-cli-login,这样就能够通过以下脚本间接登录:

NPM_USER=testUser NPM_PASS=testPass NPM_EMAIL=test@example.com npm-cli-login

如何比照线上npm包的最新版本号和以后代码中的版本号

某些状况下你只是想提交内容到GitHub上,并不想公布新的包到npm上。所以不能每次一提交代码就公布npm包的,须要先判断以后版本号是否和线上的统一,如果统一则不公布包,反之则公布。
1.获取线上npm包的版本号,能够通过以下脚本获取

npm view <package name> version

2.获取以后我的项目代码的版本号

node -p "require('./package.json').version"

3.比照两个版本号

versionOnline=$(npm view <package name> version)versionLocal=`node -p "require('./package.json').version"`if [ "$versionOnline" != "$versionLocal" ]; then// 公布fi

残缺的脚本

versionOnline=$(npm view <package name> version)versionLocal=`node -p "require('./package.json').version"`if [ "$versionOnline" != "$versionLocal" ]; thennpm install -g npm-cli-login --registry=https://registry.npm.taobao.orgNPM_USER=${NPM_USER} NPM_PASS=${NPM_PASS} NPM_EMAIL=${NPM_EMAIL} npm-cli-loginnpm publish --access publicfi

其它

一些绝对大型的开源库还须要部署文档等操作,也能够用jenkins来实现,这样整个公布流程须要手动实现的就只剩下提交代码了。