关于npm:jenkinsdocker实现自动测试并发布到你的npm包

135次阅读

共计 1692 个字符,预计需要花费 5 分钟才能阅读完成。

背景

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

  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"]; then
npm install -g npm-cli-login --registry=https://registry.npm.taobao.org
NPM_USER=${NPM_USER} NPM_PASS=${NPM_PASS} NPM_EMAIL=${NPM_EMAIL} npm-cli-login
npm publish --access public
fi

其它

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

正文完
 0