CICD - Jenkins部署及实战案例 【二】
网络拓扑

版本
#【Jenkins】
IP:192.168.40.145 8080
JDK:jdk-11.0.19_linux-x64_bin.tar.gz
Jenkins:2.401.2
#【Tomcat】
IP:192.168.40.130
JDK:1.8
Tomcat:apache-tomcat-8.5.90.tar.gz
一、安装JAVA
1.1- jdk1.8.0_281
官方地址需要注册:https://www.oracle.com/rs/java/technologies/javase/javase8u211-later-archive-downloads.html
JDK:jdk-8u281-linux-x64.tar.gz:
链接: https://pan.baidu.com/s/1djv0YA6oLQlv5-voNqTGtQ 提取码: 4545
#tar -zvxf jdk-8u281-linux-x64.tar.gz -C /usr/local/src
#vim /etc/profile
最后添加
#JAVA PARAMETERS
export JAVA_HOME=/usr/local/src/jdk1.8.0_281
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tool.jar
#source /etc/profile
[root@K8S-docker jdk-17.0.7]# java -version
java version "1.8.0_281"
Java(TM) SE Runtime Environment (build 1.8.0_281-b09)
Java HotSpot(TM) 64-Bit Server VM (build 25.281-b09, mixed mode)
You have new mail in /var/spool/mail/root
1.2-jdk-11.0.19
=======
jdk11
https://www.oracle.com/java/technologies/downloads/#license-lightbox
#jdk-11.0.19_linux-x64_bin.tar.gz
[root@jenkins jdk-11.0.19]# tar -zxvf jdk-11.0.19_linux-x64_bin.tar.gz -C /usr/local/src/
[root@jenkins jdk-11.0.19]# vim /etc/profile
#JAVA PARAMETERS
#export JAVA_HOME=/usr/local/src/jdk1.8.0_281
export JAVA_HOME=/usr/local/src/jdk-11.0.19
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tool.jar
[root@jenkins jdk-11.0.19]# source /etc/profile
[root@jenkins jdk-11.0.19]# java --version
二、安装Jenkins
2.1-Jenkins-2.204.6 需要JDK8
[root@jenkins jenkins]# wget https://pkg.jenkins.io/redhat-stable/jenkins-2.204.6-1.1.noarch.rpm --no-check-certificate
jenkins-2.204.6-1.1.noarch.rpm
[root@jenkins jenkins]# rpm -ivh jenkins-2.204.6-1.1.noarch.rpm
[root@jenkins jenkins]# vim /etc/sysconfig/jenkins
JENKINS_USER="root"#测试可以改为root
JENKINS_PORT="8080"#根据需求可以改端口
[root@jenkins jenkins]# systemctl stop firewalld
[root@jenkins jenkins]# which java
/usr/local/src/jdk1.8.0_281/bin/java
[root@jenkins jenkins]# vi /etc/init.d/jenkins
candidates="
/etc/alternatives/java
/usr/lib/jvm/java-1.8.0/bin/java
/usr/lib/jvm/jre-1.8.0/bin/java
/usr/lib/jvm/java-1.7.0/bin/java
/usr/lib/jvm/jre-1.7.0/bin/java
/usr/lib/jvm/java-11.0/bin/java
/usr/lib/jvm/jre-11.0/bin/java
/usr/lib/jvm/java-11-openjdk-amd64
/usr/bin/java
/usr/local/src/jdk1.8.0_281/bin/java #添加此环境变量
"
[root@jenkins jenkins]# systemctl daemon-reload
[root@jenkins jenkins]# systemctl start jenkins
[root@jenkins jenkins]# systemctl status jenkins
[root@jenkins jenkins]# netstat -ntlp | grep 8080
tcp6 0 0 :::8080 :::* LISTEN 43345/java
浏览器输入 http://ip:8080
Please wait while Jenkins is getting ready to work (jenkins)
如果界面提示Jenkins正在启动,请稍后…或者提示
Please wait while Jenkins is getting ready to work…
#修改清华源地址 但是这个里面的配置都国外的 所以需要nginx进行代理
vim hudson.model.UpdateCenter.xml
<url>https://updates.jenkins.io/update-center.json</url>
改为
https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json
[root@jenkins jenkins]# systemctl restart jenkins
[root@jenkins jenkins]# cat /var/lib/jenkins/secrets/initialAdminPassword
2.2-Jenkins 2.401.2 需要JDK11/17
https://pkg.jenkins.io/redhat-stable/
#Jenkins 官网备注
2.357 (June 2022) and newer
需要:Java 11 or Java 17
#1.导入仓库和密钥进行下载
sudo wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo --no-check-certificate
sudo rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io-2023.key
#2.安装jenkins
yum install jenkins
#3.配置服务内容 否则后续启动会报错
#systemctl启动时调用的jenkins.service文件在/usr/lib/systemd/system目录下,无法调用/etc/init.d/下的jenkins
vim /usr/lib/systemd/system/jenkins.service
User=root
Group=root
Environment="JAVA_HOME=/usr/local/src/jdk-11.0.19"
不配置报错信息:
[root@jenkins init.d]# systemctl status jenkins
● jenkins.service - Jenkins Continuous Integration Server
Loaded: loaded (/usr/lib/systemd/system/jenkins.service; disabled; vendor preset: disabled)
Drop-In: /etc/systemd/system/jenkins.service.d
└─override.conf
Active: failed (Result: start-limit) since Fri 2023-06-30 09:02:06 CST; 3s ago
Process: 10334 ExecStart=/usr/bin/jenkins (code=exited, status=1/FAILURE)
Main PID: 10334 (code=exited, status=1/FAILURE)
Jun 30 09:02:06 jenkins systemd[1]: Failed to start Jenkins Continuous Integration Server.
Jun 30 09:02:06 jenkins systemd[1]: Unit jenkins.service entered failed state.
Jun 30 09:02:06 jenkins systemd[1]: jenkins.service failed.
Jun 30 09:02:06 jenkins systemd[1]: jenkins.service holdoff time over, scheduling restart.
Jun 30 09:02:06 jenkins systemd[1]: Stopped Jenkins Continuous Integration Server.
Jun 30 09:02:06 jenkins systemd[1]: start request repeated too quickly for jenkins.service
Jun 30 09:02:06 jenkins systemd[1]: Failed to start Jenkins Continuous Integration Server.
Jun 30 09:02:06 jenkins systemd[1]: Unit jenkins.service entered failed state.
Jun 30 09:02:06 jenkins systemd[1]: jenkins.service failed.
#4.重新拉起服务
systemctl daemon-reload
systemctl restart jenkins
systemctl status jenkins
三、插件
3.1-自己下载插件 放入指定目录 重启jenkins-成功
插件下载地址:https://plugins.jenkins.io/
将 plugins.zip备份的 插件包 放入 /var/lib/jenkins/plugins/
重启 systemctl restart jenkins
3.1.1-自行下载2-未实验
在jenkins页面“系统管理”-->“管理插件”-->"可选插件"中搜索email-ext-plugin插件选择并安装,也可以点击“高级”-然后手动上传安装。

注:也可以手动下载插件安装,到官网下载插件,然后将下载的插件传到服务器jenkins根目录下的plugins目录,即~/.jenkins/plugins目录,重启jenkins即可
官网插件下载地址https://wiki.jenkins-ci.org/display/JENKINS/Plugins
如下我们来安装Email-ext-Plugin邮件插件包,安装方法如下:
首先去Jenkins插件官网下载email-ext和token-macro、email-template
可以搜索某个插件,输入插件名称即可:

分别从如下地址下载三个插件,然后上传到Jenkins,实现安装:
https://wiki.jenkins-ci.org/display/JENKINS/Email-ext+plugin
https://wiki.jenkins-ci.org/display/JENKINS/Token+Macro+Plugin
https://wiki.jenkins-ci.org/display/JENKINS/Email-ext+Template+Plugin
如下图,先安装token插件:


然后安装email插件

最终如下三个插件安装成功:

安装完成后,刷新Jenkins WEB界面即可。
安装完email插件,打开系统管理-我们可以看到多了一个extended-E-mail-Notification菜单选项

如上是安装Jenkins插件的方法,其他GIT插件、Publish Over插件安装方法一样。
3.2-或者配置Nginx 进行地址重写到清华源上-实验没通过
cp nginx-1.18.0.tar.gz /usr/local/src/
cd /usr/local/src/
tar -zxvf nginx-1.18.0.tar.gz
cd nginx-1.18.0
mkdir /apps/
cd /apps/
cd /usr/local/src/nginx-1.18.0
./configure --prefix=/apps/nginx
make
make install
cd /apps/nginx/conf/
#官网:https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json
#里都是这个域名https://updates.jenkins.io/download/plugins
#替换为
#清华:https://mirrors.tuna.tsinghua.edu.cn/jenkins/plugins/
vim nginx.conf
server_name updates.jenkins.io;
#添加这端
location /download/plugins {
proxy_set_header Host mirrors.tuna.tsinghua.edu.cn;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
rewrite /download/plugins(.*) /jenkins/plugins/$1 break;
proxy_pass http://mirrors.tuna.tsinghua.edu.cn;
}
vim /etc/hosts
127.0.0.1 updates.jenkins-ci.org
ping updates.jenkins-ci.org
/apps/nginx/sbin/nginx -t
/apps/nginx/sbin/nginx
netstat -nltp | grep 80
ps -ef | grep nginx
四、配置邮箱
Dashboard-系统管理-System
4.1-配置基本邮箱配置

4.2-邮箱高级配置,SMTP认证中的密码为 qq邮箱授权码

4.3-qq邮箱验证

五、配置Tomcat
实验环境:192.168.40.130、JDK1.8
下载源码包:https://dlcdn.apache.org/tomcat/tomcat-8/v8.5.90/bin/apache-tomcat-8.5.90.tar.gz
mkdir /usr/local/tomcat
cd /usr/local/tomcat
mv /root/tomcat/apache-tomcat-8.5.90.tar.gz .
tar -zxvf apache-tomcat-8.5.90.tar.gz
cd apache-tomcat-8.5.90
vim /etc/profile
#Tomcat Home Parameters
export TOMCAT_HOME=//usr/local/tomcat/apache-tomcat-8.5.90
source /etc/profile
netstat -nltp | grep 8889
vim /usr/local/tomcat/apache-tomcat-8.5.90/conf/server.xml -改为8889 端口
<Connector port="8889" protocol="HTTP/1.1"
/usr/local/tomcat/apache-tomcat-8.5.90/bin/startup.sh
ps -ef|grep tomcat
#将测试testIP.war包放入 重启tomcat
/usr/local/tomcat/apache-tomcat-8.5.90/webapps
/usr/local/tomcat/apache-tomcat-8.5.90/bin/shutdown.sh
/usr/local/tomcat/apache-tomcat-8.5.90/bin/startup.sh
tail -f /usr/local/tomcat/apache-tomcat-8.5.90/logs/catalina.out
访问地址:http://192.168.40.130:8889/testIP


六、Jenkins 代码Clone
6.1-Jenkins服务上创建 公私钥
Jenkins 上创建 公私钥
[root@K8S-docker ~]# ssh-keygen
[root@K8S-docker ~]# cat /root/.ssh/id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCoLGpVuinuSM2iAJLNdwGaS3oUFdTw95uV0fmZpLP8nl/oODDApfhIG0h7umfR7tXJeM2erN0NCZy8cZncyH9/b1S3Wbz3ohk++WOIe3qdUoTacC7hc78Vn2X2Ub6o3rZxKPrAcsQSfxejkqhT+aafN5WVfFkqNG5arMeq4d3Nq2tTT5B+PIBLbofcQNKu/S/9/xkUlHLS1lmj/MRBYhZekTPwMq6/BQe2U4l+oJuZGZ/LgjRHG8tGNllt0tKmKip6G0BARJVI36hABzQM1dHHPpFJJ2KXXQQDfDF+2iPQORjFYfMSJcQnGB9cp1WG2diTQqeQFg00H6jYxNYWQ5Qr root@K8S-docker
#此时 git clone 不需要账号密码
[root@jenkinsnew .ssh]# git clone git@192.168.40.130:magedu/devops.git
Cloning into 'devops'...
remote: Enumerating objects: 3, done.
remote: Counting objects: 100% (3/3), done.
remote: Total 3 (delta 0), reused 0 (delta 0)
Receiving objects: 100% (3/3), done.
[root@jenkinsnew .ssh]#


6.2-创建git clone任务



6.3-将jenkins服务器上的 私钥复制 到凭据中
cat /root/.ssh/id_rsa



6.4-点击任务-立即构建

[root@jenkinsnew birkhoff-devops]# pwd
/var/lib/jenkins/workspace/birkhoff-devops
6.5-配置



6.6-立即构建

七、Jenkins实战
7.1-通过Jenkins 自动化clone代码并部署到web服务器
[root@K8S-docker devops]# git clone git@192.168.40.130:magedu/devops.git
[root@K8S-docker devops]# cd devops/
[root@K8S-docker devops]# vim index.html
Devops Version 4
[root@K8S-docker devops]# git add index.html ./
[root@K8S-docker devops]# git commit -m "v4"
[root@K8S-docker devops]# git config --global user.name xks
[root@K8S-docker devops]# git config --global user.email 807722920@qq.com
[root@K8S-docker devops]# git commit -m "v4"
[root@K8S-docker devops]# git push

7.1.1-Build Steps-shell
cd /var/lib/jenkins/workspace/birkhoff-devops
tar czvf devops.tar.gz ./*
#停止web服务
ssh root@192.168.40.130 "/usr/local/tomcat/apache-tomcat-8.5.90/bin/shutdown.sh"
#分发代码
scp devops.tar.gz root@192.168.40.130:/usr/local/tomcat/apache-tomcat-8.5.90/webapps
#代码替换
ssh root@192.168.40.130 "cd /usr/local/tomcat/apache-tomcat-8.5.90/webapps && rm -rf devops/* && tar xvf devops.tar.gz -C devops/"
#启动Tomcat
ssh root@192.168.40.130 "/usr/local/tomcat/apache-tomcat-8.5.90/bin/startup.sh"

7.1.2 立即构建并且查看控制台
Started by user BirkhoffXia
Running as SYSTEM
Building in workspace /var/lib/jenkins/workspace/birkhoff-devops
[WS-CLEANUP] Deleting project workspace...
[WS-CLEANUP] Deferred wipeout is used...
[WS-CLEANUP] Done
The recommended git tool is: NONE
using credential 5f9c9acf-ae80-4f17-85cd-43e79f56eaf3
Cloning the remote Git repository
Cloning repository git@192.168.40.130:magedu/devops.git
> git init /var/lib/jenkins/workspace/birkhoff-devops # timeout=10
Fetching upstream changes from git@192.168.40.130:magedu/devops.git
> git --version # timeout=10
> git --version # 'git version 1.8.3.1'
using GIT_SSH to set credentials
[INFO] Currently running in a labeled security context
[INFO] Currently SELinux is 'enforcing' on the host
> /usr/bin/chcon --type=ssh_home_t /var/lib/jenkins/workspace/birkhoff-devops@tmp/jenkins-gitclient-ssh269269542582866745.key
Verifying host key using known hosts file
> git fetch --tags --progress git@192.168.40.130:magedu/devops.git +refs/heads/*:refs/remotes/origin/* # timeout=10
> git config remote.origin.url git@192.168.40.130:magedu/devops.git # timeout=10
> git config --add remote.origin.fetch +refs/heads/*:refs/remotes/origin/* # timeout=10
Avoid second fetch
> git rev-parse refs/remotes/origin/master^{commit} # timeout=10
Checking out Revision 0c3f61613cc9ac6ab790730346280f40793f1708 (refs/remotes/origin/master)
> git config core.sparsecheckout # timeout=10
> git checkout -f 0c3f61613cc9ac6ab790730346280f40793f1708 # timeout=10
Commit message: "Update index.html V4"
> git rev-list --no-walk 612f011eed06188bc3c0e72d12fa1df8071376f6 # timeout=10
[birkhoff-devops] $ /bin/sh -xe /tmp/jenkins3788725618454562374.sh
+ cd /var/lib/jenkins/workspace/birkhoff-devops
+ tar czvf devops.tar.gz './Hello Jenkins' ./index.html
./Hello Jenkins
./index.html
+ ssh root@192.168.40.130 /usr/local/tomcat/apache-tomcat-8.5.90/bin/shutdown.sh
+ scp devops.tar.gz root@192.168.40.130:/usr/local/tomcat/apache-tomcat-8.5.90/webapps
+ ssh root@192.168.40.130 'cd /usr/local/tomcat/apache-tomcat-8.5.90/webapps && rm -rf devops/* && tar xvf devops.tar.gz -C devops/'
./Hello Jenkins
./index.html
+ ssh root@192.168.40.130 /usr/local/tomcat/apache-tomcat-8.5.90/bin/startup.sh
Tomcat started.
Finished: SUCCESS


7.2-通过shell命令clone 代码并部署到web服务器

jenkins服务器上手动创建目录:
mkdir /data/git/birkhoff -p
Jenkins上:
#使用shell clone 并且先删除旧版 否则第二次clone会报错 已存在目录
cd /data/git/birkhoff && rm -rf devops
git clone git@192.168.40.130:magedu/devops.git && cd devops && tar czvf devops.tar.gz ./*
#停止web服务
ssh root@192.168.40.130 "/usr/local/tomcat/apache-tomcat-8.5.90/bin/shutdown.sh"
#分发代码
scp devops.tar.gz root@192.168.40.130:/usr/local/tomcat/apache-tomcat-8.5.90/webapps
#代码替换
ssh root@192.168.40.130 "cd /usr/local/tomcat/apache-tomcat-8.5.90/webapps && rm -rf devops/* && tar xvf devops.tar.gz -C devops/ && rm -rf devops.tar.gz"
#启动Tomcat
ssh root@192.168.40.130 "/usr/local/tomcat/apache-tomcat-8.5.90/bin/startup.sh"
#启动Tomcat
ssh root@192.168.40.130 "/usr/local/tomcat/apache-tomcat-8.5.90/bin/startup.sh"

7.2.1-测试更新代码

7.2.2-立即构建-查看控制台输出
Started by user BirkhoffXia
Running as SYSTEM
Building in workspace /var/lib/jenkins/workspace/birkhoff-devops
[WS-CLEANUP] Deleting project workspace...
[WS-CLEANUP] Deferred wipeout is used...
[WS-CLEANUP] Done
[birkhoff-devops] $ /bin/sh -xe /tmp/jenkins8401705985321724532.sh
+ cd /data/git/birkhoff
+ rm -rf devops
+ git clone git@192.168.40.130:magedu/devops.git
Cloning into 'devops'...
+ cd devops
+ tar czvf devops.tar.gz './Hello Jenkins' ./index.html
./Hello Jenkins
./index.html
+ ssh root@192.168.40.130 /usr/local/tomcat/apache-tomcat-8.5.90/bin/shutdown.sh
+ scp devops.tar.gz root@192.168.40.130:/usr/local/tomcat/apache-tomcat-8.5.90/webapps
+ ssh root@192.168.40.130 'cd /usr/local/tomcat/apache-tomcat-8.5.90/webapps && rm -rf devops/* && tar xvf devops.tar.gz -C devops/ && rm -rf devops.tar.gz'
./Hello Jenkins
./index.html
+ ssh root@192.168.40.130 /usr/local/tomcat/apache-tomcat-8.5.90/bin/startup.sh
Tomcat started.
Finished: SUCCESS

7.3-通过脚本clone代码并部署到web服务器
7.3.1-配置代码
[root@jenkinsnew data]# mkdir /data/script/birkhoff-devops -p
[root@jenkinsnew data]# cd /data/script/birkhoff-devops/
[root@jenkinsnew birkhoff-devops]# vim devops.sh
[root@jenkinsnew birkhoff-devops]# cat devops.sh
#使用shell clone 并且先删除旧版 否则第二次clone会报错 已存在目录
cd /data/git/birkhoff && rm -rf devops
git clone git@192.168.40.130:magedu/devops.git && cd devops && tar czvf devops.tar.gz ./*
#停止web服务
ssh root@192.168.40.130 "/usr/local/tomcat/apache-tomcat-8.5.90/bin/shutdown.sh"
#分发代码
scp devops.tar.gz root@192.168.40.130:/usr/local/tomcat/apache-tomcat-8.5.90/webapps
#代码替换
ssh root@192.168.40.130 "cd /usr/local/tomcat/apache-tomcat-8.5.90/webapps && rm -rf devops/* && tar xvf devops.tar.gz -C devops/ && rm -rf devops.tar.gz"
#启动Tomcat
ssh root@192.168.40.130 "/usr/local/tomcat/apache-tomcat-8.5.90/bin/startup.sh"
[root@jenkinsnew birkhoff-devops]# chmod a+x devops.sh
[root@jenkinsnew birkhoff-devops]# pwd
/data/script/birkhoff-devops
[root@jenkinsnew birkhoff-devops]#
管理端配置
bash /data/script/birkhoff-devops/devops.sh

7.3.2-提交新代码部署

7.3.3-立即构建并查看控制台输出
Started by user BirkhoffXia
Running as SYSTEM
Building in workspace /var/lib/jenkins/workspace/birkhoff-devops
[WS-CLEANUP] Deleting project workspace...
[WS-CLEANUP] Deferred wipeout is used...
[WS-CLEANUP] Done
[birkhoff-devops] $ /bin/sh -xe /tmp/jenkins3601527116915835829.sh
+ bash /data/script/birkhoff-devops/devops.sh
Cloning into 'devops'...
./Hello Jenkins
./index.html
./Hello Jenkins
./index.html
Tomcat started.
Finished: SUCCESS





浙公网安备 33010602011771号