11.7 持续开发与管理

信息行业日新月异,如何响应不断变化的需求,快速适应和保证软件的质量?持续集成(Continuous integration,CI)正是针对这类问题的一种开发实践,它倡导开发团队定期进行集成验证。集成通过自动化的构建来完成,包括自动编译、发布和测试,从而尽快地发现错误。CI所描述的软件开发是从原始需求识别到最终产品部署整个过程中,需求以小批量形式在团队的各个角色间顺畅流动,能够以较短地周期完成需求的小粒度频繁交付。整个过程中,需求分析、产品的用户体验和交互设计、开发、测试、运维等角色需要密切协作。

持续集成特点包括:从检出代码、编译构建、运行测试、结果记录、测试统计等都是自动完成的,减少人工干预。需要有持续集成系统的支持,包括代码托管机制支持,以及集成服务器等。

持续交付(Continuous delivery,CD)则是经典的敏捷软件开发方法的自然延伸,它强调产品在修改后到部署上线的流程要敏捷化、自动化。甚至一些较小的改变也要今早的部署上线,这跟传统软件在较大版本更新后才上线的思想不同。

11.7.1 Jenkins

Jenkins是一个得到广泛应用的持续集成和持续交付的工具。作为开源软件项目,它旨在提供一个开放易用的持续集成平台。Jenkins能实时监控集成中存在的错误,提供详细的日志文件和提醒功能,并用图表的形式形象地展示项目构建的趋势和稳定性。Jenkins特点包括安装配置简单、支持详细的测试报表、分布式构建等。

11.7 持续开发与管理 - 图1

自2.0版本,Jenkis推出了Pipeline as Code,帮助Jenkins实现对CI和CD更好的支持。通过Pipeline,将原本独立运行的多个任务连接起来,可以实现十分复杂的发布流程,如图11-9所示。

11.7 持续开发与管理 - 图2

图11-9 Jenkins Pipeline示意图

Jenkins官方在Docker Hub上提供了全功能的基于官方发布版的Docker镜像。读者可以方便地使用docker run指令一键部署Jenkins服务,如下所示:


  1. $ docker run -p 8080:8080 -p 50000:50000 jenkins

Jenkins容器启动成功后,可以打开浏览器访问8080端口,查看Jenkins管理界面,如图11-10所示。

11.7 持续开发与管理 - 图3

图11-10 Jenkins服务管理界面

目前运行的容器中,数据会存储在工作目录/var/jenkins_home中,这包括Jenkins中所有的数据,包括插件和配置信息等。如果需要数据持久化,读者可以使用数据卷机制:


  1. $ docker run -p 8080:8080 -p 50000:50000 -v /your/home:/var/jenkins_home jenkins

以上指令会将Jenkins数据存储于宿主机的/your/home目录(需要确保/your/home目录对于容器内的Jenkins用户是可访问的)下。当然也可以使用数据卷容器:


  1. $ docker run --name myjenkins -p 8080:8080 -p 50000:50000 -v /var/jenkins_home jenkins

11.7.2 Gitlab

Gitlab是一款非常强大的开源源码管理系统。它支持基于Git的源码管理、代码评审、issue跟踪、活动管理、wiki页面,持续集成和测试等功能。基于Gitlab,用户可以自己搭建一套类似Github的开发协同平台。

11.7 持续开发与管理 - 图4

Gitlab官方提供了社区版本(Gitlab CE)的DockerHub镜像。读者可以直接使用docker run指令运行:


  1. $ docker run --detach \
  2. --hostname gitlab.example.com \
  3. --publish 443:443 --publish 80:80 --publish 23:23 \
  4. --name gitlab \
  5. --restart always \
  6. --volume /srv/gitlab/config:/etc/gitlab \
  7. --volume /srv/gitlab/logs:/var/log/gitlab \
  8. --volume /srv/gitlab/data:/var/opt/gitlab \
  9. gitlab/gitlab-ce:latest
  10. dbae485d24492f656d2baf18526552353cd55aac662e32491046ed7fa033be3a

成功运行镜像后,读者可以打开浏览器,访问Gitlab服务管理界面,如图11-11所示。

11.7 持续开发与管理 - 图5

图11-11 Gitlab服务管理界面