物理机 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版本不一致导致导致的;

1. 官方版本对应描述如下:

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).

2. 大家可以这个地址找到自己golang对应版本:

https://github.com/golangci/golangci-lint/releases

如我的go1.10, 需要用golangci-lint-1.15.0版本

3. 下载后直接解压

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

(3)正确使用

1.使用命令使用格式

该命令可以在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代码规范报告文件位置

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/875485.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vue3前端开发-小兔鲜项目-登录和非登录状态下的模板适配

vue3前端开发-小兔鲜项目-登录和非登录状态下的模板适配&#xff01;有了上次的内容铺垫&#xff0c;我们可以根据用户的token来判定&#xff0c;到底是显示什么内容了。 1&#xff1a;我们在对应的导航组件内修改完善一下内容即可。 <script setup> import { useUserSt…

svn软件总成全内容

SVN软件总成 概述&#xff1a;本文为经验型文档 目录 D:\安装包\svn软件总成 的目录D:\安装包\svn软件总成\svn-base添加 的目录D:\安装包\svn软件总成\tools 的目录D:\安装包\svn软件总成\tools\sqlite-tools-win32-x86-3360000 的目录D:\安装包\svn软件总成\安装包-----bt lo…

C#调用OpenCvSharp实现图像的角点检测

角点检测用于获取图像特征&#xff0c;以支撑运动检测、目标识别、图像匹配等方面的应用。常用的角点检测算法包括Kitchen-Rosenfeld算法、Harris算法、KLT算法、SUSAN算法等&#xff0c;本文学习并测试Harris角点检测算法。   关于Harris算法的数学原理请见参考文献1的第18、…

C++内存管理和模板/stl初识

前言 c兼容C语言&#xff0c;但它因为有类和对象的概念&#xff0c;C语言原生的那套内存管理函数在特定场景下还是有些捉襟见肘的&#xff0c;为此c在C语言的基础上引入新的内存管理方案&#xff0c;今天我们就来简单的认识一下c的内存管理。除此之外&#xff0c;模板也是c引入…

Jetpack Compose 通过 OkHttp 发送 HTTP 请求的示例

下面是一个使用 Kotlin 和 Jetpack Compose 来演示通过 OkHttp 发送 HTTP 请求的示例。这个示例包括在 Jetpack Compose 中发送一个 GET 请求和一个 POST 请求&#xff0c;并显示结果。 添加okhttp依赖 首先&#xff0c;在你的 build.gradle.kts 文件中添加必要的依赖&#xf…

父子组件生命周期的执行顺序

在Vue中&#xff0c;父子组件的生命周期执行顺序是一个重要的概念&#xff0c;它帮助开发者理解组件之间的加载、更新和销毁过程。以下是对父子组件生命周期执行顺序的详细解释&#xff1a; 一、加载渲染过程 当Vue实例开始创建时&#xff0c;会按照以下顺序执行生命周期钩子…

PACS医学影像临床信息系统,C#影像归档和通信系统源码,PACS源码,支持图像的获取、传输、浏览、打印、测量、重建、对比、存储、处理,电子胶片影像管理等

医学影像临床信息系统具有图像采集、显示、存储、传输和管理等功能&#xff0c;支持DICOM影像设备和非DICOM影像设备&#xff0c;可以识别CT、MR、CR/DR、X光、DSA、B超、NM、SC等设备的图像类型&#xff0c;可对数字影像进行无损压缩和有损压缩处理。C/S体系结构的多媒体数据库…

STM32智能照明控制系统教程

目录 引言环境准备智能照明控制系统基础代码实现&#xff1a;实现智能照明控制系统 4.1 数据采集模块 4.2 数据处理与控制模块 4.3 通信与网络系统实现 4.4 用户界面与数据可视化应用场景&#xff1a;照明管理与优化问题解决方案与优化收尾与总结 1. 引言 智能照明控制系统通…

独立游戏《星尘异变》UE5 C++程序开发日志8——实现敏感词过滤功能(AC自动机)

在游戏中经常会有需要玩家输入一些内容的功能&#xff0c;例如聊天&#xff0c;命名等&#xff0c;这款游戏只有在存档时辉用到命名功能&#xff0c;所以这个过滤也只是一个实验性的功能&#xff0c;我们将使用AC自动机来实现&#xff0c;这是在我们把“csdn”这个词设置为屏蔽…

