Devops 05 Jenkins

环境准备

主机名IP部署项目作用
gitlab10.0.0.81Gitlab内网的远端仓库
Jenkins10.0.0.83Jenkins项目发布平台
dev0110.0.0.82git、nginx开发测试用 web 服务器

注意:如果遇到出错不要着急,仔细分析是否漏了步骤,

秘钥没有给对

用户权限是否够

IP 如果不一样就要按自己的来,不一定非要是81、82、83


部署 Jenkins

# 建议内存设置 >2G
官方中文地址:https://www.jenkins.io/zh/
官方下载地址:https://jenkins.io/download/
镜像下载地址:http://mirrors.jenkins-ci.org/

#上传3个文件【2个安装包,一个插件】
jdk-8u181-linux-x64.rpm		# Java
jenkins-2.99-1.1.noarch.rpm	# Jenkins
plugins.tar.gz				# Jenkins插件
#安装Jenkins安装包
rpm -ivh jdk-8u181-linux-x64.rpm jenkins-2.99-1.1.noarch.rpm

#配置Jenkins用户为root
vim +29 /etc/sysconfig/jenkins
JENKINS_USER="root"

#启动Jenkins
[root@jenkins ~]# systemctl start jenkins
[root@jenkins ~]# netstat -lntp | grep 8080
tcp6       0      0 :::8080                 :::*                    LISTEN      18924/java

Jenkins 配置文件

#Jenkins配置文件
[root@jenkins ~]# ll /etc/sysconfig/jenkins
-rw------- 1 root root 3113 2020-03-12 16:10 /etc/sysconfig/jenkins

#Jenkins的家目录
[root@jenkins ~]# ll /var/lib/jenkins/ -d
drwxr-xr-x 11 jenkins jenkins 4096 2020-03-12 16:43 /var/lib/jenkins/

#Jenkins日志
[root@jenkins ~]# ll /var/log/jenkins/jenkins.log
-rw-r--r-- 1 root root 25040 2020-03-12 16:43 /var/log/jenkins/jenkins.log

#Jenkins的安装程序目录,WAR包会放在这里
[root@jenkins ~]# ll /usr/lib/jenkins/ -d
drwxr-xr-x 2 root root 25 2020-03-12 16:08 /usr/lib/jenkins/

Jenkins 页面初始配置

#浏览器打开Jenkins
http://10.0.0.83:8080/

#依据提示查看密码,填写进web页面
[root@jenkins ~]# cat /var/lib/jenkins/secrets/initialAdminPassword

在这里插入图片描述
出现上图后根据提示在Jenkins服务器上去查找密码,填入下方空白框进行登陆
cat /var/lib/jenkins/secrets/initialAdminPassword

install suggested plugins #安装Jenkins提供的插件

select plugins to install #自定义安装需要的插件

直接关闭就可以了

在这里插入图片描述
点击篮框 Start using Jenkins【开始使用 Jenkins 】
在这里插入图片描述
接下来设置登陆密码
在这里插入图片描述
在这里插入图片描述

安装插件

手动下载
#解压之前上传的插件
[root@jenkins ~]# tar xf plugins.tar.gz
[root@jenkins ~]# mv /root/plugins/*  /var/lib/jenkins/plugins/
#重启Jenkins服务,插件才能生效
systemctl restart jenkins.service
自动下载

登陆 Jenkins 后点左上角 Jenkins 右侧的小三角》系统管理》管理插件》可更新|可选插件

请添加图片描述

Jenkins 内部变量

构建时的第一个命令,查看构建项目目录
Jenkins的内部变量可以在这里输入export或export -p 来查看
$WORKSPACE		#是当前项目代码文件的存放路径
$JOB_NAME		#是Jenkins配置中项目名称
$BUILD_NUMBER	#是当前项目此次构建的序号

#所有 Jenkins 环境变量
export BUILD_CAUSE="MANUALTRIGGER"
export BUILD_CAUSE_MANUALTRIGGER="true"
export BUILD_DISPLAY_NAME="#2"
export BUILD_ID="2"
export BUILD_NUMBER="2"
export BUILD_TAG="jenkins-dzp-2"
export EXECUTOR_NUMBER="1"
export HOME="/root"
export HUDSON_COOKIE="53c4e97e-ab50-4d27-8d3d-cc0780c5c928"
export HUDSON_HOME="/var/lib/jenkins"
export HUDSON_SERVER_COOKIE="0c056f557fc12efc"
export JENKINS_HOME="/var/lib/jenkins"
export JENKINS_SERVER_COOKIE="0c056f557fc12efc"
export JOB_BASE_NAME="dzp"
export JOB_DISPLAY_URL="http://unconfigured-jenkins-location/job/dzp/display/redirect"
export JOB_NAME="dzp"
export LANG="en_US.UTF-8"
export NODE_LABELS="master"
export NODE_NAME="master"
export OLDPWD
export PATH="/sbin:/usr/sbin:/bin:/usr/bin"
export PWD="/var/lib/jenkins/workspace/dzp"
export ROOT_BUILD_CAUSE="MANUALTRIGGER"
export ROOT_BUILD_CAUSE_MANUALTRIGGER="true"
export RUN_CHANGES_DISPLAY_URL="http://unconfigured-jenkins-location/job/dzp/2/display/redirect?page=changes"
export RUN_DISPLAY_URL="http://unconfigured-jenkins-location/job/dzp/2/display/redirect"
export SHELL="/bin/bash"
export SHLVL="3"
export WORKSPACE="/var/lib/jenkins/workspace/dzp"
export _="/etc/alternatives/java"

