使用Travis CI尝试前端的持续集成
前端的持续集成
在软件工程中,持续集成(CI)指的是多次小幅度的将开发的代码合并到主干(我的理解这个主干是类似于dev的测试环境代码)的做法。在合并之前,需要做一些测试和构建的步骤,通过了之后就可以将新代码”集成”到主干。
结合我自身的真实情况,就是我有一个演示项目(使用的GitHub pages
)开源在GitHub
,每次需要做点升级都需要重新build
,然后把buil生成的的静态文件提交到GitHub
。这就导致了很多的重复性工作。
例如有时候我只是修改一行文本,但是也需要自己手动build和提交。现在我想只是修改源码并提交,build和提交build后的静态文件交给Bot去完成。
Travis CI
Github
上面的开源项目使用Travis CI
提供的持续集成服务(Continuous Integration
,简称 CI)是非常方便的。
首先你得有个GitHub
账号和项目,然后去travis-ci官方网站使用GitHub
授权登录。在setting
里激活某个仓库,一旦激活了一个仓库,Travis 会监听这个仓库的所有变化。
登录GitHub
,在最右侧下拉中点击setting
,然后按顺序点击Developer settings
和Personal access tokens
。继续找到Generate new token
生成新的token,如下图所示,我把能点的都点上了,只有一个 delete_repo
没有授权。这个token
要保存下,离开页面以后就看不到了,只能重新生成。
在travis-c
打开激活的仓库setting
,添加1个环境变量,分别是GITHUB_TOKEN
。GITHUB_TOKEN
是我们刚刚在GitHub上面的授权token,基本所有权限都给了。
编写.travis.yml
准备工作完毕后,在项目的根目录新建.travis.yml
文件,这是配置和脚本文件,指定了 Travis 的行为。该文件必须保存在项目的根目录 ,一旦代码仓库有新的 Commit
,Travis 就会去找这个文件,按照配置执行里面的命令。
这里说下我想实现的基本步骤:
- 我修改源码或者升级某个node包,提交到GitHub
- Travis 得到消息后,clone最新的代码
- 使用yarn执行安装和build
- 将所有文件的变化提交到GitHub
下面介绍下.travis.yml
文件:
# 语言 language: node_js # 版本,这里指定的是最新的lts版 node_js: lts/* # 要最新的就行,所以克隆最近的一次commit git: depth: 1 # 安装 install: yarn # 指定了缓存的内容,这里是yarn安装的东西,既node_modules cache: yarn # build script: yarn build # build成功后开始部署,下面是travis-ci提供的一些比较便捷的写法,针对GitHub pages的 deploy: # 这里指定了GitHub的pages服务 provider: pages # Make sure you have skip_cleanup set to true, otherwise Travis CI will delete all the files created during the build, # which will probably delete what you are trying to upload. skip_cleanup: true github_token: $GITHUB_TOKEN # 这里需要是true,否则会git push --force,把以前的记录覆盖了 keep_history: true # 使用GitHub的用户名和邮箱 committer_from_gh: true # 目标分支 target_branch: master on: branch: master
GitHub的pages服务只能指定在master分支的根目录或者docs,我这里使用的是放在docs,根目录还需要存放源码。
这样只要我提交了一些更新,Bot就会build一次,没有变动的话就不提交,有变化的话就会自动push到GitHub。这一步暂时还不能自定义commit message。下图中docs文件夹的提交就是Bot做的。
可以查看项目的真实记录
下面贴出bot自动执行的部分log
3.22s$ nvm install lts/* cache.1 Setting up build cache cache.yarn cache.npm $ node --version v12.13.0 $ npm --version 6.12.0 $ nvm --version 0.35.1 $ yarn --version 1.15.2 install 1.09s$ yarn 8.68s$ yarn build yarn run v1.15.2 $ vue-cli-service build Done in 8.52s. The command "yarn build" exited with 0. cache.2 store build cache dpl_0 2.03s$ rvm $(travis_internal_ruby) --fuzzy do ruby -S gem install dpl 7.84s dpl.1 Installing deploy dependencies Logged in as @hezhongfeng (hezf) dpl.2 Preparing deploy dpl.3 Deploying application Done. Your build exited with 0.
自定义行为
如果想通过commit message去控制Bot的行为,可以在脚本里进行判断。script: if [[ $TRAVIS_COMMIT_MESSAGE == *"trigger build"* ]]; then mvn install ; fi ;
总体速度还是很快的,整个build+提交的时间在1分钟多一点。以后都不用我手动build和提交了。
gitlab上面也有相似的GitLab CI/CD
,应该是差不多的,暂时先不做过多研究。
原文地址:https://segmentfault.com/a/1190000021007124