物理机 gogs+jenkins+sonarqube 实现CI/CD
一、部署gogs_0.11.91_linux_amd64.tar.gz
gogs官网下载:https://dl.gogs.io/
yum -y install mariadb-serversystemctl start mariadbsystemctl enable mariadbuseradd gittar zxvf gogs_0.11.91_linux_amd64.tar.gzcd gogsmysql -u root -p < scripts/mysql.sqlmv gogs /home/git/chown -R git.git /home/git/gogs/su - gitcp /home/git/gogs/scripts/init/centos/gogs /etc/init.d/chmod +x /etc/init.d/gogs/etc/init.d/gogs start


二、部署安装jdk-11.0.9_linux-x64_bin.tar.gz
当前最新版本下载地址:http://www.oracle.com/technetwork/java/javase/downloads/index.html
历史版本下载地址: http://www.oracle.com/technetwork/java/javase/archive-139210.html
账号:2696671285@qq.com 密码:Oracle123
三、部署jenkins(apache-tomcat-9.0.41.tar.gz + jenkins.war)
见链接:Jenkins+Gitlab持续集成综合实战-CSDN博客
四、gogs+jenkins
1、添加Web钩子

2、设置web钩子的详情
这里的推送地址是http://jenkins地址:端口号/generic-webhook-trigger/invoke?token=密钥,这里的密钥是要与后面在jenkins里面的密钥设置一致。触发web钩子的事件可以自己设置什么样的事件去触发jenkins的构建

这里设置完了之后可以点击测试推送,点击测试记录可以看到发送给jenkins的推送详情了。其中ref就是推送过去的分支啦。以下的推送的内容都是可以通过文章后面设置jenkins变量来获得的。(底下绿色圈出的部分是我jenkins中需要用的变量)

jenkins


