一、部署gogs_0.11.91_linux_amd64.tar.gz
gogs官网下载:https://dl.gogs.io/
yum -y install mariadb-server systemctl start mariadb systemctl enable mariadb useradd git tar zxvf gogs_0.11.91_linux_amd64.tar.gz cd gogs mysql -u root -p < scripts/mysql.sql mv gogs /home/git/ chown -R git.git /home/git/gogs/ su - git cp /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 sonarqube yum install ncurses* readline* zlib* -y unzip sonarqube-8.6.0.39681.zip mv sonarqube-8.6.0.39681 /home/sonarqube cd /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=123456 cd /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 postgres tar zxvf postgresql-11.10.tar.gz mv postgresql-11.10 /usr/src/ cd /usr/src/postgresql-11.10 ./configure --prefix=/usr/local/pgsql-11.10 chown -R postgres.postgres /usr/local/pgsql-11.10/ ln -s /usr/local/pgsql-11.10/ /usr/local/pgsql ln -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.5 su - 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 programs PATH=/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/data export 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 roles Role name | Attributes | Member of -----------+------------------------------------------------------------+----------- postgres | Superuser, Create role, Create DB, Replication, Bypass RLS | {} postgres=# postgres=# \l #查看数据库列表 List of databases Name | 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/postgres template1 | 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-devel useradd -M -s /sbin/nologin nginx tar zxvf nginx-1.18.0.tar.gz -C /usr/src cd /usr/src/nginx-1.18.0 ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_stub_status_module make && make install ln -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 run golangci-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-8 sonar.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代码规范报告文件位置