avatar

5.jenkins+sonar

安装jenkins

安装准备

装备两台服务器 关闭selinux和防火墙

jenkins 10.0.1.201 内存2G 50G+硬盘

sonar 10.0.1.203 内存4G 50G+硬盘

安装JDK运行环境和jenkins服务

上传JDK和jenkins rpm安装包,使用rpm ‐ivh进行安装,安装完JDK运维java测试是否安装成功

1
2
3
rpm -ivh jdk-8u181-linux-x64.rpm
rpm -ivh jenkins-2.176.1-1.1.noarch.rpm
rpm -ql jenkins --->查看安装内容

配置jenkins

1
2
3
4
5
6
#启动用户修改为root
vim /etc/sysconfig/jenkins
JENKINS_USER="root"

systemctl start jenkins
systemctl enable jenkins

访问页面进行配置

http://10.0.0.201:8080

查看管理员密码

1
2
[root@jenkins2 ~]# cat /var/lib/jenkins/secrets/initialAdminPassword
9429ed982c10419e89ff06443eb3ac09

选择不安装插件,直接X掉,然后修改admin密码为123

插件安装

更改下载地址

1
https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json

(跳过安装插件,直接上传插件到目录)和修改登录密码

  1. 自动安装可选插件

  2. 手动下载插件上传安装

  3. 插件放入插件目录

1
2
3
4
5
6
7
8
9
10
11
12
[root@jenkins2 ~]# cd /var/lib/jenkins/
[root@jenkins2 /var/lib/jenkins]# ll
drwxr-xr-x 4 root root 39 Nov 6 23:14 jobs
drwxr-xr-x 132 root root 12288 Nov 1 18:51 plugins