更多见:Jenkins+Gitlab持续集成综合实战-CSDN博客
五、部署sonarqube-8.6.0.39681.zip
官方文档地址:Try out SonarQube
useradd sonarqubeyum install ncurses* readline* zlib* -yunzip sonarqube-8.6.0.39681.zipmv sonarqube-8.6.0.39681 /home/sonarqubecd /home/sonarqube/chown -R sonarqube.sonarqube ./*su - sonarqube[root@gogs conf]# cd /home/sonarqube/sonarqube-8.6.0.39681/conf/
[root@gogs conf]# cat sonar.properties
#找到下面,并根据postgresql改写
sonar.jdbc.url=jdbc:postgresql://localhost/sonar?currentSchema=public
sonar.jdbc.username=test名
sonar.jdbc.password=123456cd /home/sonarqube/sonarqube-8.6.0.39681/bin/linux-x86-64./sonar.sh start#启动脚本
vim /etc/systemd/system/sonarqube.service[Unit]
Description=SonarQube service
After=syslog.target network.target[Service]
Type=simple
User=sonarqube
Group=sonarqube
PermissionsStartOnly=true
ExecStart=/bin/nohup /usr/local/jdk-11.0.9/bin/java -Xms32m -Xmx32m -Djava.net.preferIPv4Stack=true -jar /home/sonarqube/sonarqube-8.6.0.39681/lib/sonar-application-8.6.0.39681.jar
StandardOutput=syslog
LimitNOFILE=131072
LimitNPROC=8192
TimeoutStartSec=5
Restart=always
SuccessExitStatus=143[Install]
WantedBy=multi-user.target
六、部署postgresql-11.10.tar.gz(sonarqube数据存储)
useradd postgrestar zxvf postgresql-11.10.tar.gzmv postgresql-11.10 /usr/src/cd /usr/src/postgresql-11.10./configure --prefix=/usr/local/pgsql-11.10chown -R postgres.postgres /usr/local/pgsql-11.10/ln -s /usr/local/pgsql-11.10/ /usr/local/pgsqlln -sv /usr/local/pgsql-11.10/bin/* /usr/local/bin/ln -s /usr/local/pgsql-11.10/lib/libpq.so.5 /usr/lib64/libpq.so.5su - postgres#环境变量
[root@gogs ~]# cat /home/postgres/.bash_profile
# .bash_profile# Get the aliases and functions
if [ -f ~/.bashrc ]; then. ~/.bashrc
fi# User specific environment and startup programsPATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
PATH=$PATH:$HOME/.local/bin:$HOME/bin
export PGDATA=/usr/local/pgsql-11.10/dataexport PATH#前往文件安装所在地,修改pg_hba.conf配置文件
[postgres@gogs data]$ cp pg_hba.conf pg_hba.conf.`date +%F`
[postgres@gogs data]$ vim pg_hba.conf
#######################################
# TYPE DATABASE USER ADDRESS METHOD# "local" is for Unix domain socket connections only
local all all trust
# IPv4 local connections:
#host all all 127.0.0.1/32 trust
host all all 0.0.0.0/0 md5 #所有ip都可以通过密码连接
# IPv6 local connections:
host all all ::1/128 trust
# Allow replication connections from localhost, by a user with the
# replication privilege.
local replication all trust
host replication all 127.0.0.1/32 trust
#######################################前往文件安装所在地,修改postgresql.conf配置文件
[postgres@gogs data]$ cd /usr/local/pgsql/data/
[postgres@gogs data]$ cp postgresql.conf postgresql.conf.`date +%F`
[postgres@gogs data]$ vim postgresql.conf
#########################################
# - Connection Settings -listen_addresses = '*' #为了方便,监听所有# what IP address(es) to listen on;# comma-separated list of addresses;# defaults to 'localhost'; use '*' for all# (change requires restart)
#port = 5432 # (change requires restart)
max_connections = 100 # (change requires restart)
#superuser_reserved_connections = 3 # (change requires restart)
#unix_socket_directories = '/tmp' # comma-separated list of directories# (change requires restart)
#unix_socket_group = '' # (change requires restart)
#unix_socket_permissions = 0777 # begin with 0 to use octal notation
##########################################创建日志目录
mkdir /usr/local/pgsql/log#启动
pg_ctl start -l /usr/local/pgsql-11.10/log/pg_server.log
进入库的一些小操作
[postgres@gogs data]$ psql #进入库
psql (10.5)
Type "help" for help.postgres=# \password #设置密码
Enter new password:
Enter it again:
postgres=# CREATE DATABASE sonar; #创建库
CREATE DATABASE
postgres=# \du #查看用户List of rolesRole name | Attributes | Member of
-----------+------------------------------------------------------------+-----------postgres | Superuser, Create role, Create DB, Replication, Bypass RLS | {}postgres=#
postgres=# \l #查看数据库列表List of databasesName | Owner | Encoding | Collate | Ctype | Access privileges
-----------+----------+----------+-------------+-------------+-----------------------sonar | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | postgres | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | template0 | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =c/postgres +| | | | | postgres=CTc/postgrestemplate1 | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =c/postgres +| | | | | postgres=CTc/postgres
(4 rows)postgres=#
postgres=# create user test名 superuser password '123456'; #创建用户及密码
CREATE ROLE
postgres=#
七、部署nginx-1.18.0.tar.gz(代理sonarqube)
yum -y install pcre-devel zlib-develuseradd -M -s /sbin/nologin nginxtar zxvf nginx-1.18.0.tar.gz -C /usr/srccd /usr/src/nginx-1.18.0./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_stub_status_modulemake && make installln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/#启动脚本
vim /lib/systemd/system/nginx.service[Unit]
Description=nginxapi
After=network.target[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=kill -s HUP $(cat /usr/local/nginx/logs/nginx.pid)
ExecStop=kill -s QUIT $(cat /sr/local/nginx/logs/nginx.pid)
PrivateTmp=Flase[Istall]
WantedBy=multi-user.target

八、sonarqube 集成 golangci-lint
一、golangci-lint使用:
以下是window下安装方法,结合vscode使用, 其他平台也可以参考
(1)常规安装方法
使用命令:
go get -u github.com/golangci/golangci-lint/cmd/golangci-lint
一般的第三方工具通过上面方法基本能安装成功,无非就是下载慢点,可golangci-lint就是不按照套路来,很不幸,通过上面方法,除非你的golang版本与最新的golangci-lint版本一致,否则,就会报以下错误:
# github.com/golangci/golangci-lint/internal/cache
..\..\..\..\github.com\golangci\golangci-lint\internal\cache\default.go:76:15: undefined: os.UserCacheDir
# github.com/golangci/golangci-lint/vendor/honnef.co/go/tools/config
..\..\..\..\github.com\golangci\golangci-lint\vendor\honnef.co\go\tools\config\config.go:23:17: undefined: os.UserCacheDir
# github.com/golangci/golangci-lint/vendor/honnef.co/go/tools/internal/cache
..\..\..\..\github.com\golangci\golangci-lint\vendor\honnef.co\go\tools\internal\cache\default.go:76:15: undefined: os.UserCacheDir
# github.com/golangci/golangci-lint/vendor/honnef.co/go/tools/ssa
..\..\..\..\github.com\golangci\golangci-lint\vendor\honnef.co\go\tools\ssa\builder.go:61:16: undefined: types.NewInterfaceType
(2)正确安装方式
上述方法之所以安装不成功,主要是golang版本和golangci-lint版本不一致导致导致的;
go < 1.9 isn't supported
go1.9 is officially supported by golangci-lint <= v1.10.2
go1.10 is officially supported by golangci-lint <= 1.15.0.
go1.11 is officially supported by golangci-lint <= 1.17.1.
go1.12+ are officially supported by the latest version of golangci-lint (>= 1.18.0).
https://github.com/golangci/golangci-lint/releases
如我的go1.10, 需要用golangci-lint-1.15.0版本

3. 下载后直接解压
解压后将golangci-lint.exe文件直接放到GOPATH\bin目录下就可以直接使用了

(3)正确使用
该命令可以在vscode的终端下直接使用
命令格式: golangci-lint run [目录]/[文件]
错误使用方式,又一个不按套路来的命令,文件我们一般习惯用“*”表示,但golangci-lint 确不认这种方式,会报如下错误:
执行命令:
golangci-lint run ./iss/*
报错:
level=error msg="[runner/typecheck] typechecking error: cannot find package \"XXXX/iss/*\" in any of:XXXX\\iss\\* (from $GOROOT)\n\tXXXX\\iss\\* (from $GOPATH)"
level=warning msg="[runner/megacheck] Can't run megacheck because of compilation errors in packages [xxxxx/iss/*]: -: cannot find package \"xxxx/iss/*\" in any of:\n\txxxx\\iss\\* (from $GOROOT)\n\txxxx\\iss\\* (from $GOPATH)"
2.正确使用方式
官网推荐三种使用方式:golangci-lint rungolangci-lint run ./...这里...代表的就是检测目录下所有的文件golangci-lint run dir1 dir2/... dir3/file1.go
二、sonarqube集成golangci-lint:
sonar客户端扫描#
在项目根目录新建一个名为sonar-project.properties的文件
# must be unique in a given SonarQube instance
sonar.projectKey=test #sonar平台中相对应项目的key
sonar.projectName=test #sonar平台中相对应项目的名字sonar.host.url=http://localhost:9000 sonar.sources=. #sonar检测的源文件目录,‘.’表示当前根目录下的所有文件目录;包含主要源文件的目录的逗号分隔路径
sonar.exclusions=**/*_test.go,**/vendor/** #检测中排除的源文件(排除的源文件不参与检测,一般排除单元测试文件、配置文件等)sonar.tests=. #sonar检测的测试文件目录,‘.’表示当前根目录下的所有文件目录;包含测试源文件的目录的逗号分隔路径。从构建系统中读取Maven,Gradle,MSBuild项目。否则默认为空。
sonar.test.inclusions=**/*_test.go #检测中的测试源文件(指定单元测试文件)
sonar.test.exclusions=**/vendor/** #检测中排除的测试源文件(排除的源文件不参与检测)sonar.sourceEncoding=UTF-8sonar.go.golangci-lint.reportPaths=sonar/golangcilint.xml
设置成功后保存,进入到项目的根目录下就是sonar-project.properties的目录下面打开命令行 输入 sonar-scanner
稍等一会儿,就可以在sonarqube的web界面中看到分析结果

附:golang语言配置
sonar.go.coverage.reportPaths=report/coverage.out #go的覆盖率报告文件位置
sonar.go.tests.reportPaths=report/test.json #go的单元测试报告文件位置
sonar.go.govet.reportPaths=report/govet-report.out #go的源码中静态错误报告文件位置
sonar.go.gometalinter.reportPaths=report/gometalinter-report.out #go的gometalinter代码规范报告文件位置
sonar.go.golint.reportPaths=report/golint-report.out #go的golint代码规范报告文件位置
相关文章:
物理机 gogs+jenkins+sonarqube 实现CI/CD
一、部署gogs_0.11.91_linux_amd64.tar.gz gogs官网下载:https://dl.gogs.io/ yum -y install mariadb-serversystemctl start mariadbsystemctl enable mariadbuseradd gittar zxvf gogs_0.11.91_linux_amd64.tar.gzcd gogsmysql -u root -p < scripts/mysql.…...
前端表格解析方法
工具类文件 // fileUtils.tsimport { ref } from vue; import * as xlsx from xlsx;interface RowData {[key: string]: any; }export const tableData ref<RowData[]>([]);export async function handleFileSelect(url: string): Promise<void> {try {const res…...
Leetcode 3227. Vowels Game in a String
Leetcode 3227. Vowels Game in a String 1. 解题思路2. 代码实现 题目链接:3227. Vowels Game in a String 1. 解题思路 这一题稍微分析一下之后就会发现,这个游戏有且只有一种情况Bob才能够赢,即原始字符串当中不存在元音字母的情况&…...
树莓派4B从装系统raspbian到vscode远程编程(python)
1、写在前面 前面用的一直是Ubuntu系统,但是遇到一个奇葩的问题: 北通手柄在终端可以正常使用,接收到数据 但在python程序中使用pygame库初始化时总是报错:Invalid device number,检测不到手柄 经过n次重装系统&am…...
vue上传Excel文件并直接点击文件列表进行预览
本文主要内容:用elementui的Upload 组件上传Excel文件,上传后的列表采用xlsx插件实现点击预览表格内容效果。 在项目中可能会有这样的需求,有很多种方法实现。但是不想要跳转外部地址,所以用了xlsx插件来解析表格,并展…...
OpenCV 像素操作—证件照换底色详细原理 C++纯手写实现
文章目录 总体步骤1.RGB转HSV2.找出要换的底色3.取反,黑白颠倒4.将原图像的非背景部分复制到新背景上 完整代码1.C纯手写版2.官方API版本 总体步骤 1.RGB转HSV 为什么一定要转为HSV 颜色空间? 将图像从BGR颜色空间转换为HSV颜色空间是因为HSV颜色空间更…...
tinygrad框架简介;MLX框架简介
目录 tinygrad框架简介 MLX框架简介 LLaMA编辑 Stable Diffusion编辑 tinygrad框架简介 极简主义与易扩展性 tinygrad 的设计理念是极简主义。与 XLA 类比,如果 XLA 是复杂指令集计算 (CISC),那么 tinygrad 就是精简指令集计算 (RISC)。这种简约的设计使得它成为添加…...
服务器重启了之后就卡在某个页面了,花屏,如何解决??
🏆本文收录于《CSDN问答解惑-专业版》专栏,主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收…...
Hospital 14.6.0全开源医院管理预约系统源码
InfyHMS 具有 60 种功能和 9 种不同类型的用户类型, 他们可以登录系统并根据他们的角色访问他们的数据。 源码下载:https://download.csdn.net/download/m0_66047725/89580674 更多资源下载:关注我。...
C/C++樱花树代码
目录 写在前面 系列文章 C简介 完整代码 代码分析 写在后面 写在前面 C实现精美的樱花树,只需这100行代码! 系列文章 序号目录直达链接1爱心代码https://want595.blog.csdn.net/article/details/1363606842李峋同款跳动的爱心https://want595.b…...
sklearn基础学习
1. 简介 1.1 什么是sklearn sklearn,或者更正式地称为scikit-learn,是一个基于Python的开源机器学习库。它建立在NumPy、SciPy和matplotlib之上,提供了简单而有效的工具用于数据挖掘和数据分析。sklearn支持监督学习和无监督学习算法&#…...
SpringBoot 自动配置原理
一、Condition Condition 是在 Spring 4.0 增加的条件判断功能,通过这个可以功能可以实现选择性的创建 Bean 操 作。 思考: SpringBoot 是如何知道要创建哪个 Bean 的?比如 SpringBoot 是如何知道要创建 RedisTemplate 的? …...
Redisson中RQueue的使用场景附一个异步的例子
RQueue 是一个基于 Redis 的分布式作业队列系统,它允许开发者在 Ruby 应用程序中实现异步任务处理和计划任务调度。由于 Redis 提供了高性能的内存数据结构存储,RQueue 可以快速地存储和检索队列中的任务,这使得它非常适合于高并发和低延迟的…...
SpringMVC 控制层框架-下
五、SpringMVC其他扩展 1. 异常处理机制 1.1 异常处理概念 开发过程中是不可避免地会出现各种异常情况,例如网络连接异常、数据格式异常、空指针异常等等。异常的出现可能导致程序的运行出现问题,甚至直接导致程序崩溃。因此,在开发过程中&a…...
(四)js前端开发中设计模式之工厂方法模式
工厂方法模式,通过对产品类的抽象,使其创建业务主要用于负责创建多类产品的实例 const Java function (content) {this.content content;(function () {let oDiv document.createElement(div)oDiv.innerHTML contentoDiv.style.color greendocument.getElement…...
新版GPT-4omini上线!快!真TM快!
大半夜,OpenAI突然推出了GPT-4o mini版本。 当我看到这条消息时,正准备去睡觉。mini版本质上是GPT-4o模型的精简版本,没有什么革命性的创新,因此我并没有太在意。 结果今天早上一觉醒来发现伴随GPT-4o mini上线,官网和…...
【Unity】RPG2D龙城纷争(十七)敌方常规AI(Normal)的实现
更新日期:2024年7月24日。 项目源码:第五章发布(正式开始游戏逻辑的章节) 索引 简介一、AI_Normal类二、AI调遣策略第一阶段:收集1.提供战场数据收集方法2.收集战场数据三、AI调遣策略第二阶段:评估四、AI调遣策略第三阶段:行动简介 AI_Normal定位为框架自带的最基础的…...
Tracy 小笔记:微信小程序 mpx 雷达图的实现
使用文档: https://www.kancloud.cn/xchhhh/wx-chart/399337 https://github.com/xiaolin3303/wx-charts https://gitee.com/mirrors/wx-charts/#wx-charts 参数说明: https://github.com/xiaolin3303/wx-charts/issues/56 下载 dist 里的 wx-charts-…...
Unity UGUI 之 Input Field
本文仅作学习笔记与交流,不作任何商业用途 本文包括但不限于unity官方手册,唐老狮,麦扣教程知识,引用会标记,如有不足还请斧正 1.Input Field是什么? 给玩家提供输入的输入框 2.重要参数 中英文对照着看…...
SpringBoot接入mongodb例子,并有增删改查功能
1,首先,在pom.xml中添加依赖: <dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-mongodb</artifactId></dependency><!--上面这…...
Unity | AmplifyShaderEditor插件基础(第七集:平面波动shader)
目录 一、👋🏻前言 二、😈sinx波动的基本原理 三、😈波动起来 1.sinx节点介绍 2.vertexPosition 3.集成Vector3 a.节点Append b.连起来 4.波动起来 a.波动的原理 b.时间节点 c.sinx的处理 四、🌊波动优化…...
JVM虚拟机:内存结构、垃圾回收、性能优化
1、JVM虚拟机的简介 Java 虚拟机(Java Virtual Machine 简称:JVM)是运行所有 Java 程序的抽象计算机,是 Java 语言的运行环境,实现了 Java 程序的跨平台特性。JVM 屏蔽了与具体操作系统平台相关的信息,使得 Java 程序只需生成在 JVM 上运行的目标代码(字节码),就可以…...
Go 语言并发编程基础:无缓冲与有缓冲通道
在上一章节中,我们了解了 Channel 的基本用法。本章将重点分析 Go 中通道的两种类型 —— 无缓冲通道与有缓冲通道,它们在并发编程中各具特点和应用场景。 一、通道的基本分类 类型定义形式特点无缓冲通道make(chan T)发送和接收都必须准备好࿰…...
MySQL 部分重点知识篇
一、数据库对象 1. 主键 定义 :主键是用于唯一标识表中每一行记录的字段或字段组合。它具有唯一性和非空性特点。 作用 :确保数据的完整性,便于数据的查询和管理。 示例 :在学生信息表中,学号可以作为主键ÿ…...
Ubuntu系统多网卡多相机IP设置方法
目录 1、硬件情况 2、如何设置网卡和相机IP 2.1 万兆网卡连接交换机,交换机再连相机 2.1.1 网卡设置 2.1.2 相机设置 2.3 万兆网卡直连相机 1、硬件情况 2个网卡n个相机 电脑系统信息,系统版本:Ubuntu22.04.5 LTS;内核版本…...
FFmpeg avformat_open_input函数分析
函数内部的总体流程如下: avformat_open_input 精简后的代码如下: int avformat_open_input(AVFormatContext **ps, const char *filename,ff_const59 AVInputFormat *fmt, AVDictionary **options) {AVFormatContext *s *ps;int i, ret 0;AVDictio…...
在鸿蒙HarmonyOS 5中使用DevEco Studio实现指南针功能
指南针功能是许多位置服务应用的基础功能之一。下面我将详细介绍如何在HarmonyOS 5中使用DevEco Studio实现指南针功能。 1. 开发环境准备 确保已安装DevEco Studio 3.1或更高版本确保项目使用的是HarmonyOS 5.0 SDK在项目的module.json5中配置必要的权限 2. 权限配置 在mo…...
goreplay
1.github地址 https://github.com/buger/goreplay 2.简单介绍 GoReplay 是一个开源的网络监控工具,可以记录用户的实时流量并将其用于镜像、负载测试、监控和详细分析。 3.出现背景 随着应用程序的增长,测试它所需的工作量也会呈指数级增长。GoRepl…...
数据分析六部曲?
引言 上一章我们说到了数据分析六部曲,何谓六部曲呢? 其实啊,数据分析没那么难,只要掌握了下面这六个步骤,也就是数据分析六部曲,就算你是个啥都不懂的小白,也能慢慢上手做数据分析啦。 第一…...
信息收集:从图像元数据(隐藏信息收集)到用户身份的揭秘 --- 7000
目录 🌐 访问Web服务 💻 分析源代码 ⬇️ 下载图片并保留元数据 🔍 提取元数据(重点) 👤 生成用户名列表 🛠️ 技术原理 图片元数据(EXIF 数据) Username-Anarch…...