Jenkins 自由风格项目

1.创建项目【自由风格】

登陆后点击创建一个新任务
在这里插入图片描述

下图中3个是常用的项目选项
构建一个自由风格的软件项目
构建一个maven项目
Pipeline

# 这里我选了第一个自由风格,输入项目名称后点击下方确定按钮创建项目

在这里插入图片描述
项目创建好了以后可以点下图进入项目
在这里插入图片描述

2.配置项目

点击配置,开始配置项目
在这里插入图片描述

项目名称和项目记录保留时间

在这里插入图片描述

源码管理【设置从哪里获取源码,先选默认有需要再来改】

在这里插入图片描述

构建

构建时可以选择很多,这里也可以执行脚本 /bin/bash /scripts/depoly.sh

这里我选择常用的 shell 命令

为了知道构建的时候我们是在哪个目录下执行的 shell 命令 
第一个命令,查看构建项目目录
pwd

在这里插入图片描述

在这里插入图片描述

保存配置
在这里插入图片描述

3.构建项目

点击立即构建

在这里插入图片描述

查看构建状态【蓝色圆点表示成功】

在这里插入图片描述

点击上图三角形,选择下图选项

在这里插入图片描述

配置的构建命令显示出了项目的目录地址

在这里插入图片描述

Jenkins 构建部署新代码

1.码云网站获取代码

去码云网站搜索一个项目【幸运大转盘】
在这里插入图片描述
在Gitlab网站新建一个项目,导入码云的代码地址

https://gitee.com/lovexzq/XingYunDaZhuanPan.git

在这里插入图片描述
进入my项目
在这里插入图片描述
复制项目地址
在这里插入图片描述

2.在 dev01 上部署 web

# 将大转盘项目克隆到 dev01 主机
[root@dev01 ~]# git clone git@10.0.0.72:OPS/dzp.git
Cloning into 'dzp'...
remote: Counting objects: 19, done.
remote: Compressing objects: 100% (15/15), done.
remote: Total 19 (delta 2), reused 0 (delta 0)
Receiving objects: 100% (19/19), 104.36 KiB | 0 bytes/s, done.
Resolving deltas: 100% (2/2), done.
[root@dev01 ~]# ls dzp
css  img  js  lottery.html  README.md
# 创建站点目录
[root@dev01 ~]# mkdir -p /data/code
# 拷贝站点文件
[root@dev01 ~]# cp dzp /data/code
# 安装 nginx
[root@dev01 ~]# yum -y install nginx
# 创建站点配置文件
[root@dev01 ~]# vim /etc/nginx/conf.d/dzp.com.conf
server {
    listen 80;
    server_name dzp.com;

    location / {
        root /data/code/dzp;
        index lottery.html;
    }
}
# 启动 nginx
[root@dev01 dzp]# systemctl restart nginx
# 在 windows 电脑上配置解析
打开 C:\Windows\System32\drivers\etc 文件,在最后一行添加
10.0.0.82 dzp.com
# 访问 dzp.com

请添加图片描述

3.通过 构建 部署新代码

打开 Jenkins 中 dazhuanpan-job 项目的配置

在这里插入图片描述

输入 gitlab 的 dzp 项目的地址,可能会报错

错误1

请添加图片描述

错误2

在这里插入图片描述

如出现上图错误

解决办法:在 jenkins 主机的命令行执行一次报错提示的命令,然后输入 yes
[root@jenkins ~]# yum -y install git
[root@jenkins ~]# git ls-remote -h git@10.0.0.81:OPS/my.git
The authenticity of host '10.0.0.72 (10.0.0.72)' can't be established.
ECDSA key fingerprint is SHA256:7IhnCxlNU3w32uWBSRhgqvkeqp/ZRFRkKNdsZxp3zPA.
ECDSA key fingerprint is MD5:bb:63:f4:3a:f0:2f:dc:39:d5:b5:5c:99:9a:43:70:5a.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '10.0.0.72' (ECDSA) to the list of known hosts.
git@10.0.0.72's password: 

