当前位置: 首页 > news >正文

详细步骤记录:持续集成Jenkins自动化部署一个Maven项目

Jenkins自动化部署

提示:本教程基于CentOS Linux 7系统下进行

Jenkins的安装

1. 下载安装jdk11

官网下载地址:https://www.oracle.com/cn/java/technologies/javase/jdk11-archive-downloads.html

本文档教程选择的是jdk-11.0.20_linux-x64_bin.tar.gz

解压jdk-11.0.20_linux-x64_bin.tar.gz命令为:

tar -zxvf jdk-11.0.20_linux-x64_bin.tar.gz

image-20231114235650898

2. 下载Jenkins的war包

官网下载地址:https://mirrors.tuna.tsinghua.edu.cn/jenkins/war-stable/2.414.3/jenkins.war

image-20231114235425525

3. 准备Jenkins启动脚本

编写一个Jenkins的启动脚本,简化之后每次启动都要敲命令;

将Jenkins的访问端口设置为3001;(可以根据自己需求设置端口)

创建startup.sh脚本

vim /usr/local/tools/jenkins/startup.sh

startup.sh脚本

#!/bin/bashnohup /usr/local/tools/jdk-11.0.20/bin/java -jar /usr/local/tools/jenkins/jenkins.war --httpPort=3001 >/dev/null 2>&1 &

使脚本具有执行权限

chmod +x /usr/local/tools/jenkins/startup.sh

image-20231114235448895

4. 启动Jenkins

执行如下命令即可

./startup.sh

初次启动Jenkins,系统会要求使用其自动生成的密码进行解锁,初始密码在**/root/.jenkins/secrets/initialAdminPassword**文件中,启动时的日志里也有打印出来;

5. 访问并解锁Jenkins

访问http://IP:3001,等待解锁Jenkins页面出现,就是Unlock Jenkins页面,在Administrator password下的输入框输入你的启动Jenkins时获取的临时密码即可

Jenkins的基础配置与插件安装

1. 基础插件安装

Dashboard–>系统管理(Manage Jenkins)–>插件管理(Plugins)–>Avaliable Plugins

安装基础插件SSH server、Publish Over SSH、NodeJS Plugin、Maven Integration plugin、Git plugin、Git client plugin;

下载插件后会提示要重启,自动重启后就会生效

image-20231115130641871

2. 配置项目运行所需的Jdk8环境

  • 官网下载地址:https://www.oracle.com/java/technologies/javase/javase8-archive-downloads.html

    本项目运行选择的是jdk-8u301-linux-x64.tar.gz

    可与之前Jenkins运行所需的jdk11放一起

    解压命令为

    tar -zxvf jdk-8u301-linux-x64.tar.gz
    

    image-20231116221031658

  • Jenkins配置JDK

    Dashboard–>系统管理(Manage Jenkins)–>全局工具配置(Tools)–>JDK安装

    新增JDK,JAVA_HOME配置jdk8的路径

    在这里插入图片描述

3. 配置Jenkins自动拉取代码所需的Git工具

  • Jenkins所在服务器上安装Git

    安装命令sudo yum install -y git

    查看git版本命令 git --version

    安装git的可执行文件默认路径为/usr/bin/git

    image-20231116221531154

  • Jenkins上配置Git

    Dashboard–>系统管理(Manage Jenkins)–>全局工具配置(Tools)–>Git installations

    image-20231116130332404

4. Maven安装

Dashboard–>系统管理(Manage Jenkins)–>全局工具配置(Tools)–>Git installations

选择自己需要的maven版本即可,勾选自动安装

image-20231116130332404