解决zabbix-server7 中文乱码问题

系统使用centos9 安装中文支持 yum install -y fontconfig langpacks-zh_CN.noarch 检查是否已有中文字体&#xff1a; fc-list :langzh 看到 直接使用GOOGLE的字体 ln -fs /usr/share/fonts/google-noto-cjk/NotoSansCJK-DemiLight.ttc /etc/alternatives/zabbix-web-fo…

bool数组的理解和应用[C++]

文章目录 bool数组的用法bool数组的定义声明bool数组的初始化访问和修改数组元素遍历数组 运用bool数组简单代码 在今天做题中发现了bool类不仅能用于函数类型还能用于数组类型&#xff0c;好奇查了查发现bool还有很多用处&#xff1a;基本变量&#xff0c;在枚举类型中会用到&…

【C语言】结构体详解 -《探索C语言的 “小宇宙” 》

目录 C语言结构体&#xff08;struct&#xff09;详解结构体概览表1. 结构体的基本概念1.1 结构体定义1.2 结构体变量声明 2. 结构体成员的访问2.1 使用点运算符&#xff08;.&#xff09;访问成员输出 2.2 使用箭头运算符&#xff08;->&#xff09;访问成员输出 3. 结构体…

一个C++模板工厂的编译问题的解决。针对第三方库的构造函数以及追加了的对象构造函数。牵扯到重载、特化等

一窥模板的替换和匹配方式&#xff1a;偏特化的参数比泛化版本的还要多&#xff1a;判断是不是std::pair&#xff1c;,&#xff1e;。_stdpair模板参数太多-CSDN博客 简介 在一个项目里&#xff0c;调用了第三封的库&#xff0c;这个库里面有个类用的很多&#xff0c;而且其构…

边界网关IPSEC VPN实验

拓扑&#xff1a; 实验要求&#xff1a;通过IPSEC VPN能够使PC2通过网络访问PC3 将整个路线分为三段 IPSEC配置在FW1和FW2上&#xff0c;在FW1与FW2之间建立隧道&#xff0c;能够传递IKE&#xff08;UDP500&#xff09;和ESP数据包&#xff0c;然后在FW1与PC2之间能够流通数据…

学术研讨 | 基于区块链的隐私计算与数据可信流通研讨会顺利召开

近日&#xff0c;由国家区块链技术创新中心组织的“基于区块链的隐私计算与数据可信流通研讨会”顺利召开&#xff0c;会议邀请了来自全国高校和科研院所的相关领域专家&#xff0c;围绕基于区块链与隐私计算技术的应用需求、研究现状、发展趋势、重点研究方向与研究进展等内容…

Go并发GMP调度模型

如何知道一个对象是分配在栈上还是堆上&#xff1f; Go和C不同&#xff0c;Go的逃逸分析是在编译器完成的&#xff1b;go局部变量会进行逃逸分析。如果变量离开作用域后没有被引用&#xff0c;则优先分配到栈上&#xff0c;否则分配到堆上。那么如何判断是否发生了逃逸呢&#…

数据结构之《队列》

在数据结构之《栈》章节中学习了线性表中除了顺序表和链表外的另一种结构——栈&#xff0c;在本篇中我们将继续学习另一种线性表的结构——队列&#xff0c;在通过本篇的学习后&#xff0c;你将会对栈的结构有充足的了解&#xff0c;在了解完结构后我们还将进行栈的实现。一起…

【LLM】-08-搭建问答系统-语言模型,提问范式与 Token

目录 1、语言模型 1.1、训练过程&#xff1a; 1..2、大型语言模型分类&#xff1a; 1.3、指令微调模型训练过程&#xff1a; 2、Tokens 3、Helper function辅助函数 (提问范式) 4、计算token数量 1、语言模型 大语言模型&#xff08;LLM&#xff09;是通过预测下一个词…

一款允许使用Docker部署本地托管的、基于 Web 的 PDF 操作工具

大家好&#xff0c;今天给大家分享的是一个基于Spring Boot开发的开源项目&#xff0c;旨在提供一个功能强大的基于Docker的本地托管PDF操作工具Stirling PDF。 项目介绍 Stirling-PDF是一个全面的PDF工具箱&#xff0c;适用于个人和企业用户&#xff0c;尤其对于那些重视数据…

CasaOS设备使用Docker安装SyncThing文件同步神器并实现远程管理

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…