jenkins 介绍:
jenkins就是一个调度平台
jenkins是一个 ci(持续集成) 和 cd(持续部署) 的平台
1.安装jenkins
jenkins支持N多种安装方式
- yum安装
- war包安装 ---> tomcat上
- 容器安装 ---> docker
因为jenkins是基于java开发的,索引要先安装Java环境才能启动
这里使用的是下载rpm包直接安装
安装
[root@node2 /server/tools]# yum install java -y
[root@node2 /server/tools]# yum localinstall -y jenkins-2.176.1-1.1.noarch.rpm
[root@node2 /server/tools]# rpm -ql jenkins
/etc/init.d/jenkins #jenkins 的启停脚本
/etc/logrotate.d/jenkins #日志切割的脚本
/etc/sysconfig/jenkins #主配置文件
/usr/lib/jenkins
/usr/lib/jenkins/jenkins.war #
/usr/sbin/rcjenkins #指向启停脚本的软连接
/var/cache/jenkins #缓存目录
/var/lib/jenkins #工作目录
/var/log/jenkins #日志目录
2.jenkins的安装的3种方式
- 加速安装插件 ( 替换源 )
https://mirror.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json
2.上传一个插件 ( .hpi文件 )
1.替换源之后,可能会出现有些偏门的插件官网没有 ,个人自己开发
https://mirror.tuna.tsinghua.edu.cn/jenkins/plugins/
https://plugins.jenkins.io
3.导入插件
新的服务器上-->安装所有的插件-->打包--->推送到其他服务器--->解包 -->导入 结束
1.jenkins的插件目录在哪
/var/lib/jenkins/plugins/
2.停止jenkins服务
[root@jenkins ~]# systemctl stop jenkins
3.解压导入插件
[root@jenkins ~]# tar xf jenkins_2.176_plugins.tar.gz
[root@jenkins ~]# \cp -rp plugins/* /var/lib/jenkins/plugins/
4.重新授权 ( 因为jenkins是 jenkins用户运行的 )
[root@jenkins ~]# chown -R jenkins.jenkins /var/lib/jenkins/plugins/
[root@jenkins ~]# systemctl start jenkins
jenkins新安装的插件可以直接使用 但是 旧的升级 无法直接使用,需要重启.
3. jenkins 上基于gitlab 构建软件项目注意事项:
(1)在gitlab上添加jenkins上的公钥地址
(2)在jenkins软件中添加本服务器的私钥地址,这样才能拉取到gitlab上的文件
4.jenkins 自动上线html代码
(1)新建任务
(2)选择项目类型
(3)配置
(4) 部署最新代码
(5)shell 中的内容
[root@jenkins /server/scripts]# cat monitor.sh
#!/bin/bash
time=`date +%F-%H-%M`
Web_host="10.0.0.7 10.0.0.8"
sdir=opt
ddir=opt
web_name=web_monitor.$time
tar_package() {
#1、将软件包打包
cd $WORKSPACE
tar czf /$sdir/$web_name.tar.gz ./*
}
uploading_webserver(){
for i in $Web_host
do
#2、推送软件包
scp /$sdir/$web_name.tar.gz root@$i:/$ddir
#3、解压软件包、删除原有软件包、软连接
ssh root@$i "mkdir /code/web_code -p && \
tar -xf /$ddir/$web_name.tar.gz -C /code/web_code && \
rm -rf /html/www && \
ln -s /code/web_code/ /html/www
"
done
}
excute_web() {
tar_package
uploading_webserver
}
excute_web
[root@jenkins /server/scripts]#
5. jenkins 代码回退
第一种代码回退
需要手动输入需要的代码版本
在配置页面选择参数化构建,选择文本参数
代码回退中使用的shell脚本
[root@jenkins /server/scripts]# cat monitor_job1.sh
#!/bin/bash
time=`date +%F-%H-%M`
Web_host="10.0.0.7 10.0.0.8"
sdir=opt
ddir=opt
web_name=web_monitor.$time-$git_version
tar_package() {
#1、将软件包打包
cd $WORKSPACE
tar czf /$sdir/$web_name.tar.gz ./*
}
uploading_webserver(){
for i in $Web_host
do
#2、推送软件包
scp /$sdir/$web_name.tar.gz root@$i:/$ddir
#3、解压软件包、删除原有软件包、软连接
ssh root@$i "mkdir /code/web_code -p && \
tar -xf /$ddir/$web_name.tar.gz -C /code/web_code && \
rm -rf /html/www && \
ln -s /code/web_code/ /html/www
"
done
}
excute_web() {
tar_package
uploading_webserver
}
excute_web
[root@jenkins /server/scripts]#
第二种代码回退
使用插件选择代码进行回退
使用Git Parameter 插件进行代码回退
在初始界面——>点击系统管理———>插件管理——选择可选插件 ——>搜索栏输入 git parameter
如图:
配置
其他的与文本回退方式(第一种)一模一样,执行的shell脚本也是相同的
6、java项目手动部署
实验环境:
(1)1个maven节点、1个nginx负载均衡节点、2个tomcat节点
(2)2台tomcat节点上部署jdk环境(yum install -y java)
(3)nginx负载均衡配置tomcat负载均衡反向代理
(4)在maven节点准备jdk环境,并安装maven
1.配置tomcat节点(2台),两个节点配置相同
tomcat配置完成后验证是否可以正常访问
[root@web02 /server/tools]# yum install -y java
[root@web02 /server/tools]# tar -xf apache-tomcat-9.0.12.tar.gz
[root@web02 /server/tools]# ls
apache-tomcat-9.0.12 apache-tomcat-9.0.12.tar.gz sersync_installdir_64bit.zip
[root@web02 /server/tools]# mkdir /soft -p
[root@web02 /server/tools]# ln -s /server/tools/apache-tomcat-9.0.12 /soft/apache-tomcat
[root@web02 /server/tools]# ll /soft/apache-tomcat
lrwxrwxrwx. 1 root root 34 Nov 19 21:35 /soft/apache-tomcat -> /server/tools/apache-tomcat-9.0.12
[root@web02 /soft/tomcat/bin]# ./startup.sh
- nginx 反向代理配置
upstream tomcat {
server 10.0.0.7:8080;
server 10.0.0.8:8080;
server 10.0.0.9:8080;
}
server {
listen 80;
server_name test.tomcat.com;
location / {
proxy_pass http://tomcat;
proxy_set_header Host $host;
}
3.安装maven
maven使用注意事项:
注意maven 也是依赖于JDK(java)
修改/etc/maven/settings.xml文件,配置完国内maven源后,必须在对应的war包下执行mvn clean package
国内源配置参考:https://www.cnblogs.com/sunweiye/p/11103388.html
[root@jenkins ~]# yum install -y maven
[root@jenkins ~]# yum install -y java
[root@jenkins ~]# mvn --version
Apache Maven 3.0.5 (Red Hat 3.0.5-17)
Maven home: /usr/share/maven
Java version: 1.8.0_232, vendor: Oracle Corporation
Java home: /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.232.b09-0.el7_7.x86_64/jre
Default locale: en_US, platform encoding: UTF-8
OS name: "linux", version: "3.10.0-957.el7.x86_64", arch: "amd64", family: "unix"
4.将代码上传至maven节点
[root@jenkins /mnt/java_job]# ll /mnt/java_job #此目录为war包存放的目录
总用量 8
drwxr-xr-x. 2 root root 29 5月 23 2014 dist
-rw-r--r--. 1 root root 930 5月 23 2014 pom.xml
-rw-r--r--. 1 root root 213 5月 23 2014 README.md
drwxr-xr-x. 3 root root 18 5月 23 2014 src
[root@jenkins /mnt/java_job]# mvn clean package
[root@jenkins /mnt/java_job]# ll /mnt/java_job/ #此处可以看到多出了一个target目录,这里就存放着maven编译后,tomcat可运行的war包
total 8
drwxr-xr-x. 2 root root 29 Nov 19 22:54 dist
-rw-r--r--. 1 root root 930 Nov 19 22:54 pom.xml
-rw-r--r--. 1 root root 213 Nov 19 22:54 README.md
drwxr-xr-x. 3 root root 18 Nov 19 22:54 src
drwxr-xr-x. 5 root root 106 Nov 19 22:59 target
[root@jenkins /mnt/java_job]# ll target/
total 4
drwxr-xr-x. 4 root root 54 Nov 19 22:59 hello-world-war-1.0.0
-rw-r--r--. 1 root root 2404 Nov 19 22:59 hello-world-war-1.0.0.war
drwxr-xr-x. 2 root root 28 Nov 19 22:59 maven-archiver
drwxr-xr-x. 2 root root 6 Nov 19 22:59 surefire
[root@jenkins /mnt/java_job]#
5.将编译好的war包推送到tomcat节点
[root@jenkins /mnt/java_job]# scp target/*.war [email protected]:/soft/tomcat/webapps/ROOT.war
hello-world-war-1.0.0.war 100% 2404 1.2MB/s 00:00
[root@jenkins /mnt/java_job]# scp target/*.war [email protected]:/soft/tomcat/webapps/ROOT.war
hello-world-war-1.0.0.war
6.重启tomcat后进行访问测试
[root@jenkins /mnt/java_job]# ssh [email protected] "pkill java && /soft/tomcat/bin/startup.sh"
Tomcat started.
[root@jenkins /mnt/java_job]# ssh [email protected] "pkill java && /soft/tomcat/bin/startup.sh"
Tomcat started.
7. jenkins 集成gitlab与maven
java项目部署流程
1) 开发提交java的源代码----------------------------------------(开发完成)
2) 运维手动拉取代码至本地 git clone---------------------------- (jenkins完成)
3) 对代码进行编译 --> war ------------------------------------(jenkins完成)
1.下载maven:yum install java maven
2.进入项目,执行编译命令:mvn clean package
4) 将war推送到web集群组即可-------------------------------------(jenkins完成)
5) 重启Tomcat服务----------------------------------------------(jenkins完成)
相关实验环境如下
实验环境:
(1)1台gitlab、1台jenkins、1台nginx负载均衡、2台tomcat节点
(2)2台tomcat节点上部署jdk环境(yum install -y java)
(3)nginx负载均衡配置tomcat负载均衡反向代理
(4)在gitlab 上新建一个项目,并将准备好的war包推送至新建仓库
(5)在jenkins 节点上安装 jenkins 及maven(jenkins安装本节最开始处有安装方法)1台nginx负载均衡、2台tomcat节点如本文第6节(java项目手动部署)相同配置即可
1、搭建好gitlab 并将准备好的java代码上传至gitlab,gitlab搭建可参考本人博客:本文中有详细gitlab搭建方法及代码推送:https://www.jianshu.com/p/6235cce57a46
2、安装jenkins 服务并安装maven
jenkins 页面配置如下:
Post Steps中的代码如下:
[root@jenkins ~]# cat /server/scripts/deploy_java.sh
#!/bin/bash
time=`date +%F-%H-%M`
Web_host="10.0.0.7 10.0.0.8"
sdir=opt
ddir=opt
web_name=ROOT.$time-$git_version
tar_package() {
#1、进入jenkins包目录
cd $WORKSPACE
}
uploading_webserver(){
for i in $Web_host
do
#2、推送软件包
scp target/*.war root@$i:/$ddir/${web_name}.war
#3、解压软件包、删除原有软件包、软连接
ssh root@$i "mkdir /$ddir/$web_name -p && \
unzip /$ddir/${web_name}.war -d /$ddir/$web_name/ && \
rm -rf /$ddir/${web_name}.war && \
rm -rf /soft/tomcat/webapps/ROOT && \
ln -s /$ddir/$web_name /soft/tomcat/webapps/ROOT && \
pkill java && \
/soft/tomcat/bin/startup.sh
"
done
}
excute_web() {
tar_package
uploading_webserver
}
excute_web
[root@jenkins ~]#
8、jenkins 自动上线代码钉钉通知
9、sonarqube 手动部署
安装sonarqube
1.安装sonarqube
1.环境准备
[root@sonarqube ~]# systemctl stop firewalld
[root@sonarqu be ~]# systemctl disable firewalld
[root@sonarqube ~]# setenforce 0
2.安装Sonarqube依赖工具
[root@sonarqube ~]# yum install git java unzip wget -y
[root@sonarqube ~]# yum localinstall -y mysql-community-*
3.启动数据库,然后为数据库配置密码。最后创建一个sonar库
[root@sonarqube ~]# systemctl start mysqld
[root@sonarqube ~]# mysqladmin password 123
[root@sonarqube ~]# mysql -uroot -p123 -e "CREATE DATABASE sonar DEFAULT CHARACTER SET utf8;"
[root@sonarqube ~]# mysql -uroot -p123 -e "show databases;"
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sonar |
+--------------------+
4.下载sonarqube,并安装解压至/usr/local
[root@sonarqube ~]# wget https://binaries.sonarsource.com/Distribution/sonarqube/sonarqube-7.0.zip
[root@sonarqube ~]# unzip sonarqube-7.0.zip -d /usr/local/
[root@sonarqube ~]# useradd sonar
[root@sonarqube ~]# chown -R sonar.sonar /usr/local/sonarqube-7.0/
[root@sonarqube ~]# ln -s /usr/local/sonarqube-7.0/ /usr/local/sonarqube
5.修改sonarqube连接数据库配置文件
[root@sonarqube ~]# 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
6.启动sonarqube服务(由于es必须普通用户启动,所以不能使用root用户,否则启动失败)
[root@sonarqube ~]# su - sonar -c "/usr/local/sonarqube/bin/linux-x86-64/sonar.sh start"
手动推送代码测试
手动代码测试要依赖sonarqube 客户端,客户端解压到本地可以直接使用。
手动测试有两种方法:
第一种命令推送
第二种将推送地址写入配置文件
这里演示第二种
1.配置sonar-scanner指向sonarqube服务端
[root@jenkins ~]# cat /usr/local/sonar-scanner/conf/sonar-scanner.properties
sonar.host.url=http://www.sonar.com:9000
sonar.login=113234aa9f09aed4bcb11e16092f5bd73d9ccfa7
#sonar.sourceEncoding=UTF-8
2.配置本地hosts解析
10.0.0.130 www.sonar.com:9000
3.进入项目,执行sonar-scanner
[root@jenkins ~]# /usr/local/sonar-scanner/bin/sonar-scanner \
-Dsonar.projectKey=monitor \
-Dsonar.sources=.
sonar.login生成方式
登录sonarqube
10、 jenkins 集成sonarqube
jenkins安装插件: SonarQube Scanner
告诉jenkins: jeknins上配置
服务端是谁: 设置-->系统设置-->SonarQube servers
客户端路径: 设置-->全局工具配置-->sonarqube scanner
客户端路径:
服务端是谁
11 、jenkins改造项目支持sonarqube质量检测
java | mvn
sonar.projectName=${JOB_NAME}
sonar.projectKey=java
sonar.sources=.
sonar.java.binaries=target/sonar
html | php
sonar.projectName=${JOB_NAME}
sonar.projectKey=php
sonar.sources=.
java项目: