基于jenkins构建生成CICD环境

目录

一、安装配置jenkins

1、环境配置

2、软件要求

 3、jdk安装(我是最小化安装,UI自带java要先删除rm -rf /usr/local/java

4、安装jenkins-2.419-1.1

二、Jenkins配置

1、修改jenkins初始密码

2、安装 Jenkins 必要插件

 3、安装 Publish Over SSH 、 Maven Integration 插件

三、目前主流网站部署的流程

1、配置git主机

2、配置jenkins主机

3、配置 Maven、JDK、Git 环境

4、新建Maven项目

5、验证 Jenkins 自动打包部署结果


一、安装配置jenkins

1、环境配置

[root@client2 ~]# hostname jenkins
[root@client2 ~]# bash
[root@jenkins ~]# systemctl stop firewalld.service 
[root@jenkins ~]# iptables -F
[root@jenkins ~]# setenforce 0

2、软件要求

可以从国内清华园在下jenkins比较快,jdk推荐用17版本,11也行

 3、jdk安装(我是最小化安装,UI自带java要先删除rm -rf /usr/local/java

[root@jenkins ~]# ll
-rw-r--r--. 1 root root  89346360 8月  21 13:48 jenkins-2.419-1.1.noarch.rpm[root@jenkins ~]# tar xf jdk-17_linux-x64_bin.tar.gz
[root@jenkins ~]# mv jdk-17.0.8/ /usr/local/java
[root@jenkins ~]# vim /etc/profile
export JAVA_HOME=/usr/local/java/
export CLASSPATH=$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar
export PATH=$JAVA_HOME/bin:$PATH
[root@jenkins ~]# source /etc/profile

4、安装jenkins-2.419-1.1

[root@jenkins ~]# rpm -ivh jenkins-2.419-1.1.noarch.rpm 
警告:jenkins-2.419-1.1.noarch.rpm: 头V4 RSA/SHA512 Signature, 密钥 ID ef5975ca: NOKEY
准备中...                          ################################# [100%]
正在升级/安装...1:jenkins-2.419-1.1                ################################# [100%][root@jenkins ~]# jenkins start     //不要打断
2023-08-21 06:35:01.243+0000 [id=30]	INFO	jenkins.install.SetupWizard#init: *************************************************************
*************************************************************
*************************************************************Jenkins initial setup is required. An admin user has been created and a password generated.
Please use the following password to proceed to installation:465b5873c2e8486591a8c55916752ce8   #这是登录密码This may also be found at: /root/.jenkins/secrets/initialAdminPassword*************************************************************
*************************************************************
*************************************************************

RPM包安装的内容

 

 

二、Jenkins配置

1、修改jenkins初始密码

修改完保存重新登录即可

2、安装 Jenkins 必要插件

在 Jenkins 首页中,点击左侧的Manage Jenkins>>Manage Plugins>>可选插件,在过滤搜索框中输入要安装的 Publish Over SSH 、 Maven Integration 插件,并勾中其左侧的复选框,点击“直接安装”即可开始插件安装操作。

 3、安装 Publish Over SSH 、 Maven Integration 插件

配置jenkins并发执行数量

用于提高提高执行效率

Manage Jenkins >> Configure System >> Maven项目配置

传统代码上线的过程

开发人员发起代码上线的需求(邮件中包含开发做好的WAR包)-->运维人员连接线上负载调度器(Nginx)--> 隔离一组服务器(Tomcat)--> 连接服务器(Tomcat)--> 备份旧代码(tar打包)--> 删除旧代码目录 --> 上传新的WAR包 --> 外网测试 --> 测试不通过则通过备份回滚代码 --> 测试通过则利用rsync的脚本推送代码到其他服务器--> 统一外网测试 -->连接调度器恢复隔离机制  --> 隔离另一组服务器实施上线步骤 --> 上线完成。

三、目前主流网站部署的流程

目前主流网站部署方法:通过 Hudson/Jenkins 工具平台实现全自动部署+测试,是一个可扩展的持续集成引擎,属于开源软件项目,旨在提供一个开放易用的软件平台,使软件的持续集成变成可能。Jenkins 非常易于安装和配置,简单易用。

  1. 开发人员:写好代码,不需要自己进行源码编译、打包等工作,直接将代码分支存放在 SVN、Git 仓库即可。
  2. 运维人员:减轻人工干预的错误率,同时解放运维人员繁杂的上传代码、手动备份、更新等操作。
  3. 测试人员:可以通过 Jenkins 进行简单的代码及网站测试。

实验环境

操作系统

IP地址

主机名

角色

CentOS7.5

192.168.147.137

git

git服务器

CentOS7.5

192.168.147.139

Jenkins git客户端

jenkins服务器

CentOS7.5

192.168.147.140

tomcat

web服务器

 所有主机关闭防火墙和selinux

[root@localhost ~]# systemctl stop firewalld 
[root@localhost ~]# iptables -F
[root@localhost ~]# setenforce 0

1、配置git主机

# rpm安装安装依赖关系:git和jenkins主机都安

[root@gitclient ~]# yum -y install curl-devel expat-devel gettext-devel  openssl-devel zlib-devel

# 编译安装—服务端和客户端,访问https://mirrors.edge.kernel.org/pub/software/scm/git/下载所需要的版本

[root@gitclient ~]# wget https://github.com/git/git/archive/v2.22.0.tar.gz
[root@gitclient ~]# tar xf git-2.22.0.tar.gz -C /usr/src/
[root@gitclient ~]# cd /usr/src/git-2.22.0/
[root@git git-2.22.0]# make configure  #最小化安装要yum下载autoconf命令
#最小化要有gcc、gcc-c++
[root@git git-2.22.0]# ./configure --prefix=/usr/local/git && make && make install
[root@git git-2.22.0]# ln -sf /usr/local/git/bin/git /usr/bin/
[root@git git-2.22.0]# git --version
git version 2.22.0#在git服务端配置用户
[root@git ~]# useradd git
[root@gitclient ~]# echo "123465" | passwd --stdin git
更改用户 git 的密码 。
passwd:所有的身份验证令牌已经成功更新。
[root@git ~]# su - git
上一次登录:一 8月 21 15:48:06 CST 2023pts/0 上

创建本地仓库probe

[git@git ~]$ mkdir probe.git
[git@git ~]$ cd probe.git/
[git@git probe.git]$ git --bare init
已初始化空的 Git 仓库于 /home/git/probe.git/
[git@git probe.git]$ exit
登出

克隆项目代码同步到自己创建的仓库中

[root@git ~]# rz  #上传psi-probe.tar.gz
[root@git ~]# tar xf psi-probe.tar.gz
[root@git ~]# git clone git@192.168.147.137:/home/git/probe.git
正克隆到 'probe'...
git@192.168.147.137's password: 
warning: 您似乎克隆了一个空仓库。
[root@git probe]# git add .
[root@git probe]# git config --global user.email "skl@163.com"
[root@git probe]# git config --global user.name "skl"
[root@git probe]# git commit -m "all probe"
[root@git probe]# git push origin master
git@192.168.147.137's password: 
枚举对象: 1168, 完成.
对象计数中: 100% (1168/1168), 完成.
压缩对象中: 100% (1121/1121), 完成.
写入对象中: 100% (1168/1168), 2.01 MiB | 7.06 MiB/s, 完成.
总共 1168 (差异 398),复用 0 (差异 0)
To 192.168.147.137:/home/git/probe.git* [new branch]      master -> master

2、配置jenkins主机

1)添加验证凭据 :凭证这里添不添加都可以,这个试验不牵扯到凭证

跟着填写

填写以上数据后,点击“确定”就可以查看到新增的远程 web 主机账号。

2)添加 Publish Over SSH 远程主机

