持续集成(CI)系统

                            持续集成(CI)系统

 

gitlab、gerrit、jenkins三大系统整体框架

持续集成(CI)系统_第1张图片

开发本地从gerrit下载代码进行开发后将代码git push review到Gerrit系统上, Jenkins 在监听 Gerrit 上的项目事件会触发构建任务来测试代码,Jenkins把测试结果通过 ssh gerrit 给这个项目打上 Verified (信息校验)成功或失败标记,成功邮件通知审核人员 Review(代码审核),审核人通过查看提交的文件进行人工检查代码,判断合格后合并提交,本次提交merge后会自动同步到gitlab备份。

一,gitlab

主要用途:代码备份、在线浏览。在本集成系统中gitlab不提供修改和人为提交功能。

GitLab 是一个用于仓库管理系统的开源项目,使用Git作为代码管理工具,并在此基础上搭建起来的web服务。安装方法是参考GitLab在GitHub上的Wiki页面。

界面如图下:

持续集成(CI)系统_第2张图片

 

二、gerrit

Gerrit,一种免费、开放源代码的代码审查软件,使用网页界面。利用网页浏览器,同一个团队的软件程序员,可以相互审阅彼此修改后的程序代码,决定是否能够提交,退回或者继续修改。

 

主要用途:代码审核

开发需要做的是:
(1)向管理员申请账号,拿着账号根据《gerrit注册用户及使用指导》(这里不提下载请度娘一下)对接gerrit系统,连接成功并修改用户名后通知管理员(由管理员注册邮箱并使用邮箱添加权限)
(2)下载代码-本地开发-代码提交审核
常用命令:
git clone gerrit仓库地址 分支名(无分支名则默认master)
./gerrit_env_branch 自己的名字 评审人的名字 git仓名 分支名

gerrit_env_branch脚本如下:

#!/bin/bash

BRANCH=master

if [ ! -n "$1" ];
then
	echo "[error]: please input your name"
	exit;
elif [ ! -n "$2" ];
then
	echo "[error]: please input reveiwer name"
	exit;
elif [ ! -n "$3" ];
then 
	echo "[error]: please input your project name"
	exit;
elif [ -n "$4" ];
then 
	echo "[Notice] Use branch $4"
	BRANCH=$4
fi

echo welcome $1,now begin config......

#config git user name and email
git config --global user.name "$1"
git config --global user.email [email protected]

#download commit-msg for change-Id
echo "Download the commit-msg file from gerrit server..."
scp -P 29418 -p [email protected]:hooks/commit-msg .git/hooks/
chmod 777 .git/hooks/commit-msg
echo "Dowmload completed."

#check the git config file 
if grep -q review .git/config;
then
	echo "recovery git config file......"
	cp .git/.config-bak .git/config
else
	cp .git/config .git/.config-bak

fi

#modify the git config file,add reviewer
echo "[remote \"review\"]
	url = ssh://[email protected]:29418/$3
	push = HEAD:refs/for/$BRANCH%[email protected],[email protected]" >> .git/config
echo Config Success Done!


git add 修改的文件名
git commit
git push review
(3)登录gerrit页面跟踪审核状态,如果是jenkins门禁失败,分析失败原因(可能是漏提交文件、依赖还未合并、分支切换未通知管理员同步切换等),如果不是代码本身问题告知管理员解决。
附:审核失败不可再通过Abandon Change按钮撤销,需要git rebase -i + git commit —amend + 重新提交审核,具体操作留给邱工作说明~

下图为某次提交的审核状态

 

持续集成(CI)系统_第3张图片

 

三、jenkins

Jenkins是一个开源软件项目,是基于Java开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使软件的持续集成变成可能。Jenkins是一个开源的、可扩展的持续集成、交付、部署(软件/代码的编译、打包、部署)的基于web界面的平台。允许持续集成和持续交付项目,无论用的是什么平台,可以处理任何类型的构建或持续集成。

1,下载:https://jenkins.io/zh/

2,主要用途:分布式运行多任务、持续的软件版本发布/测试项目、监控外部调用执行的工作。

=================================================================

需要开发做的工作:

  1. 代码提交地址变更:gitlab —->>> gerrit
    前期代码提交地址是gitlab(因为项目前期,管理员这边还未参与,gitlab上的仓库都是由应用/系统负责人创建,开发往gitlab提交代码),当管理员介入时,需要负责人提供该项目的仓库地址并给管理员开通master权限,管理员迁移仓库到gerrit后会将gitlab仓库其他成员的权限修改为Reporter(只允许下载)
    特别注意:
    一旦仓库切到gerrit之后,开发须使用gerrit下载代码提交并走审核,不可再直接往gitlab提交,如需要创建分支也找管理员创建。

  2. 门禁配置
    jenkins的门禁工程由管理员创建,门禁工程所做的事是:
    第一、编译
    第二、静态代码检查
    后面会加git commit规范检查和上机做monkey测试。
    需要应用开发做的是:
    (1)提供管理员依赖仓的地址+分支名
    (2)在app/build.gradle增加findbugs任务

task findbugs(type: FindBugs) {//
 ignoreFailures = true
 effort = "default"
 reportLevel = "medium"
 //过滤器
 excludeFilter = new File("${project.rootDir}/findbug_filter.xml")
 //这里填写项目classes目录
 classes = files("ivi-radio/build/intermediates/classes")
 source = fileTree('src/main/java')
 classpath = files()
 reports {
     //只能开启一个
     xml.enabled = true
     html.enabled = false
 }

3.  jenkins版本工程配置
工程配置由管理员完成,需要系统开发做的是:
(1)提供代码目录架构,并指明仓库地址
(2)提供编译命令
jenkins日常使用:
1.构建版本
构建触发方式: (构建结果可配置邮件通知)
第一种:手动触发,由管理员或者开发自己构建(需要自行注册jenkins账号,然后由管理员添加build权限)
第二种:定时触发,根据项目需要通知管理员配置构建时间
2.升级包下载
3.修改记录查看
4.构建log查看
 

持续集成(CI)系统_第4张图片

你可能感兴趣的:(android,linux,Git)