jobs为每次构建后构建的结果目录
plugins为插件目录
cd /var/lib/jenkins/plugins
tar xf jenkins_plugins.tar.gz 解压手动上传的插件
rm -rf jenkins_plugins.tar.gz
mv plugins/* .
systemctl restart jenkins
  1. jenkins主要的目录
1
2
3
4
/usr/lib/jenkins/:jenkins安装目录,WAR包会放在这里
/etc/sysconfig/jenkins:jenkins配置文件,“端口”,“JENKINS_HOME”等都可以在这里配置
/var/lib/jenkins/:默认的JENKINS_HOME
/var/log/jenkins/jenkins.log:Jenkins日志文件

安装玩插件后变成中文版

创建一个自由风格的项目test‐job

丢弃旧的构建

返回jenkins主机生成密钥对

1
2
[root@jenkins2 ~]# ssh-keygen -t rsa
[root@jenkins2 ~]# cat .ssh/id_rsa.pub

将公钥放到gitlab服务器上

添加公钥

配置完成后点击保存,选择立即构建测试

查看创建的项目

1
2
3
4
5
6
7
8
[root@jenkins2 /var/lib/jenkins/workspace/test-job]# ll
total 388
-rw-r--r-- 1 root root 6398 Nov 7 02:38 awardrotate.js
drwxr-xr-x 2 root root 4096 Nov 7 02:38 images
-rw-r--r-- 1 root root 26696 Nov 7 02:38 index.html
-rw-r--r-- 1 root root 93628 Nov 7 02:38 jquery-1.10.2.js
-rw-r--r-- 1 root root 257551 Nov 7 02:38 jquery-2.2.4.js
-rw-r--r-- 1 root root 1334 Nov 7 02:38 README.md

SonarQube

介绍

  1. SonarQube基础java开发,需安装open JDK8版本
  2. SonarQube需要依赖MySQL数据库,至少5.6版本以上
  3. SonarQube的小型实例至少4G内存,如果大型实例需要16G内存

准备环境

安装jdk软件

1
2
rpm -ivh jdk-8u181-linux-x64.rpm
yum ‐y install git java unzip wget

安装数据库(略)

如果端口监听到tcp6,增加一条配置重启即可

1
2
[root@sonar ~]# grep bind /etc/my.cnf
bind‐address=0.0.0.0

或者关闭系统的tcp6

1
2
3
4
5
vim /etc/sysctl.conf  #加入以下三条配置
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
net.ipv6.conf.lo.disable_ipv6 = 1
sysctl -p

创建sonar库,并授权

1
2
create database sonar charset utf8;
show databases;

安装SonarQube

  1. 下载sonar 并使用sonar用户启动
1
2
3
4
unzip sonarqube-7.0.zip
mv sonarqube-7.0 /usr/local/
cd /usr/local/
ln -s sonarqube-7.0 sonarqube
  1. 创建用户sonar并授权
1
2
3
useradd sonar
chown -R sonar.sonar /usr/local/sonarqube
chown -R sonar.sonar /usr/local/sonarqube-7.0
  1. 配置sonar连接本地数据库
1
2
3
4
vim /usr/local/sonarqube/conf/sonar.properties
sonar.jdbc.username=root
sonar.jdbc.password=123
sonar.jdbc.url=jdbc:mysql://localhost:3306/sonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useConfigs=maxPerformance&useSSL=false
  1. 使用普通用户启动sonarqube
1
2
3
4
[root@sonar /usr/local]# su - sonar -c "/usr/local/sonarqube/bin/linux-x86-64/sonar.sh start"
Starting SonarQube...
Started SonarQube.
[root@sonar /usr/local]# netstat -lntup
  1. 启动sonar

启动后的端口为9000使用浏览器直接访问http://10.0.1.203:9000/about

用户名admin 密码admin,生成一个tokin,只显示一次记录好

配置管理sonar 安装插件

1.安装中文汉化插件

在页面上找到administrator > Marketplace > 搜索框 chinese,出现一个chinese pack 然后点击install,安装完点击 restart 重启生效

2.默认已安装C JAVA Python PHP JS 等代码质量分析工具

如果一个项目使用了JAVA CSS JS HTML ,默认情况下sonar只会检测JAVA,JS等代码的漏洞和bug,如果安装了HTML、CSS等插件,则会检测该项目代码中JAVA JS HTML CSS代码的漏洞和bug

手动安装插件

1
2
3
4
5
6
7
8
9
10
11
12
#备份源目录
mv /usr/local/sonarqube/extensions/plugins /usr/local/sonarqube/extensions/plugins_back
tar xf sonar_plugins.tar.gz -C /usr/local/sonarqube/extensions/
chown -R sonar.sonar /usr/local/sonarqube

#重启sonar服务
[root@sonar ~]# su - sonar -c "/usr/local/sonarqube/bin/linux-x86-64/sonar.sh restart"
Stopping SonarQube...
Waiting for SonarQube to exit...
Stopped SonarQube.
Starting SonarQube...
Started SonarQube.

重启后重新登陆,显示汉化完成

使用jenkins的test-job推送到web01测试

jenkins服务器测试推送html代码至SonarQube检测 下载客户端

客户端其他版本下载地址搜索对应版本 例如:SonarScanner 4.0

1
2
unzip sonar-scanner-cli-4.0.0.1744-linux.zip -d /usr/local/
cd /usr/local/ && ln -s sonar-scanner-4.0.0.1744-linux sonar-scanner

进入jenkins项目目录下推送测试

1
2
3
4
5
6
7
cd /var/lib/jenkins/workspace/test-job

/usr/local/sonar-scanner/bin/sonar-scanner \
-Dsonar.projectKey=html \
-Dsonar.sources=. \
-Dsonar.host.url=http://10.0.1.203:9000 \
-Dsonar.login=92668754d1dcfc3bc895e09e22ab15f44e2f04ec

进入sonar主页刷新后可以看到已推送成功

使用jenkins自动推送

到项目目录下进行代码推送分析 打开认证

将sonar集成到jenkins中需要安装插件,前面安装包已下载

进入jenkins主机编写脚本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
mkdir -p /server/scripts
cd /server/scripts/
[root@jenkins2 /server/scripts]# cat deploy.sh
#!/bin/sh
DATE=$(date +%Y-%m-%d-%H-%M-%S)
#CODE_DIR="/var/lib/jenkins/workspace/my-freestyle-job"
CODE_DIR="${WORKSPACE}"
WEB_DIR="/code/www/"

get_code_tar(){
cd $CODE_DIR && tar zcf /opt/web-$DATE.tar.gz ./*
}

scp_code_web(){
scp /opt/web-$DATE.tar.gz 10.0.1.7:$WEB_DIR
}

code_tarxf(){
ssh 10.0.1.7 "cd $WEB_DIR &&mkdir web-$DATE && tar xf web-$DATE.tar.gz -C web-$DATE"

}
ln_html(){
ssh 10.0.1.7 "cd $WEB_DIR && rm -rf html && ln -s web-$DATE html"
}

main(){

get_code_tar;
scp_code_web;
code_tarxf;
ln_html;
}
main

jenkins把公钥分发给web01主机

1
ssh-copy-id -i /root/.ssh/id_rsa.pub 10.0.1.7

jenkins主机test-job重新部署

立即构建测试,推送成功

jenkins配置SonarQube

1)jenkins上配置SonarQube服务端

系统管理->系统设置->sonarQube 告诉jenkins SonarQubeServer服务端地址

  1. Name随意填写

  2. URL添加SonarQube的地址

  3. token添加一个secret text 填写之前安装SonarQube的Token

保存后,重新打开,添加用户

token添加一个secret text 填写之前安装SonarQube的Token,配置完成后保存

2) jenkins配置执行sonar-scanner命令的家目录

让jenkins能找到该命令 系统管理->全局工具配置

3)再次配置test-job的配置

Analysis properties项填写完保存执行,最后在SonarQube中查看结果

4)测试

查看sonar服务器,发现jenkins推送成功

jenkins推送java项目

推送java代码进行分析,使用以下方式

1
2
3
4
5
6
7
8
9
10
11
#方法1
cd /var/lib/jenkins/workspace/maven-job
/usr/local/sonar-scanner/bin/sonar-scanner \
-Dsonar.projectKey=java \
-Dsonar.sources=.

#方法2
cd /var/lib/jenkins/workspace/maven-job
mvn sonar:sonar \
-Dsonar.host.url=http://10.0.1.203:9000 \
-Dsonar.login=92668754d1dcfc3bc895e09e22ab15f44e2f04ec

环境准备

gitlab主机上新建一个项目

上传java项目到gitlab

1
2
3
4
5
6
7
tar xf hello-world-war.tar.gz
cd hello-world-war/

git remote -v
git remote remove origin
git remote add origin git@10.0.1.200:oldboy/java.git
git push -u origin --all

web01上部署tomcat服务器

  1. 安装JDK
1
rpm -ivh jdk-8u181-linux-x64.rpm
  1. 安装TOMCAT
1
2
3
tar xf apache-tomcat-8.0.27.tar.gz -C /usr/local/
ln -s apache-tomcat-8.0.27 tomcat
/usr/local/tomcat/bin/startup.sh --->启动tomcat
  1. 访问10.0.1.7:8080测试启动

创建一个maven-job项目

拉去gitlabjava项目

上传maven

1
2
3
4
5
6
7
8
9
10
11
tar xf apache-maven-3.3.9-bin.tar.gz -C /usr/local/
cd /usr/local/
ln -s apache-maven-3.3.9 maven

vim /usr/local/maven/conf/settings.xml #更改maven配置文件为阿里云下载
<mirror>
<id>nexus-aliyun</id>
<mirrorOf>*</mirrorOf>
<name>Nexus aliyun</name>
<url>http://maven.aliyun.com/nexus/content/groups/public</url>
</mirror>

gitlab克隆java项目

1
2
3
4
5
6
7
8
[root@jenkins2 ~]# git clone git@10.0.1.200:oldboy/java.git
[root@jenkins2 ~]# echo $PATH
[root@jenkins2 ~]# vim /etc/profile
export PATH='/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/usr/local/maven/bin'
[root@jenkins2 ~]# source /etc/profile
[root@jenkins2 ~]# cd java/
[root@jenkins2 ~/java]# mvn clean
[root@jenkins2 ~/java]# mvn package

返回设置jenkins上的maven配置

返回设置发现已经正常

jenkins编写tomcat的脚本

1
2
3
4
5
6
7
8
[root@jenkins2 /server/scripts]# cat tomcat.sh
#!/bin/bash
TIME=`date +%F`
WEB_DIR="/usr/local/tomcat/webapps"
ssh 10.0.1.7 "cd ${WEB_DIR} && mkdir ${TIME}-${BUTLD_ID}"
scp ${WORKSPACE}/target/*.war 10.0.1.7:${WEB_DIR}/${TIME}-${BUTLD_ID}
ssh 10.0.1.7 "cd ${WEB_DIR} && rm -rf ROOT && ln -s ${TIME}-${BUTLD_ID} ROOT"
ssh 10.0.1.7 "cd ${WEB_DIR}/ROOT && unzip *.war && rm -rf *.war"

保存后,立即构建测试

1
2
3
4
5
6
7
8
[root@web01 /usr/local/tomcat/webapps]# ll
total 4
drwxr-xr-x 4 root root 54 Nov 7 18:51 2019-11-07_
drwxr-xr-x 14 root root 4096 Nov 7 18:04 docs
drwxr-xr-x 6 root root 83 Nov 7 18:04 examples
drwxr-xr-x 5 root root 87 Nov 7 18:04 host-manager
drwxr-xr-x 5 root root 103 Nov 7 18:04 manager
lrwxrwxrwx 1 root root 11 Nov 7 18:51 ROOT -> 2019-11-07_

访问10.0.1.7:8080测试

java项目推送sonar

1
2
3
4
5
6
7
8
9
10
11
#方法1
cd /var/lib/jenkins/workspace/maven-job
/usr/local/sonar-scanner/bin/sonar-scanner \
-Dsonar.projectKey=java \
-Dsonar.sources=.

#方法2
cd /var/lib/jenkins/workspace/maven-job
mvn sonar:sonar \
-Dsonar.host.url=http://10.0.1.203:9000 \
-Dsonar.login=92668754d1dcfc3bc895e09e22ab15f44e2f04ec

进入jenkins主机手动推送测试

1
2
3
4
cd /var/lib/jenkins/workspace/maven‐job
mvn sonar:sonar \
‐Dsonar.host.url=http://10.0.1.203:9000 \
‐Dsonar.login=92668754d1dcfc3bc895e09e22ab15f44e2f04ec

访问10.0.1.203:9000测试

sonar客户端更改配置文件地址

1
2
3
4
[root@jenkins2 ~]# vim /usr/local/sonar-scanner/conf/sonar-scanner.properties
sonar.host.url=http://10.0.1.203:9000
sonar.login=92668754d1dcfc3bc895e09e22ab15f44e2f04ec
sonar.sourceEncoding=UTF-8

配置java项目,增加构建项sonar

  1. 方法一
1
2
3
4
5
Analysis properties 项填写(看项目选择第一个或第二个)
sonar.projectName=${JOB_NAME}
sonar.projectKey=java
sonar.sources=.
sonar.java.binaries=target/sonar

  1. 方法二
1
2
3
4
5
clean
verify
sonar:sonar
-Dsonar.host.url=http://10.0.1.203:9000
-Dsonar.login=92668754d1dcfc3bc895e09e22ab15f44e2f04ec

构建成功后测试

jenkins集成企业微信

jenkins集成微信,工作中档git有新代码提交会触发钩子自动完成上线,运维和开发人员不须时刻盯着jenkins,通过微信的方式显示给运维和开发人员

1.注册微信企业公众号

搜索微信公众平台->注册->选择企业微信

选择完成后把下面信息进行完善->使用自己微信扫描二维码进行管理后-点注册

注册成功登陆后点击应用管理->创建应用

上次一张图片->填写应用名称-可见范围->创建应用-保存好agentld和secret写入py脚本

2.更改py脚本内对应的内容-touser为账号名称

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
[root@jenkins2 /server/scripts]# cat jenkins_notify.py 
#!/usr/bin/python2.7
#_*_coding:utf-8 _*_


import requests,sys,json
import urllib3
urllib3.disable_warnings()

reload(sys)
sys.setdefaultencoding('utf-8')

def GetToken(Corpid,Secret):
Url = "https://qyapi.weixin.qq.com/cgi-bin/gettoken"
Data = {
"corpid":Corpid,
"corpsecret":Secret
}
r = requests.get(url=Url,params=Data,verify=False)
Token = r.json()['access_token']
return Token

def SendMessage(Token,Subject,Content, ProName):
#Url = "https://qyapi.weixin.qq.com/cgi-bin/appchat/send?access_token=%s" % Token
Url = "https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=%s" % Token
#Data = {
# "chatid": "JenkinsAlarm", # 此处不明白请参考企业微信官网
# "msgtype": "text",
# "text": {
# "content": "[项目名称] : " + ProName + '\n' + "[项目地址] : " + Subject + '\n' + Content + '\n'
# },
# "safe": "0"
#}
data = {
"touser" : "WuFei",
"msgtype" : "text",
"agentid" : 1000002,
"text" : {
"content" : "[项目名称] : " + ProName + '\n' + "[项目地址] : " + Subject + '\n' +
Content + '\n'
},
"safe":0
}
r = requests.post(url=Url,data=json.dumps(data),verify=False)
return r.text

def action_from_file(filename):
try:
str1 = '[变更日志] : '
with open(filename, 'r') as f:
for i in f.readlines():
str1 += i
print str1
if len(str1) == 17:
str1 += " 无变更"
# print str1
return str1
except Exception as e:
#print('[ERROR] {0}'.format(e))
str1 += str(e)


if __name__ == '__main__':
Corpid = "ww92914ec6b1198c60"
Secret = "N7uT7xiIAipasfOYSs9QQ5LcNqwPqooi6beJT1P7x-Y"

Subject = sys.argv[1]
Content = action_from_file(sys.argv[2])
ProName = sys.argv[3]

Token = GetToken(Corpid, Secret)
Status = SendMessage(Token,Subject,Content,ProName)
print Status

Corpid为企业ID 这里只把corpid写入对应的位置

3.完成后配置jenkins

1.下载安装插件

由于jenkins没有官网的插件来完成此功能,所以我们只能用网络上一些开源的插件(线下班不需要以下步骤,已集合在plugins)

github下载代码:https://github.com/daniel-beck/changelog-environment-plugin

解压到某个目录-》进入目录执行以下操作

cdchangelog-environment-plugin-master 下,执行 mvn verify

时间较长,会在changelog-environment-plugin-master/target/下有个changelog-environment.hpi文件,上传到jenkins即可使用

2.配置jenkins的test-job

jenkins进入到项目中->构建环境多了Add Changelog Information to Environment->点击选择

1
2
3
4
5
Entry Format   
%3$s(at %4$s via %1$s) 参数分别为ChangeLog内容,时间,提交人

Date Format
yyyy‐MM‐dd HH:mm:ss 就是时间格式

构建后操作选择Post build task

# 如果没有此选择请安装Hudson Post build task 插件,SCM_CHANGELOG须安装changelog插件

1
2
3
4
echo "==========Start Notify=============="
echo ${SCM_CHANGELOG} > /tmp/${JOB_NAME}_change.log
python /server/scripts/jenkins_notify.py ${BUILD_URL} /tmp/${JOB_NAME}_change.log ${JOB_NAME}
rm ‐fv /tmp/${JOB_NAME}_change.log

3.上传py脚本->jenkins服务器上安装python requests模块

1
2
3
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
yum -y install python-pip
pip2.7 install requests

4.打开构建触发器

5.gitlab克隆项目修改并推送

1
2
3
4
git clone git@10.0.1.200:oldboy/dzp.git
cd dzp/
git commit -am "修改测试微信消息"
git push -u origin master

6.jenkins上构建测试消息

企业微信收到信息

文章作者: Wu Fei
文章链接: http://linuxwf.com/2020/04/15/5-jenkins-sonar/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 WF's Blog
打赏
  • 微信
    微信
  • 支付宝
    支付宝

评论