#tomcat主机创建目录
root@tomcat ~]# mkdir data

在 Jenkins 首页中点击“Manage Jenkins”->“Configure System”->“Publish over SSH”->“SSH Servers”->“增加”选项按钮,添加 SSH 远程主机。如图所示,输入 Name、Hostname、Username 等必要信息后,点击“高级”选项按钮->勾选“Use Password authentication,or use a different key”选项->输入“远程主机登录密码”->“Test Configuration”测试远程主机配置。测试远程主机配置成功后点击“保存”按钮即可。

 添加tomcat远程主机和密码

监测,显示成功,保存

 

3、配置 Maven、JDK、Git 环境

在 Jenkins 首页中点击“Manage Jenkins”->“Global Tool Configuration”->“JDK” ->新增“JDK”,设置 JDK 别名为”JDK17”。去掉“Install automatically”选项,设置 “JAVA_HOME”为本案例中 JDK 实际安装路径。

 

 在Jenkins安装maven、为maven更换阿里云镜像站

[root@jenkins ~]# rz -E
rz waiting to receive.
[root@jenkins ~]# tar xf apache-maven-3.5.0-bin.tar.gz 
[root@jenkins ~]# mv apache-maven-3.5.0 /usr/local/maven-3.5.0
[root@jenkins ~]# vim /usr/local/maven-3.5.0/conf/settings.xml 
#把147到158删除
146   <mirrors>
147     <!-- mirror
148      | Specifies a repository mirror site to use instead of a given repository. The repository that
149      | this mirror serves has an ID that matches the mirrorOf element of this mirror. IDs are used
150      | for inheritance and direct lookup purposes, and must be unique across the set of mirrors.
151      |
152     <mirror>
153       <id>mirrorId</id>
154       <mirrorOf>repositoryId</mirrorOf>
155       <name>Human Readable Name for this Mirror.</name>
156       <url>http://my.repository.com/repo/path</url>
157     </mirror>
158      -->
159   </mirrors>替换成
146   <mirrors>
147       <mirror>
148         <id>nexus-aliyun</id>
149         <mirrorOf>central</mirrorOf>
150         <name>Nexus aliyun</name>
151         <url>http://maven.aliyun.com/nexus/content/groups/public</url>
152       </mirror>
153   </mirrors>

 在“Global Tool Configuration”配置界面中找到 Maven 配置选项,然后点击“新增 Maven”并设置别名为“Maven3.5”。

 Git 配置

