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

posted @ 2023-06-29 16:33  しみずよしだ  阅读(150)  评论(0)    收藏  举报