一、什么是Jenkins
Jenkins是开源的持续集成工具,使用java编写。Jenkins支持插件,社区繁荣。
Master中有jobs、queue、executors;slave中有executors。
二、Jenkins的安装
三、Jenkins使用
1)选择‘new item’
2)输入item名称并选择类型,通常有freestyle或者pipeline,推荐pipeline
3)选择触发器,比如poll scm代表每一分钟去看一下代码库有没有代码提交,如果有就trigger。
此外还有webhook
4)使用脚本来定义stages,这也是Jenkins的特点:pipeline as code,把JenkinsFile用vcs工具管理起来。常用stage如:build、test、publish、deploy。
如果不确定怎么写,可以点击上图左下角的‘pipeline syntax’,可以从下拉列表中选择,通过交互方式进行设置,然后可以Jenkins可以自动生成script。如下所示
5)配置可视化
另外,Jenkins流水线蓝色表示成功,红色表示失败;晴天-乌云-下雨,表示构建失败频率。
6)Artifactory
比如JFrog,是包仓库,artifact就是制品(可重用组件)。通过mvn deploy把包放到artifactory。jenkins trigger的时候会有递增的版本号17、18等等,期望artifactory中的包也有对应的版本号。这一点可以通过jenkins脚本上下文变量实现。
四、其他
1)七步提交法:更新代码;本地编码;本地构建(使用mvn test);再次更新代码;本地构建;提交到代码仓库;CI上构建。
2)Ssh用于远程控制服务器,openssh用于windows上使用ssh。
3)多环境部署:staging环境一般翻译为预发布环境。
4)webhook:git push之后,Git如何通知Jenkins对应Job的工作区实时构建?答案就是:Git webhook机制发出请求,告知Jenkins服务器你要自动构建了。webhook与异步编程中"订阅-发布模型"非常类似,一端触发事件,一端监听执行。
Webhooks是用户自定义的HTTP回调;它们通常由事件触发,例如"push 代码到repo",或者"post 一个评论到博客"。当事件发生时,源网站可以发起一个HTTP请求到webhook配置的URL。
5)数据库增量部署:DB migration
6)zero downtime:蓝绿部署、滚动部署、灰度部署。
7)server provisioning:ansible
9)manual approval
五、Git flow分支策略
Git Flow 的分支结构很特别,按功能来说,可以分支为5种分支,从5 种分支的生命时间上,又可以分别归类为长期分支和暂时分支,或者更贴切描述为,主要分支和协助分支。
5.1 主要分支
在采用 Git Flow 工作流的项目中,代码的中央仓库会一直存在以下两个长期分支:Master和Develop。其中 origin/master 分支上的最新代码永远是版本发布状态。origin/develop 分支则是最新的开发进度。
当 develop 上的代码达到一个稳定的状态,可以发布版本的时候,develop上这些修改会以某种特别方式被合并到 master 分支上,然后标记上对应的版本标签。
5.2 协助分支
除了主要分支,Git Flow 的开发模式还需要一系列的协助分支,来帮助更好的功能的并行开发,简化功能开发和问题修复。协助分支分为以下几类:
1)Feature Branch:Feature 分支用来做分模块功能开发,建议命名为feature-xxx,模块完成之后,会合并到 develop 分支,然后删除。
2)Release Branch:Release 分支用来做版本发布的预发布分支,建议命名为 release-xxx。例如在软件 1.0.0 版本的功能全部开发完成,提交测试之后,从 develop 检出release-1.0.0 ,测试中出现的小问题,在 release 分支进行修改提交,测试完毕准备发布的时候,代码会合并到 master 和 develop,master 分支合并后会打上对应版本标签 v1.0.0, 合并后删除自己,这样做的好处是,在测试的时候,不影响下一个版本功能并行开发。
3)Hotfix Branch:Hotfix 分支是用来做线上的紧急 bug 修复的分支,建议命名为 hotfix-xxx。当线上某个版本出现了问题,将检出对应版本的代码,创建 Hotfix 分支,问题修复后,合并回 master 和 develop ,然后删除自己。这里注意,合并到 master 的时候,也要打上修复后的版本标签。