上一篇文章介绍了Jenkins 多分支类型pipeline与Bitbucket Branch source 插件集成的配置 Jenkins 使用Multiple Pipeline 和 Bitbucket Branch Source Plugin (一)

本篇文章是开发流程的一个case,也可以看成这个插件的一个最佳实践。

Git分支策略:GitLab Flow

本case使用GitLab Flow的分支策略。

  1. 创建三个长期存在的分支,master作为开发分支,pre-production作为UAT分支,production作为生产分支。
  2. 当开发新需求时(user story),开发人员从master分支clone代码到本地,创建用于开发新需求的分支。
  3. 开发完成后创建pull request,将特性分支合并到master分支。
  4. pre-production分支只能由master分支通过pull request合入代码。production分支只能由pre-production分支通过pull request合入代码。
  5. Pull request创建时会自动构建,构建时代码取自源分支,例如,创建了由pre-production向production合并的Pull request,则会取pre-production分支的代码进行构建。
  6. 当merge之后与三个长期存在的分支对应的jenkins pipeline都会自动构建,构建时的代码取自merge的目标分支,例如,由pre-production向production合并的Pull request通过审核,并成功执行了merge操作,则production将会自动构建。
  7. 与特性分支对应的pipeline会自动创建,并且会随着分支的删除而自动删除。
  8. 虽然所有分支都是自动构建,但是各个分支构建时执行的操作并不相同,(在Jenkinsfile中通过when条件判断分支名,根据分支名执行不同的操作)。下面逐个分支列出构建执行的操作。 (1)特性分支:编译,单元测试(Junit),静态代码质量检查(SonarQube) (2)master分支:编译,单元测试,静态检查,部署,API测试 (3)pre-production分支:编译,单元测试,静态检查,部署,集成测试,性能测试 (4)production分支:编译,单元测试,部署,添加监控 (5)PR分支(Pull Request自动创建):编译,单元测试,静态检查

Jenkins job配置

创建jenkins item,类型选择“Multibranch Pipeline”,item配置:

jenkins pipline 数组 jenkins multiple pipeline_单元测试

配置之后保存,Jenkins将自动扫描仓库中的分支,创建对应的pipeline,并自动构建(前提是代码仓库中有Jenkinsfile):

jenkins pipline 数组 jenkins multiple pipeline_单元测试_02

开发流程

1. 创建分支并提交代码到仓库
  • 先从master创建一个特性分支,进行开发,开发完成后将分支push到远程仓库: feature/chaiyingchao-issue-dev-20
  • 到jenkins 项目中就可以看见与新分支对一个的pipeline,并且已经自动构建了,如下图所示:
  • jenkins pipline 数组 jenkins multiple pipeline_单元测试_03

  • 通过Stage View可以看见都执行了哪些操作,跳过了哪些操作。这里是在Jenkinsfile中使用when对分支进行判断,不同分支执行不同操作。
  • jenkins pipline 数组 jenkins multiple pipeline_jenkins pipline 数组_04

2. 提交pull request

开发完成后,提交pull request前,在本地要先同步远程的master分支代码,因为在你开发的过程中可能master分支代码已经发生了变化。如果master分支的代码有变化,则将master merge到你的特性分支,然后push到远程仓库,执行自动编译,构建,测试。在以上都没问题的情况下,再在bitbucket web界面上提交pull request,可以添加多个代码评审人(代码评审为另外的流程,在此不详细解释)。

jenkins pipline 数组 jenkins multiple pipeline_自动构建_05

当创建完pull request之后,在jenkins中可见与其对应的job已被创建,并且已构建。

jenkins pipline 数组 jenkins multiple pipeline_自动构建_06

同时构建状态(成功或者失败)会显示到bitbucket的pull request中,供审批人参考:

jenkins pipline 数组 jenkins multiple pipeline_Jenkins_07

3. merge

代码审查没问题将执行merge操作,同时应该删除特性分支,这在bitbucket里是一个可选项(特性分支是临时分支)。

jenkins pipline 数组 jenkins multiple pipeline_Jenkins_08

merge之后master分支自动执行了一次构建,特性分支则被标记为删除。根据你设置的策略,与这个特性对应的pipeline job会被删除。

jenkins pipline 数组 jenkins multiple pipeline_jenkins pipline 数组_09

4. 发布到UAT

当master分支的程序经过测试,可以发布到UAT环境时,同样提交pull request,源master,目标pre-production。与从特性分支合并到master分支一样,除了每一个环境执行的操作不同,其它流程都相同。merge之后,程序将自动部署到pre-production环境。

5. 发布到生产环境

从pre-production提交pull request,合并代码到production。

在bitbucket 的branches中还可以看见每个分支的详细状态,也包括build的状态,入下图:

jenkins pipline 数组 jenkins multiple pipeline_Jenkins_10

至此,利用Multiple Pipeline 和 Bitbucket Branch Source Plugin插件可以使开发人员协作更加顺畅(状态清晰可见),工作更高效(pipeline的创建和删除都是自动化的)。