Jenkins 自动化部署实例讲解,另附安装教程!

【2023】Jenkins入门与安装_jenkins最新版本_丶重明的博客-CSDN博客

也可以结合这个互补看 

前言

你平常在做自己的项目时,是否有过部署项目太麻烦的想法?如果你是单体项目,可能没什么感触,但如果你是微服务项目,相信你应该是有过这种感触的。

这种情况下,我一般会劝你了解一下 Jenkins 这个玩意。怎么了解呢?我会建议你阅读本文 🤡。

本文分为两部分:

  • 第一部分为 Jenkins 安装教程,会教你如何在 Linux 上安装 Jenkins。

  • 第二部分为一个简单的 Jenkins 自动化构建部署实例讲解。

你可以根据自己的意愿,选择性的跳过第一部分,因为第二部分才是重点。(通过目录可以快速翻到第二部分)


当前环境

  • CentOS 7.8

  • Java 11(注意当前 jenkins 支持的 Java 版本最低为 Java11)

  • FinalShell 3.9(操作环境)

安装 Jenkins

PS:不建议使用 Docker 安装 Jenkins,因为使用 Jenkins 的时候一般会调用外部程序,比如 Maven、Docker、JDK、Nodejs 等,所以我们最好直接安装在本机上,以避免不必要的麻烦。

 

1. 添加 Jenkins 源

执行下面两条命令:

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/jenkins.io.key因为Jenkins需要JAVA环境,所以安装JAVA环境
sudo yum install java-11-openjdk-devel

 

2. 通过 yum 安装 Jenkins

  • yum -y install jenkins

 

 

 

3. 修改 Jenkins 端口号

  1. Jenkins 默认端口号为 8080,输入vim /etc/sysconfig/jenkins进行编辑,将 JENKINS_PORT 修改为自己想要的端口号,前提得保证修改后的这个端口没有被其他的进程占用。

 

2.这里修改了可能还不能生效,还需要修改另一个地方,输入以下指令进行编辑

vim /usr/lib/systemd/system/jenkins.service
# 找到下面的文字
Environment="JENKINS_PORT=8080" # 修改为自己想要的端口号
# :wq退出

 

  1. 3.修改完成后,重新加载配置文件,随后再重启 Jenkins,此时的启动端口应该已经变成你修改的端口号了。

# 重新加载配置文件
systemctl daemon-reload
# 重启jenkins
systemctl restart jenkins

 

启动 Jenkins

Jenkins 可以单独指定 Java 路径,在/etc/init.d/jenkins文件内大概一百行左右的位置,在最上面加上你的 java 路径即可:

PS:当前 Jenkins 支持的最低 Java 版本为 11,如果机器上只有 Java8 的朋友需要先安装 Java11 或以上版本。Linux 下多版本 Java 建议通过系统自带的 alternatives 来管理,参考这篇文章外加自己琢磨搞定:
linux alternatives 命令详解:
https://www.cnblogs.com/lpfuture/p/4638425.html

  1. 输入service jenkins start,会弹出提示:Starting jenkins (via systemctl):,意思是正在启动,第一次启动比较耗时,此时耐心等待。如果提示超时失败,没关系,jenkins 仍然在启动,只是第一次启动比较耗时。

    如果提示内容不是超时失败,那大概率是你的 Java 没安装好或者版本不对。

  2. 放行刚刚配置的端口

# 放行15369端口
firewall-cmd --zone=public --add-port=15369/tcp --permanent
# 重新加载防火墙
firewall-cmd --reload
# 查看是否已经开启
firewall-cmd --list-ports

如果你是在阿里云腾讯云等类似服务器上的话,那你还需要去控制台防火墙或者安全组开放这个端口,像这样:

 

 

开放端口时记得设置授权 ip,建议你直接给自家 ip 地址授权全部端口号。

  1. 在浏览器输入 ip+port,可以进入到 Jenkins 的初始化界面,第一次启动要等的比较久:

