安装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 vim /etc/sysconfig/jenkins JENKINS_USER="root" systemctl start jenkins systemctl enable jenkins
访问页面进行配置
http://10.0.0.201:8080
查看管理员密码
1 2 [root@jenkins2 ~] 9429ed982c10419e89ff06443eb3ac09
选择不安装插件,直接X掉,然后修改admin密码为123
插件安装
更改下载地址
1 https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json
(跳过安装插件,直接上传插件到目录)和修改登录密码
自动安装可选插件
手动下载插件上传安装
插件放入插件目录
1 2 3 4 5 6 7 8 9 10 11 12 [root@jenkins2 ~] [root@jenkins2 /var/lib/jenkins] 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/pluginstar xf jenkins_plugins.tar.gz 解压手动上传的插件 rm -rf jenkins_plugins.tar.gz mv plugins/* . systemctl restart jenkins
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 ~] [root@jenkins2 ~]
将公钥放到gitlab服务器上
添加公钥
配置完成后点击保存,选择立即构建测试
查看创建的项目
1 2 3 4 5 6 7 8 [root@jenkins2 /var/lib/jenkins/workspace/test -job] 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 介绍
SonarQube基础java开发,需安装open JDK8版本
SonarQube需要依赖MySQL数据库,至少5.6版本以上
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 ~] 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
下载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
创建用户sonar并授权
1 2 3 useradd sonar chown -R sonar.sonar /usr/local /sonarqube chown -R sonar.sonar /usr/local /sonarqube-7.0
配置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
使用普通用户启动sonarqube
1 2 3 4 [root@sonar /usr/local ] Starting SonarQube... Started SonarQube. [root@sonar /usr/local ]
启动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 [root@sonar ~] 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] #!/bin/sh DATE=$(date +%Y-%m-%d-%H-%M-%S) 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服务端地址
Name随意填写
URL添加SonarQube的地址
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 cd /var/lib/jenkins/workspace/maven-job/usr/local /sonar-scanner/bin/sonar-scanner \ -Dsonar.projectKey=java \ -Dsonar.sources=. cd /var/lib/jenkins/workspace/maven-jobmvn 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服务器
安装JDK
1 rpm -ivh jdk-8u181-linux-x64.rpm
安装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
访问10.0.1.7:8080测试启动
创建一个maven-job项目
拉去gitlab
的java
项目
上传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 <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 ~] [root@jenkins2 ~] [root@jenkins2 ~] export PATH='/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/usr/local/maven/bin' [root@jenkins2 ~] [root@jenkins2 ~] [root@jenkins2 ~/java] [root@jenkins2 ~/java]
返回设置jenkins上的maven配置
返回设置发现已经正常
jenkins
编写tomcat
的脚本
1 2 3 4 5 6 7 8 [root@jenkins2 /server/scripts] #!/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] 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 cd /var/lib/jenkins/workspace/maven-job/usr/local /sonar-scanner/bin/sonar-scanner \ -Dsonar.projectKey=java \ -Dsonar.sources=. cd /var/lib/jenkins/workspace/maven-jobmvn 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‐jobmvn 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 ~] sonar.host.url=http://10.0.1.203:9000 sonar.login=92668754d1dcfc3bc895e09e22ab15f44e2f04ec sonar.sourceEncoding=UTF-8
配置java
项目,增加构建项sonar
方法一
1 2 3 4 5 Analysis properties 项填写(看项目选择第一个或第二个) sonar.projectName=${JOB_NAME} sonar.projectKey=java sonar.sources=. sonar.java.binaries=target/sonar
方法二
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] 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/message/send?access_token=%s" % Token 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 += " 无变更" return str1 except Exception as 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
解压到某个目录-》进入目录执行以下操作
cd
到 changelog-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.logpython /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上构建测试消息
企业微信收到信息