目录:导读
前言
GitFlow工作流简介
Gitflow工作流定义了一个围绕项目发布的严格分支模型,它会相对复杂一点,但提供了用于一个健壮的用于管理大型项目的框架,非常适合用来管理大型项目的发布和维护。
贯穿整个开发周期,master和develop分支是一直存在的,master分支可以被视为稳定的分支, 而develop分支是相对稳定的分支。
特性开发会在feature分支上进行,发布会在release分支上进行,而bug修复则会在hotfix分支上进行,这样也有效避免了不同类型的开发工作在代码层级的耦合和干扰。
GitFlow工作流优化
hotfix和release的结果都要合并到master和develop中,为什么?因为它们的修改结果将持续影响这后续的开发和维护,必须合并以保证代码的一致性。
当线上项目需要版本回退,或者需要简单记录迭代版本时,我们常在master分支上打上 Tag 标签,例如:
功能发布:release_20190101_当月版本数
BUG修复:hotfix_20190101_修复次数
本文基于GitFlow工作流,将利用Jenkins配合GitLab实现以下自动化任务:
master分支代码更新后,自动将代码合并到develop分支
master分支代码更新后,自动在master分支提交中打 tag
Jenkins自动任务Job的创建
Jenkins是一个用Java编写的开源的持续集成工具,可以与Git打通,监听Git的merge, push事件,触发执行Jenkins的指定任务(job),例如执行单元测试。
更多的是:当代码变更时可以触发打包部署、性能测试、接口测试、监控、日志分析等。
项目发布的任何一个环节都可自动完成,无需太多的人工干预,有利于减少重复过程以节省时间和工作量等。
如何创建Jenkins Job
下面列出自动任务Jenkins Job的创建过程,供参考。创建过程如下:
首先,创建一个任务,输入名称,选择“构建一个自由风格的软件项目” 确定即可。
General:填写项目名称及描述;Label Expression 是在Jenkins admin 中配置的节点(container, node),一个Label Expression 是一组docker,当多个不同的Job同时执行的时候,可以实现并行。
源码管理:在Repository URL中填写GitLab中的项目地址;
Branches to build此处的Branch Specifier是触发Jenkins Job时由Jenkins自动拉取的代码的分支,可以填写一个固定的指定分支,如master,也可以写正则表达式。
另外,也可以填写${gitlabSourceBranch}
。如果填写${gitlabSourceBranch}
,表示从git读取Merge Request的源分支,使用该变量,则不能手工点击Job的“立即构建”执行job了,因为读取不到这个变量只能通过git push事件触发了。
具体可以根据应用场景选择。
构建触发器:下面截图中指定的是:仅当产生 push 事件时且目标分支为master时触发此job。这里可以根据需求来具体配置。
Filter branches by name:仅当目标分支为 master 时触发Job。
构建环境 & 构建:构建环境勾选第一项指在每次构建开始之前先清空工作空间;构建中的Execute shell Command 中就可以配置我们自动化脚本。
我们可以把这些脚本放到项目根目录当中,也可以放到一个GitLab仓库当中,来统一管理脚本(文末附脚本示例)。
构建后操作(Editable Email Notification):用于配置邮件提醒。
Disable Extended Email Publisher:勾选后,邮件就不发送;
Project Recipient List:收件人地址;多个收件人邮件地址用逗号进行分割;
Project Reply-To List:允许回复人的地址;默认为$DEFAULT_REPLYTO
;
Content Type:邮件文档的类型,可以设置HTML等格式;
Default Subject:默认邮件标题;也可以使用$DEFAULT_SUBJECT
;
Default Content:默认邮件内容,这里可以写HTML文件,引用Jenkins内部的一些变量;也可以使用默认内容:$DEFAULT_CONTENT
;
Attach Build Log:发送的邮件是否包含日志。
Triggers 中的配置需要注意下,一般配置为Job执行失败的时候发送邮件
Jenkins Job 如何与 Git 关联
在GitLab项目的Settings中找到如下图的配置:勾选“Active”,指定在Git Push 或 mr 创建/更新/合并时触发指定的 Jenkins url,Project name 为Jenkins 中配置的Job名称,用户名、密码是jenkins的账号和密码。
整体步骤梳理
GitLab上准备一个项目工程;
安装Jenkins以及相关的GitLab插件;
Jenkins配置GitLab访问权限;
Jenkins上创建一个Job