jenkins构建cicd流水线

一: 环境搭建

1.0 jenkins流程(面试重点)

代码提交

  • 开发人员把代码推送到 Git 仓库(GitLab/Gitee/GitHub)。

触发 Jenkins 构建

  • 可以通过 Webhook 自动触发,也可以手动构建。

拉取代码

  • Jenkins 通过 Git 插件拉取最新代码。

代码编译打包

  • 调用 Maven 或 Gradle 进行编译、单元测试、打包,生成 jar/war 包。

制品归档 / 上传

  • 把打好的包保存到 Jenkins,或上传到私服(Nexus)。

自动化部署

  • 通过 SSH 连接目标服务器,上传 jar 包,执行启动脚本,完成自动部署。

构建结果通知

  • 构建成功或失败,通过邮件、钉钉通知相关人员。

2.0 安装maven,git,jdk,tomcat

注意: 请问这里为啥需要jdk和tomcat

  • "安装 JDK 和 Tomcat 是为了区分构建环境和运行环境。JDK 负责编译,Tomcat 负责运行 war 包。如果项目是 Spring Boot 打 jar 包,Tomcat 就不是必须的,只需要 JDK 就行。

(1) maven安装(下载maven,然后配置环境变量)

bash 复制代码
# 下载 maven3.8.8 包
tar -zxvf apache-maven-3.8.8-bin.tar.gz -C /usr/local/
mv  /usr/local/apache-maven-3.8.8/    /usr/local/maven


# 配置环境变量
vim /etc/profile.d/jenkins_tools.sh

export M2_HOME=/usr/local/maven
export M2=$M2_HOME/bin
PATH=$M2:$PATH:$HOME/bin:/usr/local/git/bin

export MAVEN_HOME=/usr/local/maven
export PATH=${MAVEN_HOME}/bin:$PATH 

# 生效
source /etc/profile.d/jenkins_tools.sh


# 测试
mvn -version

(2) 安装git

bash 复制代码
# 安装依赖
yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel gcc perl-ExtUtils-MakeMaker     fontconfig  -y


# 解压并cd到解压目录
tar xf git-2.9.5.tar.gz   
cd   git-2.9.5/
make prefix=/usr/local/git all  # 编译源码包
make prefix=/usr/local/git install  # 源码安装


# 修改环境变量
vim /etc/bashrc

PATH=$PATH:$HOME/bin:/usr/local/git/bin

source /etc/bashrc


# 测试是否安装成功
git --version

(3) 安装jdk,tomcat

bash 复制代码
# 解压tomcat和jdk的包
tar xf jdk-11.0.16_linux-x64_bin.tar.gz
tar xf apache-tomcat-9.0.79.tar.gz


# 拷贝并修改名称
mv jdk-11.0.16 /usr/local/java && mv apache-tomcat-9.0.79 /usr/local/tomcat


# 处理环境变量
vim /etc/profile.d/java.sh

TOMCAT_HOME=/usr/local/tomcat
JAVA_HOME=/usr/local/java
PATH=$TOMCAT_HOME/bin:$JAVA_HOME/bin:$PATH
export    TOMCAT_HOME   JAVA_HOME   PATH

source /etc/profile.d/java.sh

3.0 jenkins后台安装