进入这个界面,说明你的 Jenkins 已经在启动中了。

 

 

初始化配置 Jenkins

  1. 系统启动完毕后,系统会提示你查看并输入管理员密码,根据中显示的密码位置,打开该文件并将密码复制粘贴即可:

# 在服务器查看密码文件
cat /var/lib/jenkins/secrets/initialAdminPassword

2、密码输入成功后,进入插件安装界面,如果你是新手,直接使用推荐安装的插件即可:

 

安装过程中可能会出现部分插件安装失败的情况,没关系,全部处理完毕后可以选择重试。

4、安装完毕后,系统会提示你创建第一个管理员账户:

 

 5、配置 Jenkins 访问地址,便于一些插件使用,一般会有默认值:

 

 

6、配置完成,点击开始使用 Jenkins:

 

 

 

随后就进入到 Jenkins 的管理界面了,不同版本的 Jenkins 界面可能会不一样:

 

至此,Jenkins 安装完毕。

扩展

如果你是使用 Jenkins 来对 Java 服务做持续集成的话,那么你还需要安装下面的插件:

  • Maven Integration:Maven 集成管理插件。

  • Docker plugin:Docker 集成插件。

  • Publish Over SSH:远程文件发布插件。

  • SSH: 远程脚本执行插件。

  • GitLab:拉取远程仓库代码插件。

安装插件在系统管理 -> 插件管理里面


实例讲解

接下来,我会拿出我的用户微服务构建任务的实际配置来向你进行解读,当你了解了 Jenkins 自动化构建部署的工作原理后,你便可以很快的上手这个玩意,因为你会发现它是如此的简单。

基本环境

在此之前,我需要介绍一下我的基本环境:

  • 我的操作环境为 Windows,但是我要把微服务部署到一台 Linux 服务器上去,包括 Jenkins 也是安装在这个上面的。

  • 服务器上安装了 Jenkins、Git、Docker、JDK、Maven、NodeJs,都是些拿来构建的东西,都是单独安装的,而不是跑在 Docker 上。

  • 而项目服务都是跑在 Docker 上的,还有 Redis 这种轻量的中间件也跑在 Docker 上。

  • 我的项目已经在 Git 仓库里放好了,放 github 或者 gitee 或者 gitlab 都行。

全局工具配置

在 Jenkins 上,我已经配置好了这些构建工具的路径,以便于 Jenkins 可以直接调用到他们,在系统管理 -> 全局工具配置 这个页面下,这张图有点长:

 

 

在这张图上,你可以看到其中有一部分的配置是有路径的,还有一部分配置是没有路径的,这是因为我把他们的命令路径加到了系统路径上,即使不添加完整路径,Jenkins 也可以调用到它们。

创建任务

好,现在我们已经准备好环境了,可以创建一个任务来试试水了,输入任务名称,然后选择构建一个自由风格的软件项目

别问我在哪新建任务,请你返回首页好好看看:

任务配置

源码管理

现在我们已经进入到任务配置界面了,往下划到源码管理的地方,选择 Git,然后填写仓库地址等信息:

添加 Credentials 的时候,如果你会使用 SSH 密钥的话,建议还是用这个,但你得在机器上进行格外的配置,这里我就不多说了,不会的话直接用账号密码也是可以的:

 

构建步骤(Build Steps)

第一步:调用 Maven

点击增加构建步骤,由于我们是 Maven 管理的项目,需要先使用 Maven 构建,所以第一步就用调用顶层Maven目标

选择 maven 版本,然后 target 根据项目的实际情况编写,我的命令是这样的:

  1. 先构建 jar 包,执行 install 的过程中会先执行 package 的,所以我直接 install。我的项目中单元测试是没怎么梳理的,所以我使用参数-Dmaven.test.skip=true跳过单元测试。

  2. 然后我得打包成 docker 镜像,我使用的是dockerfile-maven-plugin这个 Maven 插件,所以打包 docker 镜像的步骤就也放在 maven 里面了,构建 docker 镜像的信息都在项目的 pom 文件里面。

