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/bash

nohup /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

验证自动部署成功!

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

接口测试实战工具如何选择?这6个工具首选(建议收藏)

常见接口类型 • HTTP/HTTPS 类型接口 基于HTTP协议开发的接口现在应用是最为广泛的,这类API使用起来简单明了,因为它是轻量级的、跨平台、跨语言的, 但凡是第三方提供的API都会有HTTP版本的接口。 RESTful API也是基于HTTP协议的&#xff0c…

Google Play上架马甲包攻略

想要更好的海外推广离开google play应用市场,有了谷歌就可以按各平台规则来进行推广,做广告投放基本都离不开谷歌市场的包,所以有了马甲包。然而,Google Play对于马甲包的上传有一系列限制和规定。以下是一些Google Play上架马甲包…

leetcode算法之位运算

目录 1.判断字符是否唯一2.丢失的数字3.两整数之和4.只出现一次的数字II5.消失的两个数字6.位1的个数7.比特位计数8.汉明距离 1.判断字符是否唯一 判断字符是否唯一 class Solution { public:bool isUnique(string astr) {//利用鸽巢原理做优化if(astr.size()>26) return…

性能压力测试的优势与重要性

性能压力测试是软件开发过程中至关重要的一环,它通过模拟系统在极限条件下的运行,以评估系统在正常和异常负载下的表现。这种测试为确保软件系统的可靠性、稳定性和可伸缩性提供了关键信息。下面将探讨性能压力测试的优势以及为什么在软件开发中它具有不…

数据资产到底如何入表?

2024年1月1日起,财政部《企业数据资源相关会计处理暂行规定》正式施行,距离现在只有一个多月的时间。 数据资源入表意味着企业可以将数据资源确认为企业资产负债表中“资产”一项。对于拥有丰富数据资源的企业来说,有望在财务报表中体现其真…

Redis(集合Set和有序集合SortedSet)

SET集合中的元素是不允许重复的,SET中的命令都是以S开头的。 使用SADD 在集合中添加元素,使用SMEMBERS查看元素。 当添加重复元素时,会返回0代表添加失败,查询还是就Redis一个元素。 使用SISMEMBER查询元素是否在集合中&#xff…

ADAudit Plus:提升企业安全的不可或缺的审计解决方案

随着信息技术的飞速发展,企业在数字化转型过程中面临着越来越多的安全威胁。为了保护敏感数据、防范内外部攻击,企业需要强大的安全审计解决方案。在这个背景下,ADAudit Plus作为一款强大而全面的安全审计工具,成为了众多企业的首…

谷歌浏览器F12/打开开发者工具网络就无法连接报错

刷新页面就出现提示: 原因:浏览器网络设置的问题,网络设置了离线状态,切换回3G即可。

网站页头被挂马状态及新增了index.html文件解决思路

今天网站刚新增了篇了文章《从nginx层阻断可执行的php 防止宝塔站点挂马》,整体测试下来还是不靠谱,设置后导致所有PHP文件都打不开了。 经过不断的查看日志和搜索办法总算告一段落,后续待观察。原因如下,多个网站目录新增了index.html文件,看时间是近两天上传的。 网站代…

Quest 3期间Sui上游戏处理了数百万笔交易

Sui固有的可扩展性和低且可预测的gas费使其成为Web3游戏的理想平台。在Quest 3中,参与的游戏项目处理了数百万笔交易,这毫无疑问地展示了Sui卓越的能力。 Quest 3的主题是游戏,让开发者有机会向潜在玩家介绍他们激动人心的创作。鼓励这些玩家…

Go 字符串处理:fmt.Sprintf与string.Builder的比较

在Go语言中,我们通常会遇到两种主要的方式来处理和操作字符串:使用fmt.Sprintf函数和string.Builder类型。尽管两者都可以实现字符串的格式化和连接,但它们在性能和用法上有一些关键区别。 1. fmt.Sprintf fmt.Sprintf是一个函数&#xff0c…

【解疑】ZIP压缩包的密码可以取消吗?

ZIP是工作中经常用到的文件压缩格式,它可以将多个文件压缩成一个文件,便于传输和存储。有时候,为了保护文件的私密性,很多人还会在压缩文件的同时设置密码保护。那问题来了,要是后续不需要保护了,ZIP压缩包…

DDD落地:从腾讯视频DDD重构之路,看DDD极大价值

尼恩说在前面 在40岁老架构师 尼恩的读者交流群(50)中,最近有小伙伴拿到了一线互联网企业如阿里、滴滴、极兔、有赞、希音、百度、网易、美团的面试资格,遇到很多很重要的面试题: 谈谈你的DDD落地经验? 谈谈你对DDD的理解&#x…

(C++)string类及其函数

愿所有美好如期而遇 标准库中的string类 string是对类模板实例化出的类型的重命名&#xff0c;也就是说string就是basic_string<char>这个类型。 string是表示字符串的字符串类 该类接口与常规类的接口基本相同&#xff0c;再添加了一些专门用来操作string的常规操作。…

接口测试系列之 —— 前端交互测试和后端逻辑测试

01 前端交互测试 前端页面与后端代码之间的交互测试&#xff0c;可以理解为接口功能测试的一个子集。 测试准备 在进行交互测试前&#xff0c;首先要对前端功能有明确的认知&#xff0c;能够明确区分&#xff1a; 什么功能属于前端页面逻辑功能 什么功能又属于前端与后…

专业数据标注公司:景联文科技领航数据标注行业,满足大模型时代新需求

随着大模型的蓬勃发展和相关政策的逐步推进&#xff0c;为数据要素市场化配置的加速推进提供了有力的技术保障和政策支持。数据要素生产力度的不断提升&#xff0c;为数据标注产业带来了迅速发展的契机。 根据国家工信安全发展研究中心测算&#xff0c;2022年中国数据加工环节的…

Docker与Kubernetes结合的难题与技术解决方案

文章目录 1. **版本兼容性**技术解决方案 2. **网络通信**技术解决方案 3. **存储卷的管理**技术解决方案 4. **安全性**技术解决方案 5. **监控和日志**技术解决方案 6. **扩展性与自动化**技术解决方案 7. **多集群管理**技术解决方案 结语 &#x1f388;个人主页&#xff1a…

SpringCloud微服务:Nacos和Eureka的区别

目录 配置&#xff1a; 区别&#xff1a; ephemeral设置为true时 ephemeral设置为false时&#xff08;这里我使用的服务是order-service&#xff09; 1. Nacos与eureka的共同点 都支持服务注册和服务拉取 都支持服务提供者心跳方式做健康检测 2. Nacos与Eu…