[root@jenkins ~]# which git
/usr/bin/git

3、配置web主机 

[root@tomcat ~]#  tar xf apache-tomcat-8.5.40.tar.gz 
[root@tomcat ~]#  mv apache-tomcat-8.5.40 /usr/local/tomcat
[root@tomcat ~]#  yum -y install java

 发布公钥给jenkins主机

[root@tomcat ~]# ssh-keygen
[root@tomcat ~]# ssh-copy-id 192.168.147.139

主机Jenkins默认用jenkins用户去连接git,所以用jenkins用户生成密钥对,并发送给git。

[root@jenkins ~]# which git
/usr/bin/git
[root@jenkins ~]# id jenkins
uid=997(jenkins) gid=995(jenkins) 组=995(jenkins)
[root@jenkins ~]# su -s /bin/bash jenkinsbash-4.2$ ssh-keygen
bash-4.2$ ssh-copy-id git@192.168.147.137bash-4.2$ ssh git@192.168.147.137
Last failed login: Tue Aug 22 14:13:44 CST 2023 from 192.168.147.139 on ssh:notty
There were 3 failed login attempts since the last successful login.
Last login: Mon Aug 21 16:30:48 2023
[git@git ~]$ exit
登出
Connection to 192.168.147.137 closed.
bash-4.2$ exit[root@jenkins ~]# ssh-keygen
[root@jenkins ~]# ssh-copy-id git@192.168.147.137
[root@jenkins ~]# ssh git@192.168.147.137             #登录测试

4、新建Maven项目

在以上配置完成后,回到 Jenkins 首页,选择“新建任务”,然后输入一个任务名称 “probe”,并选中“Maven project”点击当前页面下方的“确定”按钮。

在点击“确定”按钮后,选择“源码管理”选中“Git”,配置“RepositoriesURL”为

git@192.168.147.137:/home/git/probe.git

 选择“Build

clean package -Dmaven.test.skip=true

选择“构建后操作“中的“send build artfacts over SSH “Exec command”中执行命令的含义是:在自动部署前先杀掉 Tomcat 进程,然后删除 war 包,用 scp 远程拷贝命令将 Jenkins 自动打包好的项目 war 包拷贝到当前 Tomcat 应用目录。 然后重启 Tomcat 。

scp 192.168.147.139:/root/.jenkins/workspace/probe/psi-probe-web/target/probe.war /usr/local/tomcat/webapps/
/usr/local/tomcat/bin/startup.sh

5、验证 Jenkins 自动打包部署结果

在web主机上查看 probe 目录是否被拷贝到/usr/local/tomcat/webapps 目录下

[root@tomcat ~]# ls /usr/local/tomcat/webapps/
docs  examples  host-manager  manager  probe  probe.war  ROOT
[root@tomcat ~]# ls /usr/local/tomcat/webapps/ -l
总用量 26624
drwxr-x---. 14 root root     4096 8月  23 20:00 docs
drwxr-x---.  6 root root       83 8月  23 20:00 examples
drwxr-x---.  5 root root       87 8月  23 20:00 host-manager
drwxr-x---.  5 root root      103 8月  23 20:00 manager
drwxr-x---.  7 root root       88 8月  23 21:16 probe
-rw-r--r--.  1 root root 27253197 8月  23 21:16 probe.war
drwxr-x---.  3 root root     4096 8月  23 20:00 ROOT

