软件安装配置》》》
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
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 前面的 + 号,创建一个新工程:
生成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,安装推荐插件就好。
安装中文插件
1.点击Manage Jenkins
2.打开Available点击,输入Localization: Chinese (Simplified),查找。
3.安装后点击restart
安装SonarQube插件
因为我们是用Jenkins做为后台的持续扫描调度服务,所以需要安装SonarQube Scanner For Jenkins插件
搭建自动化持续代码扫描质量平台》》》
SonarQube主要工作流程:
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"
配置SonarQube Scanner
构建步骤
- 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
另外,在项目工程中需要增加“构建后操作”,不过此插件好像有个缺陷,Project key输入框不支持${variable}形式
小团队持续代码扫描方案
DevOps 模式
1. 在TAPD中的操作
首先在流水线设置中找到Jenkins
然后下载插件,并点击新增服务
记录Webhook,一会儿要用
2. 在Jenkins中的操作
在系统管理中找到插件管理
选择刚才下载的插件,安装,重启
点击用户名,选择设置,添加API Token,记得复制
插件配置
在系统管理中找到TAPD
- Jenkins名称随便搞
- 访问地址就是当前Jenkins的url
-
API Token
就是刚才的API Token -
Webhook
和Secrect Token
就是在TAPD平台中的内容
3. 配置成功!
如果配置成功的话,就可以在TAPD平台流水线配置中的“关联已有服务”中找到自己的流水线啦
及时反馈机制:Jenkins的Montor view插件+钉钉群通知+Email通知
Git 工作流程
协作必须有一个规范的工作流程,让大家有效地合作,使得项目井井有条地发展下去。
三种广泛使用的工作流程:
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
对于"持续发布"的项目,建议在master分支以外,再建立不同的环境分支。比如,"开发环境"的分支是master,"预发环境"的分支是pre-production,"生产环境"的分支是production。
开发分支是预发分支的"上游",预发分支又是生产分支的"上游"。代码的变化,必须由"上游"向"下游"发展。比如,生产环境出现了bug,这时就要新建一个功能分支,先把它合并到master,确认没有问题,再cherry-pick到pre-production,这一步也没有问题,才进入production。
只有紧急情况,才允许跳过上游,直接合并到下游分支。
Squash 多个commit
为了便于他人阅读你的提交,也便于cherry-pick
或撤销代码变化,在发起Pull Request之前,应该把多个commit合并成一个。(前提是,该分支只有你一个人开发,且没有跟master
合并过。)
这可以采用rebase
命令附带的squash
操作,具体方法请参考《Git 使用规范流程》。