玩了一下 Jenkins,最新版本 + JDK11

背景

今年五月的时候玩了一下 Jenkins,最新版本 2.414.3 ,JDK 11 。本机有两个 JDK,只放到 Tomcat 里面了,看到了一个启动页面,后面有其他事情就忘记了。最近又想起来,觉得还是应该玩一下这么有技术含量的东西的。它能自动拉取代码,自动发布,比 maven 的 wagon-plugin 插件高级多了。

本文记录笔者利用 jenkins 和 maven 的 wagon-plugin 插件组合实现一个 Shell 自动部署的任务,距离解放双手,又前进了一步。

部署包准备

各组件版本信息及解压处理方法:

  1. JDK-11:tar.gz ,直接解压,目标主机上是JDK1.8。
  2. maven-3.6.2:tar.gz ,直接解压,bin 目录添加到环境变量。
  3. node-12.22:tar.gz ,直接解压,bin 目录添加到环境变量,因为 18以后的高版本对 gcc 有要求,所以选择一个低版本。这个组件主要是用来对前端模块进行编译的,对于前后台分离的应用来说是必须的。
  4. tomcat-9.0.82:修改启动脚本 catalina.sh 前面几行,添加环境变量配置:export JAVA_HOME="/Library/Java/JavaVirtualMachines/jdk-11.jdk"。
  5. jenkins-2.414.3.war:最新版本,移动到 tomcat-9.0.82 的 webapps 目录下。

启动 Tomcat

进入 tomcat 目录启动 Tomcat,启动过程中碰到一个异常:
在这里插入图片描述
解决办法:参考 该文 修改 tomcat/conf/contex.xml 文件,在 context 节点下添加一行 :

<Resources cachingAllowed="true" cacheMaxSize="100000" />

初始化 jenkins

在浏览器输入 jenkins 访问路径,首次访问时要求输入 jenkins 的默认密码,对着tomcat 的 catalina.out 日志去找密码拷贝输入就可以了。初始化选择安装推荐的插件,等待插件完成:
在这里插入图片描述
部署的目标主机插件安装过程很快,不像我本机安装的时候,推荐插件只安装成功了几个其他全失败了。

安装完成后需要创建一个帐号,按照提示输入就可以了。默认安装的推荐插件中有一个本地化简体中文插件的,完成后访问 jenkins 页面上有些菜单就是中文了。但是它汉化得不完整,还是夹杂着几个英文菜单的。

到这里,Jenkins 就部署完成了,主界面长这样:
在这里插入图片描述

全局配置

需要为 Jenkins 添加一下配置,如 JDK【可以添加多个,创建任务的时候再选择】、maven

「Manage Jenkins 」菜单是管理页面,它没被汉化,主要管理插件、系统配置、全局配置等,例如:【只截取了一个屏】
在这里插入图片描述
点击 Tools 菜单,配置基本的工具,依次指定 maven 的配置文件,JDK HOME 路径、MAVEN 安装路径等。

再点击 Plugin 菜单,安装 SVN 插件。

这样,基本的准备工作就完成了。

创建任务

点击主界面的 「新建 Item」进入任务创建页面:
在这里插入图片描述
选择 「Freestyle project」类型,点击“确定”,就可以进入任务配置页面了,配置项主要有:

  1. JDK【如果配置了多个 JDK ,才会出现该选项】,因为 1.8 的 rt.jar 中有很多工具类,高版本里面没有,所以最好配置一个 1.8 的 JDK,JDK 11 只是为 Tomcat 启动 jenkins 服务的。
  2. 源码管理:选择 SVN ,配置 SVN 路径,添加凭证。
  3. 构建触发器:可以选择定时器或者轮训源码变更定时器。
  4. 构建环境:可以勾选构建失败的判断条件,指定超时时间,需要考虑应用构建时间,如果设置过短,可能会导致任务构建过程中被终止。
  5. Build Steps:可以选择 Shell 方式,编写 Shell 脚本完成构建。
  6. 构建后的操作:没有就不配置。

逐个添加配置,我这里基于 SpringBoot 的多模块的微服务项目,并且配置了 wagon-plugin 插件的应用,编写了一个自动化构建脚本。

自动部署脚本

