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.mzph.cn/news/19659.shtml

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

相关文章

JVM的组件、自动垃圾回收的工作原理、分代垃圾回收过程、可用的垃圾回收器类型

详细画的图片 https://www.processon.com/diagraming/64c8aa11c07d99075d934311 官方网址 https://www.oracle.com/webfolder/technetwork/tutorials/obe/java/gc01/index.html 相关概念 年轻代是所有新对象被分配和老化的地方。当年轻代填满时&#xff0c;这会导致minor …

Rust dyn - 动态分发 trait 对象

dyn - 动态分发 trait 对象 dyn是关键字&#xff0c;用于指示一个类型是动态分发&#xff08;dynamic dispatch&#xff09;&#xff0c;也就是说&#xff0c;它是通过trait object实现的。这意味着这个类型在编译期间不确定&#xff0c;只有在运行时才能确定。 practice tr…

《Spring Boot源码解读与原理分析》书籍推荐

Spring Boot 1.0.0 早在2014年就已经发布&#xff0c;只不过到了提倡“降本增效”的今天&#xff0c;Spring Boot才引起了越来越多企业的关注。Spring Boot是目前Java EE开发中颇受欢迎的框架之一。依托于底层Spring Framework的基础支撑&#xff0c;以及完善强大的特性设计&am…

设计模式之中介者模式

中介者模式 用一个中介对象来封装一系列的对象交互。中介者使得各对象不需要显示地相互引用&#xff0c;从而使其耦合松散&#xff0c;而且可以独立地改变他们之间的交互。 电脑主板的功能就类似于一个中介者 经典中介者模式UML 例子 经典的中介者模式 package com.tao.Ya…

Excel快捷键F1-F9详解:掌握实用快捷操作,提升工作效率

Excel是广泛应用于办公场景的优质电子表格软件&#xff0c;然而&#xff0c;许多人只是使用鼠标点击菜单和工具栏来完成操作&#xff0c;而忽略了快捷键的威力。在本文中&#xff0c;我们将详解Excel中的F1-F9快捷键&#xff0c;帮助您掌握实用的快捷操作&#xff0c;提升工作效…

leetcode(力扣)剑指 Offer 16. 数值的整数次方 (快速幂)

文章目录 题目描述思路分析完整代码 题目描述 实现 pow(x, n) &#xff0c;即计算 x 的 n 次幂函数&#xff08;即&#xff0c;xn&#xff09;。不得使用库函数&#xff0c;同时不需要考虑大数问题。 示例 1&#xff1a; 输入&#xff1a;x 2.00000, n 10 输出&#xff1a;10…

通向架构师的道路之Apache整合Tomcat

一、先从J2EE工程的通用架构说起 这是一个通用的Web即B/S工程的架构&#xff0c;它由&#xff1a; Web Server App Server DB Server 三大部分组成&#xff0c;其中&#xff1a; Web Server 置于企业防火墙外&#xff0c;这个防火墙&#xff0c;大家可以认为是…

c语言(函数)

目录 何为函数 库函数 自定义函数 二分查找数组下标 链式访问 函数的声明 函数定义 递归 正向打印数字 打印字符个数 使用临时变量 递归(不使用临时变量) n的阶乘 一般形式 递归 斐波那契数 递归 正常做法 何为函数 在计算机科学中&#xff0c;子程序是一个…

单片机外部晶振故障后自动切换内部晶振——以STM32为例

单片机外部晶振故障后自动切换内部晶振——以STM32为例 作者日期版本说明Dog Tao2023.08.02V1.0发布初始版本 文章目录 单片机外部晶振故障后自动切换内部晶振——以STM32为例背景外部晶振与内部振荡器STM32F103时钟系统STM32F407时钟系统 代码实现系统时钟设置流程时钟源检测…

spring AOP学习

概念 面向切面编程横向扩展动态代理 相关术语 动态代理 spring在运行期&#xff0c;生成动态代理对象&#xff0c;不需要特殊的编译器 Spring AOP的底层就是通过JDK动态代理或者CGLIb动态代理技术为目标Bean执行横向织入 目标对象实现了接口&#xff0c;spring使用JDK的ja…

