gitea+sonar+jenkins+TAPD(docker环境)

软件安装配置》》》

Gitea:

Gitea 的首要目标是创建一个极易安装,运行非常快速,安装和使用体验良好的自建 Git 服务。项目采用 Go 作为后端语言,只要生成一个可执行程序即可。
它是跨平台的,支持 Linux、macOS 和 Windows 以及各种架构,除了 x86,amd64,还包括 ARM 和 PowerPC。

1.安装git

centos 安装git

yum install git

RHEL和衍生产品通常会发布较旧版本的git。您可以下载tarball并从源代码进行构建,也可以使用第三方存储库(例如IUS社区项目)来获取git的最新版本。

CentOS 安装最新版本 Git
https://www.cnblogs.com/jhxxb/p/10571227.html

2.docker 搭建 gitea

pull gitea镜像

 docker pull gitea/gitea

创建一个本地可以挂载到容器的目录

 mkdir -p /home/gitea

加上权限

chmod -R 777 gitea

初次执行 run gitea,注意这里 gitea 是前台启动,启动后 command + C 退出就好了
宿主机 10022 映射到 gitea 容器的 22 ssh 端口
宿主机 10082 映射到 gitea 容器的 3000 http 端口
docker run -d --name gitea --restart=always -p 10022:22 -p 10082:3000 -v /home/gitea:/data gitea/gitea

参考:https://gitea.io/zh-cn/

SonarQube:

Sonar(SonarQube)是一个开源平台,用于管理源代码的质量。Sonar 不只是一个质量数据报告工具,更是代码质量管理平台。支持的语言包括:Java、PHP、C#、C、Cobol、PL/SQL、Flex 等。
主要特点:
代码覆盖:通过单元测试,将会显示哪行代码被选中
改善编码规则
搜寻编码规则:按照名字,插件,激活级别和类别进行查询
项目搜寻:按照项目的名字进行查询
对比数据:比较同一张表中的任何测量的趋势

注意:sonar服务器至少需要2G的内存才能有效运行

拉取镜像,默认都是从 DockerHub 拉取

1 拉取数据库

docker pull postgres 

2 拉取sonarqube

docker pull sonarqube

3 启动postgresql

docker run --name db -e POSTGRES_USER=sonar -e POSTGRES_PASSWORD=sonar -d postgres

4 启动 sonarqube

docker run --name sq --link db -e SONARQUBE_JDBC_URL=jdbc:postgresql://IP:5432/sonar -p 9000:9000 -d sonarqube

5 打开 http://localhost:9000/, 点击 "Log in"

登录账号:admin 密码:admin

报错语句:

[1]: max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]

修改文件

vi /etc/sysctl.conf  

修改本地文件的内存大小值

vm.max_map_count = 655360

SonarQube 是以工程为单位进行扫描管理的,第一步需要点击 A 前面的 + 号,创建一个新工程:


20190910155243663.png

生成sonar的token

可以搜索chinese Pack,安装中文语言包,安装成功后,重启sonarqube服务,再次访问http://localhost:9000/,即可看到中文界面

IDEA 集成(maven): https://blog.csdn.net/wojiushiwo945you/article/details/100699885
gradle: https://www.cnblogs.com/wangfg/p/12331745.html

mvn sonar:sonar -Dsonar.host.url=http://localhost:9000 -Dsonar.login=559fa7b02af13e181f0a39444ee17b71acdf2724 -Dsonar.java.binaries=target/sonar
gradle clean build sonarqube  

Jenkins :

Jenkins 的前身是 Hudson 是一个可扩展的持续集成引擎。Jenkins 是一款开源 CI&CD 软件,用于自动化各种任务,包括构建、测试和部署软件。Jenkins 支持各种运行方式,可通过系统包、Docker 或者通过一个独立的 Java 程序。
主要特色功能:

  • 流水线
  • 多种类型的计算节点支持(SSH、JNLP等)
  • 丰富的插件扩展机制

1 下载Jenkins官方镜像

docker pull jenkins/jenkins

2 启动

docker run -d -p 80:8080 -p 50000:50000 -v jenkins:/var/jenkins_home -v /etc/localtime:/etc/localtime --name jenkins docker.io/jenkins/jenkins
  • -d 后台运行镜像
  • -p 80:8080 将镜像的8080端口映射到服务器的80端口
  • -p 50000:50000 将镜像的50000端口映射到服务器的50000端口
  • -v jenkins:/var/jenkins_home /var/jenkins_home目录为jenkins工作目录,>我们将硬盘上的一个目录挂载到这个位置,方便后续更新镜像后继续使用原来的工作目录。
  • -v /etc/localtime:/etc/localtime 让容器使用和服务器同样的时间设置。
  • --name jenkins 给容器起一个别名

3 查看

docker ps |grep jenkins

5配置Jenkins

在浏览器输入http://ip进入Jenkins登录页面。页面会提示你到服务器的指定位置获取初始化密码。

docker exec jenkins tail /var/jenkins_home/secrets/initialAdminPassword

在页面输入密码,点击Continue,进入插件安装页面。我们点击左边的Install suggested plugins,安装推荐插件就好。


1600491674567.jpg

安装中文插件

1.点击Manage Jenkins
2.打开Available点击,输入Localization: Chinese (Simplified),查找。
3.安装后点击restart

安装SonarQube插件

因为我们是用Jenkins做为后台的持续扫描调度服务,所以需要安装SonarQube Scanner For Jenkins插件

