随着软件开发复杂度的不断提高,团队开发成员间如何更好地协同工作以确保软件开发的质量已经慢慢成为开发过程中不可回避的问题。
尤其是近些年来,敏捷(Agile) 在软件工程领域越来越红火,如何能再不断变化的需求中快速适应和保证软件的质量也显得尤其的重要。
持续集成
持续集成(Continuous Integration,简称 CI)正是针对这一类问题的一种软件开发实践。它倡导团队开发成员必须经常集成他们的工作,甚至每天都可能发生多次集成。而每次的集成都是通过自动化的构建来验证,包括自动编译、发布和测试,从而尽快地发现集成错误,让团队能够更快的开发内聚的软件。
持续集成的一般流程为:
1. 开发人员提交代码到 Source Repository (源代码仓库);
2. 触发持续集成服务器的相关功能。执行 编译 -> 测试 -> 输出结果 的流程;
3. 向开发人员反馈结果。
由此可见,在实现持续集成时,有以下必备因素:
- 一个代码存储库,即需要版本控制软件来保障代码的可维护性,同时作为构建过程的素材库;
- 一个自动构建过程,包括自动编译、分发、部署和测试等;
- 一个持续集成服务器。
持续集成服务器上最常用集成工具的就是Jenkins ,它是一个配置简单和使用方便的持续集成服务器。
Jenkins 介绍
Jenkins是一个开源软件项目,是基于Java开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使软件的持续集成变成可能。
主要特色功能:
- 流水线;
- 多种类型的计算节点支持(SSH、JNLP等);
- 丰富的插件扩展机制(Jenkins只是一个平台,真正运作的都是插件。这就是Jenkins流行的原因,因为Jenkins什么插件都有 )。
Jenkins官网:https://jenkins.io/
Docker 版 Jenkins 部署
Jenkins 支持各种运行方式,可通过系统包、Docker 或者通过一个独立的 Java 程序。
下面将给大家介绍简单易用的 Docker 形式,简单一两条语句搞定 Jenkins 部署:
容器启动:
# 镜像拉取docker pull jenkins # 容器启动docker run -d --name myjenkins -p 8086:8080 -p 50000:50000 -v /var/jenkins_home:/var/jenkins_home jenkins |
---|
注:
-d 后台运行镜像
--name myjenkins 给容器起一个别名
-p 8086:8080 将镜像的8080端口映射到服务器的80端口
-p 50000:50000 将镜像的50000端口映射到服务器的50000端口
-v jenkins:/var/jenkins_home /var/jenkins_home目录为jenkins工作目录,我们将硬盘上的一个目录挂载到这个位置,方便后续更新镜像后继续使用原来的工作目录
启动后输入命令:
# 查看所有容器docker ps -a |
---|
可以看到jenkins已成功启动。
Jenkins 配置:
在浏览器输入 http://ip:8086 进入Jenkins登录页面。页面会提示你到服务器的指定位置获取初始化密码:
在页面输入密码,点击Continue,进入插件安装页面。我们点击左边的Install suggested plugins,如果对于 Jenkins 不够了解,安装推荐插件就好:
安装好插件后,系统会提示建立管理员账户;创建管理员账户后进入系统,接下来就可以配置常用工具。
管理Jenkins -> 全局工具配置:
配置JDK:
配置Git (如使用版本控制工具为其他,配置对应的工具即可):
在 插件管理中安装sonarqube-scanner插件后,即可配置 SonarQube Scanner:
在同样的页面还可以对 Maven 等进行配置。
在Jenkins 管理 -> 系统管理 -> 中可以对GitHub/GitLab、SonarQubeSever进行配置:
构建任务
在完成相关插件的安装,以及配置之后即可开始任务构建:
配置源码信息:
构建与部署脚本:
注:
建议创建新的虚拟环境,并安装第三方依赖;
coverage run mange.py test 为执行 Django 项目测试,并使用coverage 统计代码覆盖率;
coverage xml 为生成代码覆盖率报告,一遍之后的sonarqube展示覆盖率。
代码扫描:
再新增启动web 服务器,即可;后续可以增加 UI 自动化测试等内容。