install -Dmaven.test.skip=true
dockerfile:build -f user-service/user-server/pom.xml

 

构建完镜像了,接下来我们直接使用这个镜像创建容器然后运行就完事了。

第二步:执行 shell 启动容器

再添加一个构建步骤,正常情况下我们调用 docker 通过命令行调用就可以了,所以我们现在也添加一个执行shell的步骤即可。

具体的命令也很简单,就这么几步:

  1. 清理之前的旧镜像。由于我们刚刚构建了一个新的镜像,新镜像和旧镜像的名称和版本我们是没有改的,所以旧的镜像就会自动变成<none>,使用命令docker image prune -f 就可以清理掉这部分镜像。

  2. 停止旧容器运行并删除旧容器。当然我们得先判断一下是否存在旧容器,使用容器名称来进行判断,这部分指令涉及到shelldocker的命令知识,看不懂没关系,可以直接 cv,注意修改容器名称就好。

  3. 调用 docker 启动容器,根据项目实际情况来设定不同的参数,我这里设置了网络模式为 host,并且映射了一个容器卷,用于读取 nacos 的地址,再指定容器名称为user-service,最后指定使用的镜像名称。

大功告成!具体命令如下:

 # 清理镜像
docker image prune -f# 清理容器
if [ -n  "$(docker ps -a -f  name=user-service  --format '{{.ID}}' )" ] then#停止容器运行docker stop $(docker ps -a -f  name=user-service  --format '{{.ID}}' )#删除之前的容器docker rm $(docker ps -a -f  name=user-service  --format '{{.ID}}' )
fi# 启动容器
docker run -d  --net=host  -v scblogs-config:/config -e PARAMS="$params"  --name  user-service  scblogs/user-server

最后别忘了点击保存!

后记

经过上面这些步骤,我不仅安装好了 Jenkins,还完成了一个基本的自动化构建脚本,这个脚本会调用 maven 把我的项目打包,然后构建成一个 docker 镜像,再通过一段 shell 命令去启动这个程序。

如果你想尝试启动这个构建任务的话,你可以回到主页点击右边的绿色符号。

当然,你大概率是会构建失败的 😯。因为我的这份实例讲解并没有完全的讲清楚,甚至里面有很多步骤你都看不懂,是不是?

其实我并没有想写一份手把手的 Jenkins 使用教程,因为这要写的内容实在是太多了,我甚至可以因此写一本小册了!

还记得我在实例讲解的最开始写的吗?写这个构建案例的目的是让你了解 Jenkins 自动化构建的原理,如果你看到这里已经发现了,这自动化构建,其实就跟我们手动构建部署差不多!只不过是把手动操作的东西设定成了脚本,那你就已经有能力去自己摸索它了。

用用插件、写写脚本,就可以搞定自己项目的自动化部署啦。

实际情况是,我有一台服务器专门用于 Jenkins 自动化部署,还有一台服务器专门用于生产环境,这两台服务器都可以连接到外网,也可以互相访问到彼此。这是由于 Jenkins 构建时是会比较吃 CPU 的,为了不影响生产环境,所以我把它们分开了。当然,这种情况下,脚本也会稍微复杂一点,具体流程大概是下面这样的:

 

 

 

 

 

 

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

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

相关文章

改进的智能优化算法定性分析:收敛行为分析(Analysis of the convergence behavior )

目录 一、智能优化算法改进收敛行为分析运行结果 二、收敛性分析 三、GWO1在F1收敛性运行结果 四、改进灰狼算法GWO1 五、代码获取 一、智能优化算法改进收敛行为分析运行结果 本文以改进的灰狼算法 GWO1 为例&#xff0c;在 CEC2005 测试函数上进行定性分析实验。 F1:…

