我使用的是 virtual box 和 ubuntu server 18.04,注意虚拟机资源多分配一点,需要安装的东西有点多,不然资源不够用的。
略,安装好之后设置端口转发,然后使用 ssh 工具(如 securecrt)连接即可
下面的所有需要在本地浏览器访问的都需要对端口进行映射
时间可能不对,修改下时区和时间
# 更改时区
timedatectl list-timezones |grep Shanghai
timedatectl set-timezone Asia/Shanghai
# 同步时间
sudo apt-get install ntpdate
ntpdate cn.pool.ntp.org
hwclock --systohc
为了加快软件安装,最好更换数据源
vim /etc/apt/sources.list;
# 编辑之前先备份,下面的指令是清空文件
%d
# 清华数据源地址:https://mirrors.tuna.tsinghua.edu.cn/help/ubuntu/ 选择相应的版本复制内容,点击“i”键进入编辑文本模式,粘贴内容到vim编辑窗体,点击“ESC”键进入编辑模式,输入“:wq”保存离开;
sudo apt-get update
sudo apt-get upgrade
如果系统本身的 java 版本不支持,需要安装 java,下载好之后通过rz
命令传到服务器
新版的 sonar 需要 java 11 以上,所以下载最新的 JDK,安装方法类似,jdk8 和 jdk11 都安装上,到时候不同的模块可能需要不同的 jdk 版本
mkdir /usr/java
cd /usr/java
tar -xzvf jdk-8u221-linux-x64.tar.gz
建议不用修改环境变量,免得影响其他的应用,如果要配置,可以百度 “linux jdk 环境变量”
7.9 以及更新版本的 sonarqube 不再支持 MySQL,所以下面需要安装 PostgreSQL
下面是针对 Ubuntu 的,打开https://dev.mysql.com/downloads/repo/apt/下载文件mysql-apt-config_0.8.13-1_all.deb
以下是安装 mysql,已经过时,不需要操作,可以直接查看 PostgreSQL 的安装
# 下面的是安装Mysql步骤,已经作废,参考下面PostgreSQL的安装
sudo dpkg -i path-to-deb-file
# 弹出选择框,默认ok就行
sudo apt-get update
sudo apt install mysql-server
# 会提示一些信息,按照提示操作
mysql -uroot -p
# 连接进入数据库
CREATE USER 'root'@'%' IDENTIFIED BY 'root';
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;
下面是安装 PostgreSQL
sudo vim /etc/apt/sources.list.d/pgdg.list
# 添加一行
deb http://apt.postgresql.org/pub/repos/apt/ bionic-pgdg main
sudo apt-get install postgresql-10
切换到 postgres 用户,并创建用户和数据库
sudo su - postgres
psql
./createdb sonarqube
CREATE USER sonar WITH PASSWORD 'sonar';
# \q是退出管理界面,不同于mysql的exit
\q
# 尝试用sonar连接数据库,连接成功说明用户和数据库创建完成
./psql sonarqube -U sonar
修改访问权限
修改配置postgresql.conf
,
listen_addresses=’*’
修改配置pg_hba.conf
,
增加host all all 0.0.0.0/0 trust
,
同时将local all all peer
改为local all all password
修改之后重启数据库
systemctl restart postgresql
cd /usr/sonar
unzip -o sonar.xxx.zip
更改conf/sonar.properties
,数据库属性要根据自己的数据库来修改
sonar.jdbc.username=sonar
sonar.jdbc.password=sonar
sonar.jdbc.url=jdbc:postgresql://localhost:5432/sonarqube
更改wrapper.conf
wrapper.java.command=/usr/java/jdkxxx/bin/java
为 sonar 新建组和用户
sudo groupadd sonar
sudo useradd -g sonar -d /home/sonar sonar
sudo chown -R sonar:sonar /usr/sonar
新增 systemd 服务,要根据自己的版本何路径来修改
vim /etc/systemd/system/sonarqube.service
# 添加以下内容
[Unit]
Description=SonarQube service
After=syslog.target network.target
[Service]
Type=forking
User=sonar
Group=sonar
PermissionsStartOnly=true
ExecStart=/usr/sonar/sonarqube-7.9.1/bin/linux-x86-64/sonar.sh start
ExecStop=/usr/sonar/sonarqube-7.9.1/bin/linux-x86-64/sonar.sh stop
StandardOutput=syslog
LimitNOFILE=65536
LimitNPROC=8192
TimeoutStartSec=5
Restart=always
[Install]
WantedBy=multi-user.target
修改系统参数,按照 sonar 网站要求,需要有下面的参数需要修改,所以要按照下面的步骤修改
vm.max_map_count
大于等于 262144fs.file-max
大于等于 65536修改/etc/sysctl.conf
,添加
vm.max_map_count=262144
fs.file-max=65536
修改/etc/security/limits.conf
,添加
* soft nofile 65536
* hard nofile 65536
* soft nproc 65536
* hard nproc 65536
* soft memlock -1
* hard memlock -1
错误信息
areas vm.max_map_count [65530] is too low, increase to at least [262144]
https://www.cnblogs.com/yidiandhappy/p/7714489.html
切换到 root 用户,执行命令:sysctl -w vm.max_map_count=262144
查看结果:sysctl -a|grep vm.max_map_count
显示:vm.max_map_count = 262144
上述方法修改之后,如果重启虚拟机将失效,所以:
解决办法:在/etc/sysctl.conf
文件最后添加一行vm.max_map_count=262144
其它错误
如果有其它错误可以查看日志,路径为path-to-sonar/logs
启动和停止 sonar
systemctl stop sonarqube
systemctl start sonarqube
汉化
打开本地链接打开 sonar 网站,登录admin/admin
,然后点击Administration
,点击marketplace
,在plugins
下方的搜索框搜索chinese
,找到chinese pack
然后点击install
,安装好之后网页提示重启,按提示操作即可
下载https://docs.sonarqube.org/latest/analysis/scan/sonarscanner/,根据系统版本下载
例子使用在 windows 上,下载 windows 版本,然后配置环境变量SONAR_RUNNER_HOME
,值为 scanner 的路径,然后PATH
添加%SONAR_RUNNER_HOME%\bin
在命令行测试下
sonar-scanner -v
配置/conf/sonar-scanner.properties
#Configure here general information about the environment, such as SonarQube server connection details for example
#No information about specific project should appear here
#----- Default SonarQube server
sonar.host.url=http://localhost:9000
#----- Default source code encoding
sonar.sourceEncoding=UTF-8
在项目根目录新建一个文件sonar-project.properties
,下面的是官方的样例
sonar.projectKey=org.sonarqube:sonarqube-scanner
sonar.projectName=Example of SonarQube Scanner Usage
sonar.projectVersion=1.0
sonar.sources=src,copybooks
sonar.sourceEncoding=UTF-8
## Cobol Specific Properties
# comma-separated paths to directories with copybooks
sonar.cobol.copy.directories=copybooks
# comma-separated list of suffixes
sonar.cobol.file.suffixes=cbl,cpy
sonar.cobol.copy.suffixes=cpy
## Flex Specific Properties
# retrieve code coverage data from the Cobertura report
sonar.flex.cobertura.reportPath=coverage-report/coverage-cobertua-flex.xml
# PL/I Specific Properties
sonar.pli.marginLeft=2
sonar.pli.marginRight=0
根据实际内容配置
可以下载官方提供的样例:https://github.com/SonarSource/sonar-scanning-examples
配置好之后命令行进入项目根目录,执行sonar-scanner
,等待完成,就可以在网页看到分析结果
由于安装需要用代理,可以参考链接:https://www.serverlab.ca/tutorials/linux/administration-linux/how-to-configure-proxy-on-ubuntu-18-04/
查看不同系统的安装方法:https://about.gitlab.com/install/,我使用的是 ubuntu,注意修改下EXTENAL_URL
为你自己的,如果是本地直接用127.0.0.1
就好
sudo apt-get update
sudo apt-get install -y curl openssh-server ca-certificates
sudo apt-get install -y postfix
curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ee/script.deb.sh | sudo bash
sudo EXTERNAL_URL="https://gitlab.example.com" apt-get install gitlab-ee
关于 gitlab 查错,相关日志
sudo gitlab-ctl tail
# 查看其它相关命令,可以用
sudo gitlab-ctl help
find: ‘/var/log/gitlab/redis-exporter’: Permission denied
find: ‘/var/log/gitlab/grafana’: Permission denied
find: ‘/var/log/gitlab/redis’: Permission denied
find: ‘/var/log/gitlab/alertmanager’: Permission denied
find: ‘/var/log/gitlab/unicorn’: Permission denied
find: ‘/var/log/gitlab/logrotate’: Permission denied
find: ‘/var/log/gitlab/sidekiq’: Permission denied
find: ‘/var/log/gitlab/gitlab-shell’: Permission denied
find: ‘/var/log/gitlab/postgresql’: Permission denied
find: ‘/var/log/gitlab/gitlab-monitor’: Permission denied
find: ‘/var/log/gitlab/gitaly’: Permission denied
find: ‘/var/log/gitlab/postgres-exporter’: Permission denied
find: ‘/var/log/gitlab/gitlab-workhorse’: Permission denied
find: ‘/var/log/gitlab/gitlab-rails’: Permission denied
find: ‘/var/log/gitlab/prometheus’: Permission denied
find: ‘/var/log/gitlab/node-exporter’: Permission denied
find: ‘/var/log/gitlab/nginx’: Permission denied
第一次打开会让修改 root 密码,至少 8 个字符,修改为roottest
登录成功
wget -q -O - https://pkg.jenkins.io/debian-stable/jenkins.io.key | sudo apt-key add -
# 编辑/etc/apt/sources.list,增加下面一行
deb https://pkg.jenkins.io/debian-stable binary/
# 然后执行
sudo apt-get update
sudo apt-get install jenkins
如果遇到报错找不到 JDK
打开/etc/init.d/jenkins
,编辑PATH
哪一行,在最后加上:path-to-jdk/bin
PATH=/bin:/usr/bin:/sbin:/usr/sbin:/usr/java/jdk1.8.0_221/bin
注意中间是冒号,不是分号
修改之后重新启动
sudo systemctl start jenkins
由于默认 8080 已经被占用,所以需要修改/etc/default/jenkins
修改端口,比如 8081
如果还有其它启动问题可以查看日志/var/log/jenkins/jenkins.log
打开http://localhost:8081
第一次打开会提示粘贴密码,所以打开文件/var/lib/jenkins/secrets/initialAdminPassword
,复制里面内容到网页,点击继续
按照提示下一步就可以了,按照提示操作完成安装,设置的帐号密码都为test/test
进去以后需要进行一些配置
maven integration
,pipeline maven integration
,sonarqube scanner
sonarqube servers
,sonarqube scanner
,jdk
,maven
,git
,某些工具可以自己配置路径,否则可以选择 “自动安装”(因为 jdk 需要 oracle 帐号,自己配置好就行,其它的可以选择自动安装)需要配置凭据,路径见下图
切换到 jenkins 用户
sudo su - jenkins
cd ~
mkdir .ssh
cd .ssh
ssh-keygen -t rsa
然后将公钥(id_rsa.pub)添加到 gitlab 的 ssh key,方法在下面步骤找
然后将私钥复制到private key
部分
在网页上操作新建项目
新建之后可能会提示添加ssh key
,按照提示打开添加界面,将本机c:/user/你的名字/.ssh/id_rsa.pub
文件的内容复制到网页并保存。
如果没有.ssh 文件夹,可以百度下搜索 “生成 ssh key”
新建任务完成就有个空项目了,按照提示操作,我们要将示例的项目传到 gitlab,所以按照下面的步骤(根据网页提示)
cd existing_folder
git init
# 下面的地址可能不一样
git remote add origin git@127.0.0.1:root/maven-multimodule.git
git add .
git commit -m "Initial commit"
# 注意上传之前要开通端口映射,使用的22端口
git push -u origin master
提交到 gitlab 可以在网页查看
url
按照实际输入(注意使用 ssh 的方式,http 的方式使用 ssh key 不知道为啥不行),credentials
选择在 jenkins 安装那里添加的凭据(如果遇到认证问题,打开 gitlab 的日志查看原因,方法见上,还有如果设置了代理,可能访问本地地址有问题,这个要注意)构建触发器和构建环境全都不选,Build
部分的Goals and options
输入clean verify sonar:sonar
保存之后点击 “立即构建”,估计要等一会,因为有一些依赖要从 maven 仓库下载
maven 命令如下:
clean -Djacoco.destFile=target/jacoco.exec org.jacoco:jacoco-maven-plugin:0.8.4:prepare-agent install -Dmaven.test.skip=false -Dmaven.test.failure.ignore=true surefire-report:report-only -Daggregate=true
然后增加构建步骤Execute SonarQube Scanner
,主要是修改Path to project properties
和Analysis properties
主要需要配置的为:
Path to project properties
:配置sonar-project.properties
的地址Analysis properties
:直接配置属性两者配置二选一,区别在于一个是文件形式,一个是直接写到 jenkins 任务
属性的主要配置内容如下,主要配置了项目名称、版本、模块等信息
sonar.projectKey=test
sonar.projectName=test
sonar.projectVersion=1.0
sonar.language=java
sonar.sourceEncoding=UTF-8
sonar.modules=module1,module2,tests
module1.sonar.projectName=module1
module1.sonar.language=java
module1.sonar.projectBaseDir=module1
module1.sonar.sources=src/main
module1.sonar.tests=src/test
module1.sonar.java.binaries=target
module1.sonar.junit.reportsPath=target/surefire-reports
module1.sonar.jacoco.reportPath=target/jacoco.exec
module2.sonar.projectName=module2
module2.sonar.language=java
module2.sonar.projectBaseDir=module2
module2.sonar.sources=src/main
module2.sonar.tests=src/test
module2.sonar.java.binaries=target
module2.sonar.junit.reportsPath=target/surefire-reports
module2.sonar.jacoco.reportPath=target/jacoco.exec
tests.sonar.projectName=tests
tests.sonar.language=java
tests.sonar.projectBaseDir=tests
#tests.sonar.sources=src/main
tests.sonar.tests=src/test
tests.sonar.java.binaries=target
tests.sonar.junit.reportsPath=target/surefire-reports
tests.sonar.jacoco.reportPath=target/jacoco.exec
构建后操作增加Record JaCoCo coverage report
,属性默认即可
再次构建应该可以在 sonar 平台看到单元测试以及覆盖率等信息
首先在系统管理-系统设置
找到Extended E-mail Notifation
@google.com
,根据实际填写Use SMTP Authentication
,输入用户名和密码保存
然后在 job 配置界面
$JOB_NAME 单元测试结果
${FILE ,path="$WORKSPACE/target/site/surefire-report.html"}
高级设置,按照下图配置
保存即可,再次构建可以收到邮件