#不允许 Jenkins 杀死当前脚本进程
BUILD_ID=DONTKILLME#定义代码根路径
codePath=$WORKSPACE/myCode
echo code path is $codePath#进入代码根路径对整个模块打包
cd $codePath
mvn clean package#定义模块列表数组
moduleList=(a b c d e f)#遍历数组:逐个执行自动部署命令,${#moduleList[@]}获取数组的长度
for((i=0;i<${#moduleList[@]};i++)) docd $codePath/${moduleList[i]}mvn wagon:upload-single wagon:sshexec -X
done

点击 Build Now 执行任务,查看任务构建结果,模块过多的话,上述脚本执行很慢,等待其执行完成,成功的话,是绿色的。

启示录

这个过程中,遇到的阻碍就是版本和 JDK 版本的问题,还有一个就是初始化过程中的推荐插件的安装,几乎都不成功。以为必须都安装成功,才能使用,其实并不需要。传统应用开发,都是人工操作,几乎都用不上这些自动化运维的工具。说实话,搞这一套环境,还是挺不错的!

另外,Jenkins 的任务类型四种:

  1. 本文用的 FreeStyleProject
  2. External Project
  3. 多配置的项目
  4. 文件夹项目:类似任务分组。

但是 ExternalProject 几乎没有配置信息,它能干甚呢?
在这里插入图片描述

第三种「多配置项目」,它和自由项目多了一个配置矩阵,但是配置矩阵到底怎么使用?部署脚本中的脚本内容,并没有执行。

本文只用了 Jenkins 的最基本的简单用法,还有一些高级 Pipeline 、多环境配置等高级用法,并不是我们看到的这个简单的页面,用户文档:

  1. https://www.jenkins.io/doc/book/blueocean/getting-started/
  2. https://www.jenkins.io/zh/doc/tutorials/build-a-multibranch-pipeline-project/

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

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

相关文章

PTA 函数题(C语言)-- 阶乘计算升级版

题目title&#xff1a; 阶乘计算升级版 题目作者&#xff1a; 陈越 浙江大学 本题要求实现一个打印非负整数阶乘的函数。 函数接口定义&#xff1a; void Print_Factorial ( const int N ); 其中N是用户传入的参数&#xff0c;其值不超过1000。如果N是非负整数&#…

数据结构和算法——用C语言实现所有图状结构及相关算法

文章目录 前言图的基本概念图的存储方式邻接矩阵邻接表十字链表临界多重表 图的遍历最小生成树普里姆算法&#xff08;Prim&#xff09;克鲁斯卡尔算法&#xff08;Kruskal&#xff09; 最短路径BFS求最短路径迪杰斯特拉算法&#xff08;Dijkstra&#xff09;弗洛伊德算法&…

chorme安装esay scholar及chrome 无法从该网站添加应用、扩展程序和用户脚本解决方案

问题描述 如题&#xff0c;博主想安装easy scholar用于查询论文的分区&#xff0c;结果安装了半天一直出现chrome 无法从该网站添加应用、扩展程序和用户脚本解决方案的问题。 解决方案 先从这个网址下载&#xff1a;https://www.easyscholar.cc/download 然后对下载好的文…

MFC网络通信-Udp服务端

目录 1、UI的布局 2、代码的实现&#xff1a; &#xff08;1&#xff09;、自定义的子类CServerSocket &#xff08;2&#xff09;、重写OnReceive事件 &#xff08;3&#xff09;、在CUdpServerDlg类中处理 &#xff08;4&#xff09;、在OnInitDialog函数中 &#xff0…

图解Kafka高性能之谜(五)

高性能的多分区、冗余副本集群架构 高性能网络模型NIO 简单架构设计&#xff1a; 详细架构设计&#xff1a; 高性能的磁盘写技术 高性能的消息查找设计 索引文件定位使用跳表的设计 偏移量定位消息时使用稀疏索引&#xff1a; 高响应的磁盘拷贝技术 kafka采用sendFile()的…

Qwt QwtPolarPlot类使用

1.概述 QwtPolarPlot是Qwt库中用于绘制极坐标图的类。它继承自QwtPolarItemDict和QFrame类&#xff0c;并且可以作为QwtPlot控件的一部分使用。 以下是类的继承关系图&#xff1a; 2.常用方法 设置标签&#xff1a; void setTitle (const QString &)void setTitle (con…

MFC网络编程-Udp客户端

目录 1、UI的设计&#xff1a; 2、代码的实现&#xff1a; &#xff08;1&#xff09;、重写CSocket虚函数OnReceive&#xff0c;并且传入对话框的指针 &#xff08;2&#xff09;、初始化SOCKET &#xff08;3&#xff09;、绑定本地IP和端口 &#xff08;4&#xff09;、…

LabVIEW开发双目立体系统猪重估算

LabVIEW开发双目立体系统猪重估算 动物的活重是各种研究中的重要参考&#xff0c;例如动物生长&#xff0c;饲料转化率&#xff0c;健康状况和疾病发生。生长中的动物的体重为保持它们处于适当的营养和环境水平提供了一个有价值的参数或指标。动物的利润通常与收入和成本之间的…

LCD驱动程序——Framebuffer应用编程

1.LCD 操作原理 在 Linux 系统中通过 Framebuffer 驱动程序来控制 LCD。Frame 是帧的意思&#xff0c;buffer 是缓冲的意思&#xff0c;这意味着 Framebuffer 就是一块内存&#xff0c;里面保存着一帧图像。Framebuffer 中保存着一帧图像的每一个像素颜色值&#xff0c;假设 L…

程序环境和预处理

目录 1. 程序的翻译环境和执行环境 2. C语言程序的编译链接 2.1. 预处理 2.2. 编译 2.3. 汇编 2.4. 链接 3. 运行环境的简单介绍 4. 预定义符号介绍 5. 预处理指令 #define 5.1. #define定义标识符 5.2. #define定义宏 5.3. #define替换规则 6. 宏和函数的对比 1. …

带你从0开始学习自动化框架Airtest

现在市面上做UI自动化的框架很多&#xff0c;包括我们常用的Web自动化框架Selenium&#xff0c;移动端自动化框架Appium。 虽然Selenium和Appium分属同源&#xff0c;而且API都有很多相同的地方&#xff0c;可以无损耗切换&#xff0c;但是还是需要引入不同的库&#xff0c;而…

Debug技巧-不启用前端访问后端

在日常开发中&#xff0c;我们经常会遇到各种问题需要调试&#xff0c;前后端都启动需要耗费一定的时间和内存&#xff0c;方便起见&#xff0c;可以直接用抓包数据访问后端&#xff0c;这里我们需要用到Postman或者ApiFox 抓包数据 在系统前台触发后端请求&#xff0c;在控制…

【MATLAB第81期】基于MATLAB的LSTM长短期记忆网络预测模型时间滞后解决思路(更新中)

【MATLAB第81期】基于MATLAB的LSTM长短期记忆网络预测模型时间滞后解决思路&#xff08;更新中&#xff09; 在LSTM预测过程中&#xff0c;极易出现时间滞后&#xff0c;类似于下图&#xff0c;与一个以上的样本点结果错位&#xff0c;产生滞后的效果。 在建模过程中&#xf…

负载均衡深度解析:算法、策略与Nginx实践

引言 如今&#xff0c;网站和应用服务面临着巨大的访问流量&#xff0c;如何高效、稳定地处理这些流量成为了一个亟待解决的问题。负载均衡技术因此应运而生&#xff0c;它通过将流量合理分配到多个服务器上&#xff0c;不仅优化了资源的利用率&#xff0c;还大大提升了系统的…

服务器数据恢复—EMC存储pool上数据卷被误删的数据恢复案例

服务器数据恢复环境&#xff1a; EMC Unity某型号存储&#xff0c;连接了2台硬盘柜。2台硬盘柜上创建2组互相独立的POOL&#xff0c;2组POOL共有21块520字节硬盘。21块硬盘组建了2组RAID6&#xff0c;1号RAID6有11块硬盘. 2号RAID6有10块硬盘。 服务器故障&检测&#xff1…

[ACTF2023]复现

MDH 源题&#xff1a; from hashlib import sha256 from secret import flagr 128 c 96 p 308955606868885551120230861462612873078105583047156930179459717798715109629 Fp GF(p)def gen():a1 random_matrix(Fp, r, c)a2 random_matrix(Fp, r, c)A a1 * a2.Treturn…

Vue入门——核心知识点

简介 Vue是一套用于构建用户界面的渐进式JS框架。 构建用户界面&#xff1a;就是将后端返回来的数据以不同的形式(例如&#xff1a;列表、按钮等)显示在界面上。渐进式&#xff1a;就是可以按需加载各种库。简单的应用只需要一个核心库即可&#xff0c;复杂的应用可以按照需求…

AR的光学原理?

AR智能眼镜的光学成像系统 AR眼镜的光学成像系统由微型显示屏和光学镜片组成&#xff0c;可以将其理解为智能手机的屏幕。 增强现实&#xff0c;从本质上说&#xff0c;是将设备生成的影像与现实世界进行叠加融合。这种技术基本就是通过光学镜片组件对微型显示屏幕发出的光线…

[Machine Learning][Part 7]神经网络的基本组成结构

这里我们将探索神经元/单元和层的内部工作原理。特别是,与之前学习的回归/线性模型和逻辑模型进行比较。最后接介绍tensorflow以及如何利用tensorflow来实现这些模型。 神经网络和大脑的神经元工作原理类似&#xff0c;但是比大脑的工作原理要简单的多。大脑中神经元的工作原理…

python自动化测试(九):EcShop添加商品功能

前置条件&#xff1a; 本地部署&#xff1a;ECShop的版本是3.0.0、Google版本是 Google Chrome65.0.3325.162 (正式版本) &#xff08;32 位&#xff09; py的selenium版本是3.11.0 目录 一、前置代码 二、添加商品操作 2.1 点击添加商品 2.2 添加名称、分类、品牌 2…