SpringBoot之Actuator基本使用

SpringBoot之Actuator基本使用 引入分类常用接口含义healthbeansconditionsheapdumpmappingsthreaddumploggersmetrics 引入 <!-- actuator start--> <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter…

大麦订单生成器 大麦订单购买截图生成

后台一键生成链接&#xff0c;独立后台管理 教程&#xff1a;修改数据库config/Conn.php 不会可以看源码里有教程 下载程序&#xff1a;https://pan.baidu.com/s/16lN3gvRIZm7pqhvVMYYecQ?pwd6zw3

企业邮箱费用详解!了解企业邮箱的费用及其相关信息

对于需要可靠的邮箱平台的企业来说&#xff0c;企业邮箱可能是最好的解决方案。有许多供应商提供企业邮箱服务&#xff0c;他们通常每月都有相应的费用。 在考虑企业邮箱的成本时&#xff0c;有几件事要记住。首先&#xff0c;您应该考虑使用邮箱服务的用户数量&#xff0c;因为…

✅1本期刊发生变动,EI期刊目录更新!

【SciencePub学术】继上次更新后一个月&#xff0c;爱思唯尔&#xff08;Elsevier&#xff09;官网更新了EI Compendex收录期刊目录。本次更新EI期刊目录中&#xff0c;Serials&#xff08;连续出版/核心收录&#xff09;列表共收录期刊名称5347个&#xff0c;与上次更新相比&a…

java快速生成数据库表文档(HTML、DOC、MD)

在企业级开发中、我们经常会有编写数据库表结构文档的时间付出&#xff0c;关于数据库表结构文档状态&#xff1a;要么没有、要么有、但都是手写、后期运维开发&#xff0c;需要手动进行维护到文档中&#xff0c;很是繁琐&#xff0c;这里推荐一个开源项目&#xff1a;screw gi…

leetcode743. 网络延迟时间 floyd

https://leetcode.cn/problems/network-delay-time/ 有 n 个网络节点&#xff0c;标记为 1 到 n。 给你一个列表 times&#xff0c;表示信号经过 有向 边的传递时间。 times[i] (ui, vi, wi)&#xff0c;其中 ui 是源节点&#xff0c;vi 是目标节点&#xff0c; wi 是一个信…

成都链安:7月区块链安全事件爆发式增长,导致损失超4.11亿美元

7月&#xff0c;各类安全事件数量及造成的损失较6月爆发式增长。7月发生较典型安全事件超36起&#xff0c;各类安全事件造成的损失总金额约4.11亿美元&#xff08;虚拟货币案件涉案金额除外&#xff09;&#xff0c;较6月上涨约321%。Rug Pull导致损失约2065万美元&#xff0c;…

Python模块psycopg2连接postgresql