如果提示输密码,这是因为没有将 Jenkins 的 key 交给 gitlab
#创建ssh公钥
[root@jenkins ~]# ssh-keygen -t rsa
#显示公钥内容
[root@jenkins ~]# cat ~/.ssh/id_rsa.pub

打开 gitlab 的 dzp 项目粘贴 Jenkins 的 key 点击 Add key 确定添加

请添加图片描述

# 之前添加过 KEY 的效果如下
[root@jenkins ~]# git ls-remote -h git@10.0.0.81:OPS/my.git
The authenticity of host '10.0.0.81 (10.0.0.81)' can't be established.
ECDSA key fingerprint is SHA256:t/wRHxVb4zTEg6b4AblQmCGpMe4GD3tvRh4cPncimpw.
ECDSA key fingerprint is MD5:cc:13:73:1f:00:53:2e:20:d9:81:4e:11:6f:31:b6:6f.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '10.0.0.81' (ECDSA) to the list of known hosts.
3935eb759d27d62b2afbc0526b778c499a8d8c1b	refs/heads/master

在 Jenkins 的 dazhuanpan-job 项目配置中先删除刚刚输入 gitlab 的 dzp 项目的地址,在空白处点一下,然后重新输入 gitlab 的 dzp 项目的地址

成功

在这里插入图片描述

保存配置
在这里插入图片描述

点击 立即构建
在这里插入图片描述

出现蓝色小球就表示构建成功,查看构建内容

请添加图片描述

到 Jenkins 主机查看文件
[root@jenkins ~]# ll /var/lib/jenkins/workspace/dazhuanpan-job
total 8
drwxr-xr-x 2 root root   25 2021-11-30 17:25 css
drwxr-xr-x 2 root root   84 2021-11-30 17:25 img
drwxr-xr-x 2 root root   41 2021-11-30 17:25 js
-rw-r--r-- 1 root root 2170 2021-11-30 17:25 lottery.html
-rw-r--r-- 1 root root  113 2021-11-30 17:25 README.md

之前 dzp.com 的站点文件是手动在 gitlab 项目上克隆的

现在我想点一下 Jenkins 项目的【立即构建】就可以发布新的代码,打算通过脚本实现

实现步骤如下:

1、需要 Jenkins 的公钥交给 dev01 主机,实现Jenkins与dev01的沟通
[root@jenkins ~]# ssh-copy-id -i /root/.ssh/id_rsa.pub root@10.0.0.84
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_rsa.pub"
The authenticity of host '10.0.0.84 (10.0.0.84)' can't be established.
ECDSA key fingerprint is SHA256:7IhnCxlNU3w32uWBSRhgqvkeqp/ZRFRkKNdsZxp3zPA.
ECDSA key fingerprint is MD5:bb:63:f4:3a:f0:2f:dc:39:d5:b5:5c:99:9a:43:70:5a.
Are you sure you want to continue connecting (yes/no)? yes
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
root@10.0.0.84's password: 

Number of key(s) added: 1

Now try logging into the machine, with:   "ssh 'root@10.0.0.84'"
and check to make sure that only the key(s) you wanted were added.

2、在Jenkins主机建一个脚本目录存放脚本
[root@jenkins ~]# mkdir -p /data/scripts