5. 配置Publish over SSH

  • 生成SSH密钥

    在Jenkins所在的服务器上生成ssh密钥,注意是Jenkins所在的服务器,命令如下:

    ssh-keygen -t rsa -P ''
    

    然后一路回车键,接受默认文件位置和文件名,为了方便也不使用密码短语

    # 整个交互过程
    [root@VM-20-12-centos tools]# ssh-keygen -t rsa -P ''
    Generating public/private rsa key pair.
    Enter file in which to save the key (/root/.ssh/id_rsa): 
    Created directory '/root/.ssh'.
    Enter passphrase (empty for no passphrase): 
    Enter same passphrase again: 
    Your identification has been saved in /root/.ssh/id_rsa.
    Your public key has been saved in /root/.ssh/id_rsa.pub.
    The key fingerprint is:
    SHA256:RpNQDtJe92E5qovCrKhoO4CiN4Jn0Y3LT6SPbTKFg4E
    The key's randomart image is:
    +---[RSA 4096]----+
    |    ..o..    .   |
    |     ..+... =    |
    | .   . .=. + o   |
    |E .   .. .. .    |
    |.  + +. S.       |
    |+ o =oo..        |
    |=  =.+.. .       |
    |=+= O=o .        |
    |**+o.*+          |
    +----[SHA256]-----+
    [root@VM-20-12-centos tools]# 
    

    image-20231116224821420

  • 上传公钥

    将生成的SSH密钥对里的公钥文件上传到jar包服务所需要运行的服务器,后面需要Jenkins自动将编译好的jar包上传到这台服务器上。

    cd ~
    ls .ssh/
    ssh-copy-id -i .ssh/id_rsa.pub 服务器IP地址
    

    整个命令的作用是将本地计算机的公钥文件复制到远程主机上的authorized_keys文件中,从而实现无密码登录;

  • 验证是否可以无密码登录远程

    ssh root@服务器IP地址
    
  • 在Jenkins上配置Publish over SSH

    Dashboard–>系统管理(Manage Jenkins)–>系统配置(System)–>Publish over SSH

    image-20231116230215841

环境准备完毕!

自动部署Maven项目

1. 创建一个Maven任务

image-20231116230533898
img

2. 配置General

丢弃旧的构建核心意思就是将旧的jar包扔掉,如果有打算回滚服务到很多个版本之前,这里的“保持构建的最大个数”就得设置大一点。一般也就保留3~5个。

image-20231116230939928

3. 源码管理配置

image-20231116231707880

添加git访问凭据,例:

image-20231116231903666

4. 构建触发器配置

构建触发器:就是什么时候触发自动部署这个操作;

一般只用定时构建和轮询PCM;

定时构建:根据设置的日程表(类似于Cron),去定时自动拉取代码、编译打包、上传服务器、运行;

轮询PCM:如果git仓库代码有变动,就自动拉取代码、编译打包、上传服务器、运行;

因为是测试,所以此处用的是默认配置;

image-20231116232636949

5. 构建环境配置

选择我们在之前在Dashboard-->系统管理(Manage Jenkins)-->全局工具配置(Tools)-->JDK安装里配置JDK8即可;

image-20231116232914694

6. 编译打包配置

image-20231116233215698

7. 服务上传运行配置

jar包运行脚本

source /etc/profile 
cd /data/mall/test
ps -ef|grep test-0.0.1-SNAPSHOT.jar|grep -v grep|awk '{print $2}'|xargs kill -s 9   
BUILD_ID=dontKillMe 
nohup java -jar test-0.0.1-SNAPSHOT.jar > nohup.out 2>&1 &

image-20231116234125636

test项目的目录结构

image-20231116234354732

8. 配置完成,立即构建

image-20231117002230933

9. 查看验证

前往jar包运行的服务器进行测试验证

image-20231117002509345

验证自动部署成功!

相关文章:

详细步骤记录:持续集成Jenkins自动化部署一个Maven项目

Jenkins自动化部署 提示:本教程基于CentOS Linux 7系统下进行 Jenkins的安装 1. 下载安装jdk11 官网下载地址:https://www.oracle.com/cn/java/technologies/javase/jdk11-archive-downloads.html 本文档教程选择的是jdk-11.0.20_linux-x64_bin.tar.g…...

Python学习(一)基础语法

文章目录 1. 入门1.1 解释器的作用1.2 下载1.3 基础语法输入输出语法与引号注释:变量: 数据类型与四则运算数据类型四则运算数据类型的查看type()数据类型的转换int()、int()、float() 流程控制格式化输出循环与遍历逻辑运算符list遍历字典dict遍历 跳出…...

【C刷题】day7

🎥 个人主页:深鱼~🔥收录专栏:【C】每日一练🌄欢迎 👍点赞✍评论⭐收藏 一、选择题 1、以下对C语言函数的有关描述中,正确的有【多选】( ) A: 在C语言中,一…...

数据挖掘复盘——apriori

read_csv函数返回的数据类型是Dataframe类型 对于Dataframe类型使用条件表达式 dfdf.loc[df.loc[:,0]2]df: 这是一个DataFrame对象的变量名,表示一个二维的表格型数据结构,类似于电子表格或SQL表。 df.loc[:, 0]: 这是使用DataFrame的.loc属性来进行…...

Windows10下Maven3.9.5安装教程

文章目录 1.下载maven2.安装3.配置系统变量3.1.新建系统变量 MAVEN_HOME3.2.编辑系统变量Path 4.CMD命令测试是否安装成功5.配置maven本地仓库6.配置国内镜像仓库 1.下载maven 官网 https://maven.apache.org/download.cgi 点击下载。 2.安装 解压到指定目录 D:\installSoft…...