bash 复制代码
# 上传jdk
rm -rf /usr/local/tomcat/webapps/*
cp jenkins.war /usr/local/tomcat/webapps/

# 安装字体
yum install fontconfig


# 启动tomcat
/usr/local/tomcat/bin/startup.sh

# 访问8080端口即可

如果访问不成功,检测一下防火墙是否是关闭的, selinux是否是关闭的

  • 注: jenkins放在tomcat的webapps的下面,启动tomcat之后会自动的解压我们的war包,然后自动部署我们的jenkins.

4.0 jenkins前台安装

进入页面后,我们先根据提示来进行操作

安装插件会从国外拉取,这里我们提供两种解决方案 :

(1) 方案一: 将国外地址改为国内的

bash 复制代码
vim ~/.jenkins/hudson.model.UpdateCenter.xml
http://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json



vim ~/.jenkins/updates/default.json
替换命令
% s/www.google.com/www.baidu.com/g
% s/updates.jenkins.io\/download/mirrors.tuna.tsinghua.edu.cn\/jenkins/g


旧版: http://updates.jenkins-ci.org/download 替换成 https://mirrors.tuna.tsinghua.edu.cn/jenkins 
新版:https://updates.jenkins.io/download 替换成 https://mirrors.tuna.tsinghua.edu.cn/jenkins 

修改完以后,重启Jenkins服务再输入密码,继续安装,速度贼快。

(2) 方案二: 直接将安装好的插件拷贝到安装目录当中

bash 复制代码
# jenkins是隐藏目录
[root@localhost ~]# ls -a 
.                              .bash_history  git-2.9.5                         jenkins.war
..                             .bash_logout   git-2.9.5.tar.gz                  .tcshrc
anaconda-ks.cfg                .bash_profile  .java                             .viminfo
apache-maven-3.8.8-bin.tar.gz  .bashrc        jdk-11.0.16_linux-x64_bin.tar.gz
apache-tomcat-9.0.79.tar.gz    .cshrc         .jenkins
[root@localhost ~]# 


# 我们进入发现里面有一个plugings插件目录,我们的安装的插件会放在这个目录的下面

[root@localhost ~]# cd ./.jenkins/
[root@localhost .jenkins]# ll
总用量 20
-rw-r-----. 1 root root 1658 4月  18 09:19 config.xml
-rw-r-----. 1 root root  156 4月  18 09:18 hudson.model.UpdateCenter.xml
-rw-r-----. 1 root root  171 4月  18 09:18 jenkins.telemetry.Correlator.xml
drwxr-x---. 2 root root    6 4月  18 09:18 jobs
-rw-r-----. 1 root root  907 4月  18 09:18 nodeMonitors.xml
drwxr-x---. 2 root root    6 4月  18 09:18 nodes
drwxr-x---. 2 root root    6 4月  18 09:18 plugins
-rw-r-----. 1 root root   64 4月  18 09:18 secret.key
-rw-r-----. 1 root root    0 4月  18 09:18 secret.key.not-so-secret
drwx------. 2 root root   91 4月  18 09:18 secrets
drwxr-x---. 2 root root   67 4月  18 09:19 updates
drwxr-x---. 2 root root   24 4月  18 09:18 userContent
drwxr-x---. 3 root root   57 4月  18 09:18 users
[root@localhost .jenkins]# 


# 我们上传自己本地准备好的插件,然后替换他这个

[root@localhost root]# ls -a 
.  ..  .jenkins
[root@localhost root]# cd  ./.jenkins/
[root@localhost .jenkins]# ll
总用量 12
drwxr-x---. 95 root root 8192 9月  13 2023 plugins
[root@localhost .jenkins]# ll
总用量 12
drwxr-x---. 95 root root 8192 9月  13 2023 plugins
[root@localhost .jenkins]# cd ./plugins/

[root@localhost plugins]# pwd
/root/root/.jenkins/plugins

[root@localhost plugins]# \ cp * -rf /root/.
./             .bash_history  .bash_profile  .cshrc         .jenkins/      .viminfo
../            .bash_logout   .bashrc        .java/         .tcshrc        
[root@localhost plugins]# \ cp * -rf /root/.jenkins/     
config.xml                        nodeMonitors.xml                  secrets/
hudson.model.UpdateCenter.xml     nodes/                            updates/
jenkins.telemetry.Correlator.xml  plugins/                          userContent/
jobs/                             secret.key                        users/
.lastStarted                      secret.key.not-so-secret          

[root@localhost plugins]# \cp  -rf   *  /root/.jenkins/plugins/
[root@localhost plugins]# ll /root/.jenkins/plugins/    # 查看插件是否已经复制到jenkins的目录下面了

二: 系统配置

1.0 系统提示

  • centos7支持截止日期

操作系统寿命终止监视器 您正在CentOS Linux 7(Core)上运行Jenkins。Jenkins将在2023-11-16年后不再支持CentOS Linux 7(Core)。 请计划在2023-11-16年之前升级到受支持的操作系统。 有关详细信息,请参阅文档

如果你希望继续使用centos7上jenkins请保留这个版本

  • 单节点提示

在内置节点上构建可能是一个安全问题。提醒我们应该设置分布式构建。

2.0 全局变量与全局工具配置

(1) 全局变量: 这里我们配置 JAVA_HOME与MAVEN_HOME

(2) 全局工具配置

  • maven配置
  • 添加jdk工具
  • 添加git工具

注意: 如果我们的jenkins没有这个,就是没有git插件,因此我们需要下载插件。看下面的文档。

  • 添加maven工具

3.0 SSH设置

作用:

  • 让 Jenkins 能远程登录到别的服务器,自动执行命令、传文件、部署项目。
bash 复制代码
# jenkins服务器
[root@localhost plugins]# ssh-keygen   # 敲这个命令之后,一直回车即可

# 我们需要准备一台远程登录的服务器
ssh-copy-id  -i 远程服务器ip

# 远程登录
ssh root@远程服务器ip

# jenkins服务器中查看公钥
cat ~/.ssh/id_rsa


# 然后将得到的公钥放到我们的Jenkins中的ssh配置当中

三: 插件管理

1.0 下载插件

可更新插件, 未下载插件,已安装插件,高级设置

  • Maven Integration plugin 安装此插件才能构建maven项目

  • Deploy to container Plugin 安装此插件,才能将打好的包部署到tomcat上

  • 安装git相关2个插件: GitHub Authentication,GitHub Branch Source,

  • 安装插件:Publish Over SSH

2.0 配置maven

配置国内maven镜像

bash 复制代码
vim /usr/local/maven/conf/settings.xml

    <mirror>
      <id>central</id>
      <mirrorOf>central</mirrorOf>
      <name>aliyun maven</name>
      <url>https://maven.aliyun.com/repository/public</url>
    </mirror>

四: Jenkins+Maven+Gitee+Tomcat 自动化构建打包、部署

1.0 创建Maven项目

2.0 源码管理

选择版本控制器和仓库地址

互联网仓库:https://gitee.com/newrain001/easy-springmvc-maven.git

  • 注意这个仓库是我们已经准备好了的, 在码云上面

3.0 设置触发器(保持默认)

4.0 设置构建(编译打包)

clean package -Dmaven.test.skip=true

5.0 构建后操作

  • 在构建后设置中 选择:(send build artifacts over ssh)通过SSH发送构建工件
  • 点击-》增加构建后操作
  • target/.war: 构建之后,在jenkins服务器上是可以自动看到war包的。(该路径不需要创建) # ls /root/.jenkins/jobs/testjob1/builds/target/.war
  • Remove prefix: 自动删除路径前缀(不需要创建路径前缀)
  • Remote directory: tomcat业务服务器上的路径,需要提前在192.168.0.109(tomcat)上创建该目录。 用来存放网站源代码。(需要后台创建) # mkdir -p /jenkins/war
  • Exec command: tomcat(192.168.0.109)在接收到源码之后的自定义动作。 比如:将源码拷贝到网站的主目录(/jenkins),并执行一些其他操作如重启服务器等(或创建文件touch)(需要后台创建) #mkdir /jenkins/sh # cat /jenkins/sh/deploy.sh cp -r /jenkins/war/*.war /jenkins touch /tmp/aaaaaa.txt #chmod +x /jenkins/sh/deploy.sh

6.0 执行构建

7.0 观察tomcat网站服务器,代码和脚本

bash 复制代码
[root@localhost ~]# ls /jenkins/
easy-springmvc-maven.war  sh  war
[root@localhost ~]# ls /tmp/aaaaaa.txt 
/tmp/aaaaaa.txt


easy-springmvc-maven.war 就是推送过来的网站源码了

在接收到源码之后的自定义动作。 比如:将源码拷贝到网站的主目录(/jenkins),并执行一些其他操作如重启服务器等(或创建文件touch)(需要后台创建) #mkdir /jenkins/sh # cat /jenkins/sh/deploy.sh cp -r /jenkins/war/*.war /jenkins touch /tmp/aaaaaa.txt #chmod +x /jenkins/sh/deploy.sh

相关推荐
SakitamaX39 分钟前
pod管理及其相关实验
运维·kubernetes
天蓝不会忘记021 小时前
pod的控制器
容器·kubernetes
Harm灬小海1 小时前
2026 年主流 AI+DevOps 平台调研分析报告
运维·人工智能·devops
DevOps老兵1 小时前
Kubernetes生产运维02:只会get pods还不够,kubectl排障工具箱怎么组合使用
运维·容器·kubernetes·kubectl·devops·故障排查·sre
进击的_鹏1 小时前
从零开始的 Redis 学习
服务器·数据库·c++·redis·缓存
陈聪.1 小时前
Kubernetes 中 Pod 的全面知识
云原生·容器·kubernetes
实心儿儿2 小时前
Linux —— 传输层协议TCP
linux·服务器·tcp/ip
SakitamaX2 小时前
k8s中的控制器的使用
云原生·容器·kubernetes
祖力552 小时前
Linux应用软件编程:目录IO与framebuffer
linux·运维·算法·framebuffer·目录io
IT 小阿姨(数据库)2 小时前
K8s v1.24.17 完整搭建文档(CentOS7 + containerd1.6.33 + Calico)
java·容器·kubernetes