Redis 集群 (cluster)

是什么 官网&#xff1a;Redis cluster specification | Redis 由于数据量过大&#xff0c;单个Master复制集难以承担&#xff0c;因此需要对多个复制集进行集群&#xff0c;形成水平扩展每个复制集只负责存储整个数据集的一部分&#xff0c;这就是Redis的集群&#xff0c;其作…

【机器学习】西瓜书习题3.5Python编程实现线性判别分析,并给出西瓜数据集 3.0α上的结果

参考代码 结合自己的理解&#xff0c;添加注释。 代码 导入相关的库 import numpy as np import pandas as pd import matplotlib from matplotlib import pyplot as plt导入数据&#xff0c;进行数据处理和特征工程 得到数据集 D { ( x i , y i ) } i 1 m , y i ∈ { 0 ,…

VR 变电站事故追忆反演——正泰电力携手图扑

VR(Virtual Reality&#xff0c;虚拟现实)技术作为近年来快速发展的一项新技术&#xff0c;具有广泛的应用前景&#xff0c;支持融合人工智能、机器学习、大数据等技术&#xff0c;实现更加智能化、个性化的应用。在电力能源领域&#xff0c;VR 技术在高性能计算机和专有设备支…

【机器学习】处理样本不平衡的问题

文章目录 样本不均衡的概念及影响样本不均衡的解决方法样本层面欠采样 &#xff08;undersampling&#xff09;过采样数据增强 损失函数层面模型层面采样集成学习 决策及评估指标 样本不均衡的概念及影响 机器学习中&#xff0c;样本不均衡问题经常遇到&#xff0c;比如在金融…

uniapp运行项目到iOS基座

2022年9月&#xff0c;因收到苹果公司警告&#xff0c;目前开发者已无法在iOS真机设备使用未签名的标准基座&#xff0c;所以现在要运行到 IOS &#xff0c;也需要进行签名。 Windows系统&#xff0c;HBuilderX 3.6.20以下版本&#xff0c;无法像MacOSX那样对标准基座进行签名…

选读SQL经典实例笔记16_逻辑否定

1. 示例数据 1.1. student insert into student values (1,AARON,20) insert into student values (2,CHUCK,21) insert into student values (3,DOUG,20) insert into student values (4,MAGGIE,19) insert into student values (5,STEVE,22) insert into student values (6…

伯俊ERP和金蝶云星空单据接口对接

伯俊ERP和金蝶云星空单据接口对接 对接源平台:金蝶云星空 金蝶K/3Cloud在总结百万家客户管理最佳实践的基础上&#xff0c;提供了标准的管理模式&#xff1b;通过标准的业务架构&#xff1a;多会计准则、多币别、多地点、多组织、多税制应用框架等&#xff0c;有效支持企业的运…

jenkins gitlab多分支构建发布

内容背景介绍 这个是新手教程,普及概念为主 公司现在还使用单分支发布测试环境和生产,多人协同开发同一个项目导致测试环境占用等待等情况 测试环境占用等待问题 测试环境代码直接合并到 master,容易导致误发布到生产的情况 避免多版本同时发布测试不完善的情况出现 中间件…

以CS32F031为例浅说国产32位MCU的内核处理器

芯片内核又称CPU内核&#xff0c;它是CPU中间的核心芯片&#xff0c;是CPU最重要的组成部分。由单晶硅制成&#xff0c;CPU所有的计算、接受/存储命令、处理数据都由核心执行。各种CPU核心都具有固定的逻辑结构&#xff0c;一级缓存、二级缓存、执行单元、指令级单元和总线接口…

django bootstrap html实现左右布局,带折叠按钮,左侧可折叠隐藏

一、实现的效果 在django项目中,需要使用bootstrap 实现一个左右分布的布局,左侧区域可以折叠隐藏起来,使得右侧的显示区域变大。(为了区分区域,左右加了配色,不好看的修改颜色即可) 点击折叠按钮,左侧区域隐藏,右侧区域铺满: 二、实现思路 1、使用col-md属性,让左…