从以上结果来看,Jenkins 已把打好的 probe war 包拷贝过来了。

192.168.147.143就是192.168.147.139太卡了 ,我换了一台

[root@tomcat ~]# vim /usr/local/tomcat/conf/tomcat-users.xml<role rolename="manager-gui"/><role rolename="admin-gui"/><user username="tomcat" password="tomcat" roles="manager-gui,admin-gui"/>
</tomcat-users>	# 最下面此行前加入上面三行[root@tomcat ~]# vim /usr/local/tomcat/webapps/manager/META-INF/context.xml
<!--  <Valve className="org.apache.catalina.valves.RemoteAddrValve"allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" /> -->[root@tomcat ~]# /usr/local/tomcat/bin/shutdown.sh 
[root@tomcat ~]# /usr/local/tomcat/bin/startup.sh

 

 至此,Jenkins 自动打包部署完毕。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/102931.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

一生一芯8——在github上添加ssh key

为在github上下载代码框架&#xff0c;这里在github上使用ssh key进行远程连接&#xff0c;方便代码拉取 参照博客https://blog.csdn.net/losthief/article/details/131502734 本机 系统ubuntu22.04 git 版本2.34.1 本人是第一次配置&#xff0c;没有遇到奇奇怪怪的错误&…

DockerFile解析

1. 是什么 Dockerfile是田来构建Docker镜像的文本文件&#xff0c;是由一条条构建镜像所需的指令和参数构成的脚本 1.1 概述 1.2 官网 Dockerfile reference | Docker Documentation 1.3 构建三步骤 1. 编写dockerfile文件 2. docker build命令构建镜像 3. docker run依镜像运…

基于Opencv的虚拟拖拽项目