3、创建脚本实现发布代码至 dev01
[root@jenkins ~]# vim /data/scripts/depoly.sh
#!/bin/bash
# 设置dev01主机的IP
Web_Ip=10.0.0.84
# Jenkins项目构建时的前一次序号
BUILD_NUMBER=$(( $BUILD_NUMBER - 1 ))
# 旧站点代码存放目录
Old_Code_Dir=${WORKSPACE##*/}_$BUILD_NUMBER
# -d 判断dev01站点代码目录是否存在,不存在就 mkdir 创建
ssh root@$Web_Ip "[ -d /opt/$Old_Code_Dir ] || mkdir -p /opt/$Old_Code_Dir"
# 将 dev01 主机旧的代码进行移动到别的目录
ssh root@$Web_Ip "mv /data/code/dzp/* /opt/$Old_Code_Dir/"
# 将代码拷贝到站点目录
scp -rp $WORKSPACE/* root@${Web_Ip}:/data/code/dzp

上面脚本中用到了一些变量
Jenkins 的内部变量可以在脚本项目的构建中输入 exportexport –p 来查看
$WORKSPACE			#是Jenkins配置中源码管理中的项目代码保存的地址+文件名
$JOB_NAME			#是Jenkins配置中源码管理中的项目代码的文件名
$BUILD_NUMBER		#当前构建的序号

4、将代码放入 Jenkins 项目 dazhuanpan-job 配置 的 构建 中
添加如下命令
/bin/bash /data/scripts/depoly.sh

请添加图片描述

点击 Jenkins 项目 dazhuanpan-job 的 立即构建

构建成功后,点击画面中的蓝色小球查看构建步骤

在这里插入图片描述

请添加图片描述

再去 dev01 主机上确认

[root@dev01 ~]# ll /opt/
total 0
drwxr-xr-x 3 root root 17 2021-12-07 10:00 dazhuanpan-job_10
为了更直观的看出代码变更,我们手动修改一下代码

# 先删除原来的仓库目录,再克隆gitlab上的代码
[root@dev01 ~]# ls
dzp
[root@dev01 ~]# rm -rf dzp
[root@dev01 ~]# git clone git@10.0.0.81:OPS/dzp.git
# 在一等奖后面添加几个字
[root@dev01 ~]# vim /root/dzp/lottery.html
<p>一等奖 运气爆棚</p>
# 推送给gitlab
[root@dev01 dzp]# git add .
[root@dev01 dzp]# git commit -m '一等奖 运气爆棚'
[root@dev01 dzp]# git push -u origin master

在 Jenkins 的 dazhuanpan-job 项目中点击【立即构建】

在去网页刷新 dzp.com

请添加图片描述

部署自动代码上线

Jenkins 构建实现代码更新已经完成了

再进一步,实现推送新代码到gitlab仓库就自动让新代码上线

1.部署 自动触发代码上线

自动代码上线:
是指程序员在自己的主机上推送代码到Gitlab服务器的远程仓库后
就可以自动触发Jenkins服务器的构建
然后就可以通过执行脚本将新代码发送到web服务器上

Jenkins 网页上依次点击和复制
1、项目名称
2、配置
3、构建触发器
4、勾选 Build when a change is pushed to GitLab. ......
5、复制 http://10.0.0.83:8080/project/dazhuanpan-job
6、注意有一个按钮 【高级】点开
7、点选 Filter branches by name
8、点击按钮 Generate
9、复制 生成的一串字符
10、点击按钮 保存

在这里插入图片描述

注意这里需要点击按钮【高级】,才会有完整的下图,复制好地址和字符后,记得保存。

在这里插入图片描述

# 2种报错
1、没保存就去下面粘贴,肯定不行。

2、Gitlab 上创建了新项目,但是项目并没有提交内容
	# 构建执行失败,确保项目至少有一次提交
Hook execution failed: Ensure the project has at least one commit.
有时候失败要注意登陆 Gitlab 的用户在 dzp 项目中的权限,建议测试的时候给管理员权限

Gitlab上配置,将Jenkins配置中刚刚复制的2个内容填入下图位置
第一行填 http://10.0.0.83:8080/project/dazhuanpan-job
第二行填 生成的好多字符

请添加图片描述
点击上图的绿色按钮确认添加自动触发设置
再点击下图红框
在这里插入图片描述
弹出200就表示触发设置正确
在这里插入图片描述

这时候自动代码上线就成功了

需要再添加一个功能,让程序猿知道自己的新代码上线成功了

2.自动触发代码上线反馈

Gitlab上设置,点击绿色按钮生成最下方字符串
请添加图片描述
来到Jenkins首页,点击系统管理
在这里插入图片描述
向下找到系统设置
在这里插入图片描述
按下图数字顺序进行设置
在这里插入图片描述
点击上图4要粘贴上方刚刚生成的字符串,然后点上图5
在这里插入图片描述
测试设置
在这里插入图片描述

保存配置
在这里插入图片描述

再来到Jenkins项目中进行配置

在这里插入图片描述

在这里插入图片描述
再到Jenkins项目中点击立即构架测试自动反馈
在这里插入图片描述

再到Gitlab上查看反馈效果,有绿色勾就表示反馈正常

在这里插入图片描述

点击绿色勾查看详细信息

请添加图片描述

Gitlab网页上的小图标也能看出来

在这里插入图片描述

3、在 dev01 上传新代码测试

# 修改 三等奖为 1000 元
[root@dev01 dzp]# vim lottery.html 
<p>1000元充值卡</p>

# 推送到 gitlab
[root@dev01 dzp]# git add .
[root@dev01 dzp]# git commit -m '三等奖 1000 元'
[root@dev01 dzp]# git push -u origin master

# 打开 dzp.com 查看网站新内容

请添加图片描述

Jenkins Maven 项目

1.介绍 Maven

Maven是一个编译器,可以编译Java项目,Java开发员用的很多
是一个项目管理的综合工具,可以把项目打成一个war或JAR包
是Apache【httpd】下的一个开发工具

2.安装 Maven【Jenkins主机】

#Jenkins主机上操作
Maven安装包来源
官网:            http://maven.apache.org/download.cgi
清华镜像:        https://mirrors.tuna.tsinghua.edu.cn/apache/maven/
apache-maven-3.3.9-bin.tar.gz					#安装包文件
tar xf apache-maven-3.3.9-bin.tar.gz			#解压安装包
mv apache-maven-3.3.9 /usr/local/maven-3.3.9	#移动文件位置
ln -s /usr/local/maven-3.3.9 /usr/local/maven	#创建一个软链接
#添加环境变量,才可以使用mvn命令
echo "export PATH=/usr/local/maven/bin/:$PATH" >>/etc/profile
source /etc/profile								#立即生效环境变量
mvn –v											#查看Maven版本信息

Maven命令
mvn test		#测试
mvn package		#打包编译
mvn clean		#清除上一次编译缓存
mvn install		#打包和部署项目到本地资源库
更多Maven资料https://www.yiibai.com/maven/

3.安装 Tomcat【Tomcat主机】

#Tomcat主机上操作
-------------------------------------------------------------------
Tomcat介绍
Tomcat是Apache 软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目。因为Tomcat 技术先进、性能稳定,而且免费,因而深受Java 爱好者的喜爱并得到了部分软件开发商的认可,成为目前比较流行的Web 应用服务器。【详细介绍百度一下Tomcat】
-------------------------------------------------------------------
#安装Tomcat
Tomcat需要Java环境所以安装Tomcat需要
jdk-8u181-linux-x64.rpm		#Java安装包
apache-tomcat-8.0.27.tar.gz	#Tomcat安装包

[root@tomcat ~]# ll
total 174960
-rw-r--r-- 1 root root   9128610 Mar 27  2019 apache-tomcat-8.0.27.tar.gz
-rw-r--r-- 1 root root      1456 Mar 15 17:33 hostname_ip.sh
-rw-r--r-- 1 root root 170023183 Aug 14  2018 jdk-8u181-linux-x64.rpm
[root@tomcat ~]# rpm -ivh jdk-8u181-linux-x64.rpm
[root@tomcat ~]# mkdir /application			#实际生产中习惯放在这个应用目录中
[root@tomcat ~]# tar xf apache-tomcat-8.0.27.tar.gz -C /application/
[root@tomcat ~]# ln -s /application/apache-tomcat-8.0.27/ /application/tomcat

#配置Tomcat启动加速,117行最后的“random”改为“urandom”
[root@tomcat ~]# vim /usr/java/jdk1.8.0_181-amd64/jre/lib/security/java.security
securerandom.source=file:/dev/urandom
#启动Tomcat
[root@tomcat ~]# /application/tomcat/bin/startup.sh
[root@tomcat ~]# netstat -lntp | grep 8080
tcp6  0  0 :::8080  :::*  LISTEN  9691/java
#浏览器访问10.0.0.85:8080

在这里插入图片描述

4.开发用户安装 Maven【dev01主机】

#dev01主机上操作
-------------------------------------------------------------------
开发用户主机需要安装Git、Java、Maven
yum install -y git								#安装Git
rpm -ivh jdk-8u181-linux-x64.rpm				#安装Java
apache-maven-3.3.9-bin.tar.gz					#Maven安装包文件
tar xf apache-maven-3.3.9-bin.tar.gz				#解压Maven安装包
mv apache-maven-3.3.9 /usr/local/maven-3.3.9	#移动Maven文件位置
ln -s /usr/local/maven-3.3.9 /usr/local/maven		#创建一个Maven软链接
#添加环境变量,才可以使用mvn命令
echo "export PATH=/usr/local/maven/bin/:$PATH" >>/etc/profile
source /etc/profile								#立即生效环境变量
mvn –v										#查看Maven版本信息
环境准备好了,开始上传代码包jeesns.tar.gz【小说阅读网站代码包】
[root@dev01 ~]# tar xf jeesns.tar.gz				#解压代码包
[root@dev01 ~]# cd jeesns/					#进入代码目录
[root@dev01 ~/jeesns]# git remote				#查看远程仓库
origin
[root@dev01 ~/jeesns]# git remote remove origin	#删除远程仓库【如果原来有远程仓库】
[root@dev01 jeesns]# ll jeesns-web/				#jeesns的数据
total 4
drwxr-xr-x 2 root root  113 Nov 19  2018 database
drwxr-xr-x 2 root root   49 Nov 19  2018 doc
-rwxr-xr-x 1 root root 1443 Nov 19  2018 pom.xml	#只要是Java代码几乎都有这个文件
drwxr-xr-x 3 root root   18 Nov 19  2018 src
[root@dev01 jeesns]# ll jeesns-web/database/
total 40
-rwxr-xr-x 1 root root 28667 Nov 19  2018 jeesns.sql		#数据库文件
-rw-r--r-- 1 root root  3491 Nov 19  2018 update_1.2.0to1.2.1.sql
-rw-r--r-- 1 root root  1026 Nov 19  2018 update_1.2.1to1.3.sql
-rw-r--r-- 1 root root  1344 Nov 19  2018 update_1.3to1.3.1.sql

#将jeesns.sql数据库文件传送到Tomcat主机
[root@dev01 jeesns]# scp -rp jeesns-web/database/jeesns.sql root@10.0.0.85:

#去官方的中央数据仓库下载最新的数据,然后进行编译war包
[root@dev01 ~/jeesns]# mvn package
[root@dev01 ~/jeesns]# ll jeesns-web/target/jeesns-web.war
-rw-r--r-- 1 root root 26106017 2020-03-13 16:35 jeesns-web.war
#推送war包到Tomcat主机
scp -rp jeesns-web.war root@10.0.0.85:/application/tomcat/webapps/ROOT.war
-------------------------------------------------------------------

5.安装数据库【Tomcat主机】

#Tomcat主机上操作
-------------------------------------------------------------------
#安装数据库、启动数据库、设置数据库密码
[root@tomcat ~]# yum install -y mariadb-server
[root@tomcat ~]# systemctl start mariadb.service 
[root@tomcat ~]# mysqladmin password "root"
#登陆数据库
[root@tomcat ~]# mysql -uroot -proot
MariaDB [(none)]> create database jeesns;	#创建jeesns库
exit		#退出数据库
#导入jeesns数据库
[root@tomcat ~]# mysql -uroot -proot jeesns < jeesns.sql
#查看导入情况
[root@tomcat ~]# mysql -uroot -proot
MariaDB [(none)]> use jeesns;		#进入jeesns库
MariaDB [jeesns]> show tables;		#查看jeesns库中的表
exit
#查看小说阅读网站的war包是否传输过来
[root@tomcat ~]# ll /application/tomcat/webapps/ROOT.war
-rw-r--r-- 1 root root 26106017 Mar 13 16:41 /application/tomcat/webapps/ROOT.war
#重新打开网页
http://10.0.0.85:8080/
默认用户名:admin		密码:jeesns

在这里插入图片描述

如果打不开,就查看Tomcat是否启动、数据库是否启动,数据库文件是否导入
/application/tomcat/bin/startup.sh	#启动Tomcat
以上 2-5 是Tomcat服务器搭建阅读网站的过程

6.创建 Jeesns 项目

首先在Gitlab网站上创建一个jeesns项目
dev01主机上操作
在开发人员dev01主机上设置jeesns项目的远程仓库
[root@dev01 ~]# rz jeesns.tar.gz				#先上传代码包到dev01主机
[root@dev01 ~]# tar xf jeesns.tar.gz			#解压代码包
[root@dev01 ~]# cd jeesns/
[root@dev01 ~/jeesns]# git remote				#查看远程仓库
origin
[root@dev01 ~/jeesns]# git remote remove origin	#删除远程仓库【如果原来有远程仓库】
[root@dev01 jeesns]# mvn clean					#每次使用都需要先清空之前的编译
#添加远程仓库
[root@dev01 ~/jeesns]# git remote add origin git@10.0.0.81:OPS/jeesns.git
#先上传代码到本地仓库
[root@dev01 ~/jeesns]# git add .
[root@dev01 ~/jeesns]# git commit -m "上传jeesns代码"
#上传代码到远程仓库
[root@dev01 jeesns]# git push -u origin master
#如果出现下列提示
remote: GitLab: You are not allowed to push code to protected branches on this project.
不允许将代码推送到此项目上受保护的分支【百度翻译】
#去gitlab网页解决错误
gitlab网页上操作
#dev01主机推送错误的解决办法

1、可能是dev01用户权限不够,设置成master或者owner
在这里插入图片描述
2、查看jeesns项目的分支保护是否开启
在这里插入图片描述
在这里插入图片描述
如果有保护就点击上图的Unprotect按钮进行删除

Jenkins网页和主机上操作
创建一个Maven项目
在这里插入图片描述
在这里插入图片描述

上图的错误是因为jeesns主机没有权限访问gitlab网站的jeesns项目
解决办法如下图
jeesns主机上设置秘钥对
[root@jenkins ~]# ssh-
[root@jenkins ~]# cat .ssh/id_rsa.pub
1、在gitlab的jeesns项目设置中填写名称【随意】和Jenkins主机的公钥
在这里插入图片描述
#如果原来没有设置过Jenkins主机的公钥那还需要执行下图中蓝色部分的命令
在这里插入图片描述
解决办法:在命令行执行一次报错提示的命令
[root@jenkins ~]# git ls-remote -h git@10.0.0.81:OPS/jeesns.git
The authenticity of host ‘10.0.0.81 (10.0.0.81)’ can’t be established.
ECDSA key fingerprint is SHA256:t/wRHxVb4zTEg6b4AblQmCGpMe4GD3tvRh4cPncimpw.
ECDSA key fingerprint is MD5:cc:13:73:1f:00:53:2e:20:d9:81:4e:11:6f:31:b6:6f.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added ‘10.0.0.81’ (ECDSA) to the list of known hosts.
3935eb759d27d62b2afbc0526b778c499a8d8c1b refs/heads/master
2、如果原来设置过Jenkins主机的公钥只需要点击下图的Enable按钮
在这里插入图片描述
jeesns项目添加Jenkins主机公钥成功后如下图
在这里插入图片描述
错误解决之后将原来的gitlab项目地址删除后重新粘贴一下
在这里插入图片描述
设置Build会发现报错找不到maven,先填写clean package后保存配置
clean和package就是先清除上一次编译缓存再进行打包编译
mvn clean #清除上一次编译缓存
mvn package #打包编译
在这里插入图片描述
去【主页>系统管理>全局安全配置】解决上图的报错问题
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
返回Jenkins的项目maven-jeesns-job配置中查看报错已经没了
在这里插入图片描述
接下来就可以点击maven-jeesns-job项目的【立即构建】来创建war包
在这里插入图片描述
如果构建成功就可以在Jenkins主机上看到jeesns-web.war文件
ll /var/lib/jenkins/workspace/maven-jeesns-job/jeesns-web/target/
-rw-r–r-- 1 root root 26106035 2020-03-13 17:21 jeesns-web.war
#如果构建时出现下图错误,就需要再次进行构建,因为这是网络连接造成的错误
在这里插入图片描述

接下来编写一个脚本用来实现新代码上线
脚本涉及到推送文件,就需要将Jenkins主机的公钥先推送到Tomcat主机上
ssh-copy-id -i /root/.ssh/id_rsa.pub root@10.0.0.85
[root@jenkins ~]# mkdir -p /scripts/
[root@jenkins ~]# vim /scripts/jeesns_depoly.sh
-------------------------------------------------------------------
#!/bin/bash
Web_Ip=10.0.0.85
Code_Dir=/application/tomcat/webapps
Old_Code_Dir=${JOB_NAME}_$(($BUILD_NUMBER - 1 ))                                                         
#1.判断目录是否存在
ssh root@$Web_Ip "[ -d /opt/$Old_Code_Dir ] || mkdir -p /opt/$Old_Code_Dir"
#2.将旧的war包进行移动保存
ssh root@$Web_Ip "mv $Code_Dir/ROOT.war  /opt/$Old_Code_Dir"
#3.将新编译的war包进行传送到站点目录
scp -rp $WORKSPACE/jeesns-web/target/jeesns-web.war root@$Web_Ip:$Code_Dir/ROOT.war
-------------------------------------------------------------------

设置构建后命令
在这里插入图片描述
在这里插入图片描述

通过上面的脚本可以知道
#旧war包存放位置
[root@tomcat ~]# ll /opt/
drwxr-xr-x 2 root root 22 Mar 17 13:23 jeesns_4
#新war包存放位置
[root@tomcat ~]# ll /application/tomcat/webapps
-rw-r--r--  1 root root 26105966 Mar 17 13:22 ROOT.war

#查看Tomcat和数据库 启动没有,没有就启动一下,然后就可以查看新代码的网页效果了
[root@tomcat ~]# netstat -lntp | grep 8080
[root@tomcat ~]# /application/tomcat/bin/startup.sh
[root@tomcat ~]# systemctl start mariadb
#新代码网页效果
http://10.0.0.85:8080/manage/index

在这里插入图片描述

Jenkins 创建 Pipeline 项目

1. 基础概念

CI/CD持续集成/持续部署

持续集成(Continuous integration)是一种软件开发实践,即团队开发成员经常集成它们的工作,通过每个成员每天至少集成一次,也就意味着每天可能会发生多次集成。每次集成都通过自动化的构建(包括编译,发布,自动化测试)来验证,从而尽早地发现集成错误。
    比如:装修厨房铺地砖,边角地砖要切割大小。如果一次全切割完再铺上去,发现尺寸有误的话浪费和返工时间就大了,不如切一块铺一块。这就是持续集成。

持续部署(continuous deployment)是通过自动化的构建、测试和部署循环来快速交付高质量的产品。某种程度上代表了一个开发团队工程化的程度,毕竟快速运转的互联网公司人力成本会高于机器,投资机器优化开发流程化相对也提高了人的效率。
比如:装修厨房有很多部分,每个部分都有检测手段,如地砖铺完了要测试漏水与否,线路铺完了要通电测试电路通顺,水管装好了也要测试冷水热水。如果全部装完了再测,出现问题可能会互相影响,比如电路不行可能要把地砖给挖开……。那么每完成一部分就测试,这是持续部署。

持续交付 Continuous Delivery:频繁地将软件的新版本,交付给质量团队或者用户,以供评审尽早发现生产环境中存在的问题;如果评审通过,代码就进入生产阶段.
    比如:全部装修完了,你去验收,发现地砖颜色不合意,水池太小,灶台位置不对,返工吗?所以不如每完成一部分,你就去用户那试用验收,这就是持续交付。

#敏捷思想中提出的这三个观点,还强调一件事:通过技术手段自动化这三个工作。加快交付速度。

Jenkins 2.0的精髓是Pipeline as Code,是帮助Jenkins实现CI到CD转变的重要角色。什么是Pipeline,简单来说,就是一套运行于Jenkins上的工作流框架,将原本独立运行于单个或者多个节点的任务连接起来,实现单个任务难以完成的复杂发布流程。Pipeline的实现方式是一套Groovy DSL,任何发布流程都可以表述为一段Groovy脚本,并且Jenkins支持从代码库直接读取脚本,从而实现了Pipeline as Code的理念。

Pipeline 是一个用户定义的 CD 流水线模式。Pipeline 代码定义了通常包含构建、测试和发布步骤的完整的构建过程。

Node 是一个机器,它是 Jenkins 环境的一部分,并且能够执行 Pipeline。同时,node 代码块也是脚本式Pipeline 语法的关键特性。

Stage 块定义了在整个 Pipeline 中执行的概念上不同的任务子集(例如"构建""测试""部署"阶段),许多插件使用它来可视化或呈现 Jenkins 管道状态/进度。

Step 一项任务。从根本上讲,一个步骤告诉 Jenkins 在特定时间点(或过程中的"步骤")要做什么。例如,使用sh step:sh 'make' 可以执行 make 这个 shell 命令。

2. 创建 Pipeline 项目

Jenkins file 分为:声明式、脚本式

  1. 创建项目
    在这里插入图片描述
将下方代码复制进pipeline
脚本式语法格式如下:
----------------------------------------------
pipeline{
    agent any
stages{
    stage("get code"){
        steps{
            echo "get code from scm"
        }
    }
    stage("package"){
        steps{
        echo "packge code"
        }
    }
    stage("deploy"){
        steps{
            echo "deploy packge to node1"
        }
    }
    }
}
----------------------------------------------

在这里插入图片描述
通过下图的各个环节可以看出每个环节的具体信息,如果有错可以很直观的看出是哪里出的错。
在这里插入图片描述
用大转盘项目做一个测试,如果是第一次还需要将报错中的命令在xshell中执行一次
在这里插入图片描述
将上图中的 Jenkinsfile 复制下来后去Jenkins页面打开下图
在这里插入图片描述
将刚刚复制的名称和之前的代码填入下图对应位置
在这里插入图片描述
在这里插入图片描述按这里提交新添加的新文件
再次来到Jenkins页面进入Pipeline项目点击 立即构建
在这里插入图片描述

  1. 自动代码上线
    在Jenkins页面点击刚刚创建的文件编辑自动代码上线的内容
    在这里插入图片描述
    在这里插入图片描述
代码1
-------------------------------------------------
pipeline{
    agent any
stages{
    stage("get code"){
        steps{
            echo "get code"
        }
    }
    stage("unit test"){
        steps{
        echo "unit test"
        }
    }
    stage("package"){
        steps{
    sh 'tar zcf /opt/web-${BUILD_ID}.tar.gz ./* --exclude=./.git --exclude=Jenkinsfile'
        }
    }
    stage("deploy"){
        steps{
            sh 'ssh 10.0.0.80 "mkdir /opt/web-${BUILD_ID}"'
            sh 'scp /opt/web-${BUILD_ID}.tar.gz 10.0.0.80:/opt'
            sh 'ssh 10.0.0.80 "tar xf /opt/web-${BUILD_ID}.tar.gz -C /code"'
        }
    }
}
}
-------------------------------------------------
代码2(将代码1的打包命令和推送代码命令放入了脚本中)
-------------------------------------------------
pipeline{
    agent any
stages{
    stage("get code"){
        steps{
            echo "get code"
        }
    }
    stage("unit test"){
        steps{
        echo "unit test"
        }
    }
    stage("package"){
        steps{
        echo "packge code"
        }
    }
    stage("deploy"){
        steps{
        sh '/bin/bash /scripts/dzp.sh'
        }
    }
}
}
-------------------------------------------------
脚本内容如下:
[root@jenkins ~]# vim /scripts/dzp.sh
-------------------------------------------------------------
#!/bin/bash
web_ip=10.0.0.84
build=$(($BUILD_NUMBER - 1))
old_code_dir=${JOB_NAME}_$build
echo $old_code_dir
ssh root@$web_ip "[ -d $old_code_dir ] || mkdir -p /opt/$old_code_dir"
#1、将旧的代码移动到别的目录
ssh root@$web_ip "mv /code/dzp/* /opt/$old_code_dir"
#2、移动新的代码到站点目录
scp -rp $WORKSPACE/* root@${web_ip}:/code/dzp
-------------------------------------------------------------

准备完成立即构建,报错了,可以很清楚的找到在哪一步出错
在这里插入图片描述
在这里插入图片描述

根据错误提示去解决主机秘钥验证失败的问题
脚本中有推送文件的命令,那就是Jenkins推送文件到web服务器验证失败
手动推送一次Jenkins公钥到web服务器就OK 了
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值