关于npm:jenkinsdocker实现自动测试并发布到你的npm包
背景前端的开源我的项目公布的步骤: 将代码提交到GitHub;运行单元测试;公布到npm上;以上步骤每次公布都要做一边,不仅繁冗,而且人工实现容易出错,因而通过自动化来实现这些工作变得很有必要。浏览本文须要你对应用jenkins + docker来实现自动化部署有肯定实践经验。 实现流程将代码通过git提交至GitHub;GitHub的webhook触发jenkins的pipeline工作;pipeline工作执行测试命令;测试通过后,比照npm线上的包和以后package.json中的版本号;版本号不同的状况下构建代码,登录npm,将包公布到npm;实现原理本文不打算从零开始讲述每个实现的步骤和细节,只讲实现流程中一些比拟有价值的办法和原理。 代码提交到GitHub触发jenkins的pipeline工作装置一个jenkins插件:multibranch-scan-webhook-trigger关上pipeline工作的配置,找到扫描 仓库 触发器,勾选Scan by webhook,并且在Trigger token中填入一个随机的字符串。关上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> version2.获取以后我的项目代码的版本号 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来实现,这样整个公布流程须要手动实现的就只剩下提交代码了。 ...