【开源】基于JAVA的校园失物招领管理系统

项目编号: S 006 ,文末获取源码。 \color{red}{项目编号:S006,文末获取源码。} 项目编号:S006,文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、研究内容2.1 招领管理模块2.2 寻物管理模块2.3 系…...

requests爬虫IP连接初始化问题及解决方案

问题背景 在使用HTTPS爬虫IP连接时,如果第一次请求是chunked方式,那么HTTPS爬虫IP连接将不会被初始化。这个问题可能会导致403错误,或者在使用HTTPS爬虫IP时出现SSL错误。 解决方案 为了解决这个问题,我们可以在requests库的ada…...

Argo Rollouts结合Service进行Blue-Green部署

删除03 部署04 rootk8s-master01:~/learning-jenkins-cicd/09-argocd-and-rollout/rollout-demos# kubectl delete -f 03-rollouts-with-prometheus-analysis.yaml rootk8s-master01:~/learning-jenkins-cicd/09-argocd-and-rollout/rollout-demos# kubectl apply -f 04-rol…...

mongodb——原理简介,docker单机部署

MongoDB noSQL数据库 特点 数据文件存储格式为 BSON (JSON 的扩展) {“name”:“joe”}这是 BSON 的例子,其中"name"是键,"joe"是值。键值对组成了 BSON 格式。面向集合…...

ThinkPHP 系列漏洞

目录 2、thinkphp5 sql注入2 3、thinkphp5 sql注入3 4、 thinkphp5 SQL注入4 5、 thinkphp5 sql注入5 6、 thinkphp5 sql注入6 7、thinkphp5 文件包含漏洞 8、ThinkPHP5 RCE 1 9、ThinkPHP5 RCE 2 10、ThinkPHP5 rce3 11、ThinkPHP 5.0.X 反序列化漏洞 12、ThinkPHP…...

系列十、你说你做过JVM调优和参数配置,请问如何盘点JVM系统的默认值?

一、JVM的参数类型 1.1、标配参数 java -versionjava -help 1.2、XX参数 1.2.1、Boolean类型 公式:-XX:或者- 某个属性值 表示开启、-表示关闭 # 是否打印GC收集细节 -XX:PrintGCDetails -XX:-PrintGCDetails# 是否使用串行垃圾收集器 -XX:UseSerialGC -XX:-UseS…...

Java Web——Web开发介绍

什么是Web开发 Web开发是一种创建和维护全球广域网(World Wide Web)上的网站和应用的技术。全球广域网也称为万维网(www World Wide Web),是一个能够通过浏览器访问的互联网上的巨大信息库。 Web开发的目标是创建功能齐全、易于使用和安全的…...

Vue 数据监听机制及 Vue 2.0 和 Vue 3.0 的比较

Vue 数据监听机制 在 Vue 中,数据的变化通常是通过数据劫持(Data Binding)和观察者模式来实现的。当数据发生变化时,Vue 能够自动更新视图。 Vue 2.0 的数据监听 在 Vue 2.0 中,数据监听是通过 Object.defineProper…...

QT多线程项目中子线程无法修改主线程的ui组件