预备知识 勾股定理 跟随移动算法 手势识别图解 项目源代码 """ 演示一个简单的虚拟拖拽 步骤&#xff1a; 1、opencv 读取视频流 2、在视频图像上画一个方块 3、通过mediapipe库获取手指关节坐标 4、判断手指是否在方块上 5、是&#xff0c;方块跟着移动 6、…

微服务中间件--统一网关Gateway

统一网关Gateway 8.统一网关Gatewaya.搭建网关服务b.路由断言工厂c.路由过滤器GatewayFilterd.全局过滤器GlobalFiltere.过滤器的执行顺序f.网关的cors跨域配置 8.统一网关Gateway 网关功能&#xff1a; 身份认证和权限校验服务路由、负载均衡请求限流 网关的技术实现 在Spr…

Docker容器与虚拟化技术:GitHub账户注册

目录 一、实验 1.GitHub 一、实验 1.GitHub &#xff08;1&#xff09;GitHub是一个面向开源及私有软件项目的托管平台&#xff0c;因为只支持Git作为唯一的版本库格式进行托管&#xff0c;故名GitHub。 &#xff08;2&#xff09;官网 GitHub: Let’s build from here …

微服务中间件--MQ

MQ MQa.安装RabbitMQb.消息模型c.SpringAMQP发送和接收d.WorkQueue模型e.发布订阅模型1) FanoutExchange2) DirectExchange3) TopicExchange f.消息转换器 MQ 同步调用的问题 微服务间基于Feign的调用就属于同步方式&#xff0c;存在一些问题。 耦合度高&#xff1a;每次加入…

【FAQ】云存储EasyCVR视频汇聚平台分发rtsp流时,出现“用户已过期”提示该如何解决?

视频云存储/安防监控EasyCVR视频汇聚平台基于云边端智能协同&#xff0c;支持海量视频的轻量化接入与汇聚、转码与处理、全网智能分发、视频集中存储等。音视频流媒体视频平台EasyCVR拓展性强&#xff0c;视频能力丰富&#xff0c;具体可实现视频监控直播、视频轮播、视频录像、…

在当今信息化社会中的安全大文件传输

随着科技的不断进步&#xff0c;数据已经成为各个领域和行业的宝贵财富。然而&#xff0c;随之而来的数据传输和交换问题也成为一个日益突出的挑战。在这篇文章中&#xff0c;我们将探讨在当今信息化社会中的安全大文件传输的重要性&#xff0c;以及如何应对传统传输方式所面临…

【C++】—— 简述C++11新特性

序言&#xff1a; 从本期开始&#xff0c;我将会带大家学习的是关于C11 新增的相关知识&#xff01;废话不多说&#xff0c;我们直接开始今天的学习。 目录 &#xff08;一&#xff09;C11简介 &#xff08;二&#xff09;统一的列表初始化 1、&#xff5b;&#xff5d;初始…

类与对象(中)

类与对象&#xff08;中&#xff09; 一、类的六个默认成员函数二、构造函数1、概念2、代码3、特点4、编译器生成的默认构造函数的作用&#xff08;1&#xff09;内置类型&#xff08;基本类型&#xff09;和自定义类型的概念&#xff08;2&#xff09;作用&#xff08;3&#…

(WAF)Web应用程序防火墙介绍

&#xff08;WAF&#xff09;Web应用程序防火墙介绍 1. WAF概述 ​ Web应用程序防火墙&#xff08;WAF&#xff09;是一种关键的网络安全解决方案&#xff0c;用于保护Web应用程序免受各种网络攻击和威胁。随着互联网的不断发展&#xff0c;Web应用程序变得越来越复杂&#x…

2021年03月 C/C++(四级)真题解析#中国电子学会#全国青少年软件编程等级考试

第1题&#xff1a;酒鬼 Santo刚刚与房东打赌赢得了一间在New Clondike 的大客厅。今天&#xff0c;他来到这个大客厅欣赏他的奖品。房东摆出了一行瓶子在酒吧上。瓶子里都装有不同体积的酒。令Santo高兴的是&#xff0c;瓶子中的酒都有不同的味道。房东说道&#xff1a;“你可以…

机器学习深度学习——针对序列级和词元级应用微调BERT

&#x1f468;‍&#x1f393;作者简介&#xff1a;一位即将上大四&#xff0c;正专攻机器学习的保研er &#x1f30c;上期文章&#xff1a;机器学习&&深度学习——NLP实战&#xff08;自然语言推断——注意力机制实现&#xff09; &#x1f4da;订阅专栏&#xff1a;机…

游戏开发服务器选型的横向对比

来源一个某乎的作者&#xff0c;貌似来自台湾 上篇介绍了go版本的游戏服务器&#xff0c;这篇介绍下其它语言版本&#xff1a; SkynetkbengineNoahGameFramePomeloPinusET使用的语言C/LuaCCNodejsTypeScriptC#概述云风前辈开源的框架mmo框架server一个快速的、可扩展的、分布…

win11出现安全中心空白和IT管理员已限制对此应用的某些区域的访问

问题 windows安全中心服务被禁用 winr 输入services.msc 找到windows安全中心服务查看是否被禁用&#xff0c;改为启动&#xff0c;不可以改动看第三条 打开设置&#xff0c;找到应用—windows安全中心–终止–修复–重置 重启如果还是不行看第四条 家庭版系统需要打开gped…

我是怎么从0到1搭建性能门禁系统的

背景 页面的性能对于用户的体验起着至关重要的作用&#xff0c;根据Mobify 研究发现&#xff0c;首页加载时间每减少100 毫秒&#xff0c;用户留存率就会增加1.11%。所以做好页面的性能优化&#xff0c;对于网站来说是一个非常重要的步骤。 在解决问题之前需要度量问题&#x…

期权分仓开户资金是否安全?具体保障措施有哪些?

网上关于期权分仓系统的真假一直都没有定论&#xff0c;两方人的争论也让很多没有接触过期权分仓系统的人摸不着头脑&#xff0c;那么期权分仓靠谱吗&#xff1f;资金在里面安全吗&#xff1f;下文为大家科普期权分仓开户资金是否安全?具体保障措施有哪些&#xff1f; 一、期权…

arm:day9

1。思维导图 2..I2C实验&#xff0c;检测温度和湿度 iic.h #ifndef __IIC_H__ #define __IIC_H__ #include "stm32mp1xx_gpio.h" #include "stm32mp1xx_rcc.h" #include "gpio.h" /* 通过程序模拟实现I2C总线的时序和协议* GPIOF ---> AHB4…

指针(初阶)

1. 指针是什么&#xff1f; 指针是什么&#xff1f; 指针理解的2个要点&#xff1a; 1. 指针是内存中一个最小单元的编号&#xff0c;也就是地址 2. 平时口语中说的指针&#xff0c;通常指的是指针变量&#xff0c;是用来存放内存地址的变量 总结&#xff1a;指针就是地址&…

K8s中的Namespace是什么?

如何理解Namespace默认的Namespace使用Namespace的好处创建和使用Namespace使用命令行创建使用YAML文件创建Namespace 用例切换Namespace删除Namespace 感谢 &#x1f496; hello大家好&#x1f60a; 由于能够无缝管理和扩展工作负载&#xff0c;Kubernetes &#xff08;简称K8…