目录 1. 基础语法 2. 基础用法 3. 多条SQL 4. 事务SQL 1. 基础语法 语法 psycopg2.connect(dsn #指定连接参数。可以使用参数形式或 DSN 形式指定。host #指定连接数据库的主机名。dbname #指定数据库名。user #指定连接数据库使用的用户名。…

探寻AI大模型平台之巅——文心千帆

目录 前言1. 何为文心千帆2. 核心亮点2.1 第三方大模型2.2 Prompt模板2.3 安全可靠 3. 一站式服务3.1 数据管理3.2 数据标注3.3 数据处理3.4 数据训练3.5 模型纳管3.5.1 模型评估3.5.2 模型压缩 3.6 服务发布 总结 前言 众多AI大模型不断涌现&#xff0c;一时不知如何挑选&…

Java 线程的生命周期和状态(实践加深理解)

一、常规回答&#xff08;八股文&#xff09; 线程的生命周期一共分为有6个状态&#xff0c;在某个时刻中&#xff0c;一个线程只会处在6个状态中的其中一种。 第1&#xff1a;初始状态&#xff08;NEW&#xff09; 当前的线程已经被创建了出来&#xff0c;但是还没有通过调用…

ELK高级搜索(一)

文章目录 ELK搜索1&#xff0e;简介1.1 内容1.2 面向 2&#xff0e;Elastic Stack2.1 简介2.2 特色2.3 组件介绍 3&#xff0e;Elasticsearch3.1 搜索是什么3.2 数据库搜索3.3 全文检索3.4 倒排索引3.5 Lucene3.6 Elasticsearch3.6.1 Elasticsearch的功能3.6.2 Elasticsearch使…

【uniapp】样式合集

1、修改uni-data-checkbox多选框的样式为单选框的样式 我原先是用的单选&#xff0c;但是单选并不支持选中后&#xff0c;再次点击取消选中&#xff1b;所以我改成了多选&#xff0c;然后改变多选样式&#xff0c;让他看起来像单选 在所在使用的页面上修改样式即可 <uni-d…

Android Gradle 骚操作,将两个项目合并到一个项目中

1. 前言 在工作中&#xff0c;由于各种原因&#xff0c;导致需要将两个可单独运行的App项目&#xff0c;合并到一个git仓库里&#xff0c;且单独的App项目里还有其他Module模块。 如果只是将两个项目复制到同一个文件夹下&#xff0c;还是得单独打开各个项目&#xff0c;是很不…

CCL 2023 电信网络诈骗案件分类评测-第一名方案

1 任务内容 1.1 任务背景 2022年12月1日起&#xff0c;新出台的《反电信网络诈骗犯罪法》正式施行&#xff0c;表明了我国治理当前电信网络诈骗乱象的决心。诈骗案件分类问题是打击电信网路诈骗犯罪过程中的关键一环&#xff0c;根据不同的诈骗方式、手法等将其分类&#xff…

Leetcode每日一题:141. 环形链表、142. 环形链表 II、143. 重排链表(2023.7.29、30、31 C++)

目录 141. 环形链表 问题描述&#xff1a; 实现代码与解析&#xff1a; 快慢指针&#xff1a; 原理思路&#xff1a; 142. 环形链表 II 问题描述&#xff1a; 实现代码与解析&#xff1a; 快慢指针 原理思路&#xff1a; 143. 重排链表 题目描述&#xff1a; 实现…

分布式系统的 38 个知识点

天天说分布式分布式&#xff0c;那么我们是否知道什么是分布式&#xff0c;分布式会遇到什么问题&#xff0c;有哪些理论支撑&#xff0c;有哪些经典的应对方案&#xff0c;业界是如何设计并保证分布式系统的高可用呢&#xff1f; 1. 架构设计 这一节将从一些经典的开源系统架…

基于ASP.NET MVC开发的、开源的个人博客系统

推荐一个功能丰富、易于使用和扩展的开源博客&#xff0c;可以轻松地创建和管理自己的博客。 项目简介 基于.Net Framework 4.5开发的、开源博客系统&#xff0c;具有丰富的功能&#xff0c;包括文章发布、分类、标签、评论、订阅、统计等功能&#xff0c;同时也可以根据需要…

Stable Diffusion如何生成高质量的图-prompt写法介绍

文章目录 Stable Diffusion使用尝试下效果prompt的编写技巧prompt 和 negative promptPrompt格式Prompt规则细节优化Guidance Scale 总结 Stable Diffusion Stable Diffusion是一个开源的图像生成AI系统,由Anthropic公司开发。它基于 Transformer模型架构,可以通过文字描述生成…

TypeScript 【type】关键字的进阶使用方式

导语&#xff1a; 在前面章节中&#xff0c;我们了解到 TS 中 type 这个关键字&#xff0c;常常被用作于&#xff0c;定义 类型别名&#xff0c;用来简化或复用复杂联合类型的时候使用。同时也了解到 为对象定义约束接口类型 的时候所使用的是 Interfaces。 其实对于前面&#…