情况描述 今天我创建了一个QT多线程的工程,框架如下。我希望通过指针的方式,让子线程去直接修改主线程的ui组件,但事与愿违。 class ChildThread : public QThread {Q_OBJECT public:ChildThread (MainThread* par):m_Par(par){}; protecte…...

Python 如何实现备忘录设计模式?什么是备忘录设计模式?Python 备忘录设计模式示例代码

什么是备忘录(Memento)设计模式? 备忘录(Memento)设计模式是一种行为型设计模式,用于捕获一个对象的内部状态,并在对象之外保存这个状态,以便在需要时恢复对象到先前的状态。这种模…...

LangChain 代理 Agent(学习笔记)

原文:LangChain 代理 Agent(学习笔记) - 尘叶心繁的专栏 - TNBLOG LangChain 代理 Agent(学习笔记) LangChain 代理 Agent(学习笔记) 简介Agent Zero-shot ReActStructured Input ReActOpenAI FunctionsConversationalSelf ask with searchReAct document storePlan…...

实验三 页面置换算法

一. 实验目的: 1、熟悉虚存管理的各种页面淘汰算法 二、实验环境: 硬件环境:计算机一台,局域网环境; 软件环境:Windows XP及以上版本 Professional操作系统平台,Visual C 6.0专业版或企业版…...

Node.js中的Buffer和Stream

Node.js中的Buffer和Stream 计算机只能理解二进制数据,即0和1形式的数据。这些数据的顺序移动称为流。以称为块(chunk)的破碎部分流式传输数据;计算机一收到数据块就开始处理数据,而不用等待整个数据。 我们这篇文章…...

3.5 Windows驱动开发:应用层与内核层内存映射

在上一篇博文《内核通过PEB得到进程参数》中我们通过使用KeStackAttachProcess附加进程的方式得到了该进程的PEB结构信息,本篇文章同样需要使用进程附加功能,但这次我们将实现一个更加有趣的功能,在某些情况下应用层与内核层需要共享一片内存…...

【小黑送书—第八期】>>别再吐槽大学教材了,来看看这些网友强推的数学神作!

导读:关于大学数学教材的吐槽似乎从来没停止过。有人慨叹:数学教材晦涩难懂。错!难懂,起码还可以读懂。数学教材你根本读不懂;也有人说:数学教材简直就是天书。 数学教材有好有坏,这话不假&…...

网络六边形受到攻击

大家读完觉得有帮助记得关注和点赞!!! 抽象 现代智能交通系统 (ITS) 的一个关键要求是能够以安全、可靠和匿名的方式从互联车辆和移动设备收集地理参考数据。Nexagon 协议建立在 IETF 定位器/ID 分离协议 (…...

Cursor实现用excel数据填充word模版的方法

cursor主页:https://www.cursor.com/ 任务目标:把excel格式的数据里的单元格,按照某一个固定模版填充到word中 文章目录 注意事项逐步生成程序1. 确定格式2. 调试程序 注意事项 直接给一个excel文件和最终呈现的word文件的示例,…...

【杂谈】-递归进化:人工智能的自我改进与监管挑战

递归进化:人工智能的自我改进与监管挑战 文章目录 递归进化:人工智能的自我改进与监管挑战1、自我改进型人工智能的崛起2、人工智能如何挑战人类监管?3、确保人工智能受控的策略4、人类在人工智能发展中的角色5、平衡自主性与控制力6、总结与…...

【Linux】shell脚本忽略错误继续执行

在 shell 脚本中,可以使用 set -e 命令来设置脚本在遇到错误时退出执行。如果你希望脚本忽略错误并继续执行,可以在脚本开头添加 set e 命令来取消该设置。 举例1 #!/bin/bash# 取消 set -e 的设置 set e# 执行命令,并忽略错误 rm somefile…...

基于Uniapp开发HarmonyOS 5.0旅游应用技术实践

一、技术选型背景 1.跨平台优势 Uniapp采用Vue.js框架,支持"一次开发,多端部署",可同步生成HarmonyOS、iOS、Android等多平台应用。 2.鸿蒙特性融合 HarmonyOS 5.0的分布式能力与原子化服务,为旅游应用带来&#xf…...

unix/linux,sudo,其发展历程详细时间线、由来、历史背景

sudo 的诞生和演化,本身就是一部 Unix/Linux 系统管理哲学变迁的微缩史。来,让我们拨开时间的迷雾,一同探寻 sudo 那波澜壮阔(也颇为实用主义)的发展历程。 历史背景:su的时代与困境 ( 20 世纪 70 年代 - 80 年代初) 在 sudo 出现之前,Unix 系统管理员和需要特权操作的…...

智能仓储的未来:自动化、AI与数据分析如何重塑物流中心

当仓库学会“思考”,物流的终极形态正在诞生 想象这样的场景: 凌晨3点,某物流中心灯火通明却空无一人。AGV机器人集群根据实时订单动态规划路径;AI视觉系统在0.1秒内扫描包裹信息;数字孪生平台正模拟次日峰值流量压力…...

08. C#入门系列【类的基本概念】:开启编程世界的奇妙冒险

C#入门系列【类的基本概念】:开启编程世界的奇妙冒险 嘿,各位编程小白探险家!欢迎来到 C# 的奇幻大陆!今天咱们要深入探索这片大陆上至关重要的 “建筑”—— 类!别害怕,跟着我,保准让你轻松搞…...

华为OD机试-最短木板长度-二分法(A卷,100分)

此题是一个最大化最小值的典型例题, 因为搜索范围是有界的,上界最大木板长度补充的全部木料长度,下界最小木板长度; 即left0,right10^6; 我们可以设置一个候选值x(mid),将木板的长度全部都补充到x,如果成功…...

微服务通信安全:深入解析mTLS的原理与实践

🔥「炎码工坊」技术弹药已装填! 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 一、引言:微服务时代的通信安全挑战 随着云原生和微服务架构的普及,服务间的通信安全成为系统设计的核心议题。传统的单体架构中&…...