搭建自动化持续代码扫描质量平台》》》

SonarQube主要工作流程:


20181126150309510.png

1.开发人员使用开发工具(IDE)上传代码到GitLab(源代码管理器);
2.Jenkins(CI系统)SCM自动拉取代码到到编译服务器;
3.Sonar Scanners扫描该代码检查质量,将分析结果推送到SonarQube平台,进而持久化数据库存储;
4.开发&测试人员可以使用IDE插件来同步SonarQube结果(java和js版本等)并可以实时在线分析分析
5.管理员可以通过Web访问SonarQube质量平台,项目代码质量趋势一目了然

关于Jenkins的配置:
在 Jenkins 项目构建过程中加入SonarScanner进行代码分析,首先需要在Jenkins工程的构建环境标签页中勾选"Prepare SonarQube Scanner evironment"

20181126224343705.png

配置SonarQube Scanner构建步骤

20181126224506294.png

  • Task to run: 输入 scan,即分析代码;
  • JDK :选择 SonarQube Scanner 使用的 JDK(注意这里必须是 JDK 不能是 JRE);
  • Path to project properties : 这里可以指定一个sonar-project.properties 文件,如果不指定的话会使用项目默认的 properties文件;
  • Analysis properties: 这里需要输入一些配置参数用来传递给 SonarQube,这里的参数优先级高于sonar-project.properties文件里面的参数,所以可以在这里来配置所有的参数以替代sonar-project.properties文件,下面列出了一些参数,sonar.language指定了要分析的开发语言(特定的开发语言对应了特定的规则),sonar.sources定义了需要分析的源代码位置(示例中的.所指示的是当前 Jenkins项目的目录),sonar.java.binaries 定义了需要分析代码的编译后文件位置;
  • Additional arguments 输入框中可以输入一些附加的参数,示例中的-X 意思是进入SonarQube Scanner的Debug 模式,这样会输出更多的日志信息;
  • JVM Options 可以输入在执行 SonarQube Scanner是需要的JVM参数。

关于质量阀状态关联编译结果
Jenkins支持每当代码分析无法满足SonarQube的质量标准时,即工程构建失败,Jenkins需要安装Quality Gates Plugin

20181126224506294.png

另外,在项目工程中需要增加“构建后操作”,不过此插件好像有个缺陷,Project key输入框不支持${variable}形式

2018112622585527.png

小团队持续代码扫描方案


20181126232424909.png

DevOps 模式

1. 在TAPD中的操作

首先在流水线设置中找到Jenkins

在这里插入图片描述

然后下载插件,并点击新增服务

在这里插入图片描述

记录Webhook,一会儿要用


在这里插入图片描述

2. 在Jenkins中的操作

在系统管理中找到插件管理

在这里插入图片描述

选择刚才下载的插件,安装,重启


在这里插入图片描述

点击用户名,选择设置,添加API Token,记得复制

在这里插入图片描述

插件配置
在系统管理中找到TAPD

在这里插入图片描述
  • Jenkins名称随便搞
  • 访问地址就是当前Jenkins的url
  • API Token就是刚才的API Token
  • WebhookSecrect Token 就是在TAPD平台中的内容

3. 配置成功!

如果配置成功的话,就可以在TAPD平台流水线配置中的“关联已有服务”中找到自己的流水线啦


在这里插入图片描述

及时反馈机制:Jenkins的Montor view插件+钉钉群通知+Email通知

Git 工作流程
协作必须有一个规范的工作流程,让大家有效地合作,使得项目井井有条地发展下去。

image

三种广泛使用的工作流程:

Git flow
Github flow
Gitlab flow
都采用"功能驱动式开发"(Feature-driven development,简称FDD)。

它指的是,需求是开发的起点,先有需求再有功能分支(feature branch)或者补丁分支(hotfix branch)。完成开发后,该分支就合并到主分支,然后被删除。

首先,项目存在两个长期分支。

主分支master
开发分支develop
前者用于存放对外发布的版本,任何时候在这个分支拿到的,都是稳定的分布版;后者用于日常开发,存放最新的开发版。

其次,项目存在三种短期分支。

功能分支(feature branch)
补丁分支(hotfix branch)
预发分支(release branch)
一旦完成开发,它们就会被合并进develop或master,然后被删除。
Gitlab flow


image.png

对于"持续发布"的项目,建议在master分支以外,再建立不同的环境分支。比如,"开发环境"的分支是master,"预发环境"的分支是pre-production,"生产环境"的分支是production。

开发分支是预发分支的"上游",预发分支又是生产分支的"上游"。代码的变化,必须由"上游"向"下游"发展。比如,生产环境出现了bug,这时就要新建一个功能分支,先把它合并到master,确认没有问题,再cherry-pick到pre-production,这一步也没有问题,才进入production。

只有紧急情况,才允许跳过上游,直接合并到下游分支。

Squash 多个commit

为了便于他人阅读你的提交,也便于cherry-pick或撤销代码变化,在发起Pull Request之前,应该把多个commit合并成一个。(前提是,该分支只有你一个人开发,且没有跟master合并过。)

image

这可以采用rebase命令附带的squash操作,具体方法请参考《Git 使用规范流程》

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,332评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,508评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,812评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,607评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,728评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,919评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,071评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,802评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,256评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,576评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,712评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,389评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,032评论 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,798评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,026评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,473评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,606评论 2 350