物理机 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><!--上面这…...
java_网络服务相关_gateway_nacos_feign区别联系
1. spring-cloud-starter-gateway 作用:作为微服务架构的网关,统一入口,处理所有外部请求。 核心能力: 路由转发(基于路径、服务名等)过滤器(鉴权、限流、日志、Header 处理)支持负…...

.Net框架,除了EF还有很多很多......
文章目录 1. 引言2. Dapper2.1 概述与设计原理2.2 核心功能与代码示例基本查询多映射查询存储过程调用 2.3 性能优化原理2.4 适用场景 3. NHibernate3.1 概述与架构设计3.2 映射配置示例Fluent映射XML映射 3.3 查询示例HQL查询Criteria APILINQ提供程序 3.4 高级特性3.5 适用场…...

MongoDB学习和应用(高效的非关系型数据库)
一丶 MongoDB简介 对于社交类软件的功能,我们需要对它的功能特点进行分析: 数据量会随着用户数增大而增大读多写少价值较低非好友看不到其动态信息地理位置的查询… 针对以上特点进行分析各大存储工具: mysql:关系型数据库&am…...
Cesium1.95中高性能加载1500个点
一、基本方式: 图标使用.png比.svg性能要好 <template><div id"cesiumContainer"></div><div class"toolbar"><button id"resetButton">重新生成点</button><span id"countDisplay&qu…...

CentOS下的分布式内存计算Spark环境部署
一、Spark 核心架构与应用场景 1.1 分布式计算引擎的核心优势 Spark 是基于内存的分布式计算框架,相比 MapReduce 具有以下核心优势: 内存计算:数据可常驻内存,迭代计算性能提升 10-100 倍(文档段落:3-79…...

深入理解JavaScript设计模式之单例模式
目录 什么是单例模式为什么需要单例模式常见应用场景包括 单例模式实现透明单例模式实现不透明单例模式用代理实现单例模式javaScript中的单例模式使用命名空间使用闭包封装私有变量 惰性单例通用的惰性单例 结语 什么是单例模式 单例模式(Singleton Pattern&#…...
c++ 面试题(1)-----深度优先搜索(DFS)实现
操作系统:ubuntu22.04 IDE:Visual Studio Code 编程语言:C11 题目描述 地上有一个 m 行 n 列的方格,从坐标 [0,0] 起始。一个机器人可以从某一格移动到上下左右四个格子,但不能进入行坐标和列坐标的数位之和大于 k 的格子。 例…...
【算法训练营Day07】字符串part1
文章目录 反转字符串反转字符串II替换数字 反转字符串 题目链接:344. 反转字符串 双指针法,两个指针的元素直接调转即可 class Solution {public void reverseString(char[] s) {int head 0;int end s.length - 1;while(head < end) {char temp …...

【论文阅读28】-CNN-BiLSTM-Attention-(2024)
本文把滑坡位移序列拆开、筛优质因子,再用 CNN-BiLSTM-Attention 来动态预测每个子序列,最后重构出总位移,预测效果超越传统模型。 文章目录 1 引言2 方法2.1 位移时间序列加性模型2.2 变分模态分解 (VMD) 具体步骤2.3.1 样本熵(S…...

【数据分析】R版IntelliGenes用于生物标志物发现的可解释机器学习
禁止商业或二改转载,仅供自学使用,侵权必究,如需截取部分内容请后台联系作者! 文章目录 介绍流程步骤1. 输入数据2. 特征选择3. 模型训练4. I-Genes 评分计算5. 输出结果 IntelliGenesR 安装包1. 特征选择2. 模型训练和评估3. I-Genes 评分计…...