Jenkins:部署JEE工件

随着持续集成持续交付的出现 ,我们的构建被分为不同的步骤,以创建部署管道。 这些步骤中的一些步骤可以是例如编译和运行快速测试,运行慢速测试,运行自动验收测试或发布应用程序等。

部署流程的最后一步意味着将我们的产品(如果是JEE项目,则是战争耳朵 )部署到类似生产的环境,用于UAT或在产品发布时部署到生产系统。
在本文中,我们将了解如何配置Jenkins来正确管理Java Enterprise Application的部署。

要做的就是创建应用程序,在这种情况下,在Java中一个非常简单的Web应用程序的第一件事情(其实只有一个JSP它打印一个Hello World!消息)和mavenize它来创建一个war文件(bar.war)时, 目标已执行。

然后,我们需要创建一个Jenkins作业(称为bar-web ),该作业负责编译和运行单元测试。

完成此工作后,将进行其他工作,例如运行集成测试,运行更多测试,静态代码分析(即代码质量)或将工件上传到工件存储库,但此处不会显示。
最后,最后一步意味着将先前生成的代码部署到暂存环境(例如,用于运行用户验收测试 ),并在关键用户同意后将其部署到生产环境。
因此,让我们看看如何在Jenkins中创建这些最终步骤。 请注意,在所有这些步骤中必须使用在先前步骤中创建的二进制文件(在本例中为bar-web )。 这是由于两个原因,第一个原因是您的部署管道应尽可能快地运行,并且显然在每个步骤中编译代码并不是获得代码的最佳方法,第二个原因是每次您编译源代码时,增加了不被编译为先前步骤的来源的机会。 为了实现此目标,我们可以遵循两种策略,第一种是将二进制文件上传到工件存储库(例如NexusArtifactory ),然后在每个作业中从那里获取。 第二个是使用复制工件 Jenkins插件来获取上一步生成的二进制文件。

让我们看看如何为第一种方法配置Jenkins

使用工件存储库方法,要求您从存储库下载我们要部署的版本,然后将其部署到外部环境; 在我们的案例中,部署到Web服务器。 所有这些步骤都是通过使用maven-cargo-plugin完成的

<build><plugins><plugin><groupId>org.codehaus.cargo<groupId><artifactId>cargo-maven2-plugin<artifactId><version>1.0<version><!-- Container configuration --><container><containerId>tomcat6x<containerId><type>remote<type><container><configuration>          <type>runtime<type><properties><cargo.remote.username>admin<cargo.remote.username><cargo.remote.password><cargo.remote.password><cargo.tomcat.manager.url>http:localhost:8888manager<cargo.tomcat.manager.url><properties><configuration><deployer><deployables><deployable><groupId>com.lordofthejars.bar<groupId><artifactId>bar-web<artifactId><type>war<type><deployable><deployables><deployer><plugin><plugins><build><dependencies><dependency><groupId>com.lordofthejars.bar<groupId><artifactId>bar-web<artifactId><type>war<type><version>${target.version}<version><dependency><dependencies>

然后,我们只需要创建一个名为bar-to-staging的新Jenkins作业即可运行cargo:redeploy Maven目标,而Cargo插件将负责将bar-web部署到Web服务器。

这种方法有一个优点和一个缺点。 主要优点是您不必局限于Jenkins ,可以单独使用Maven ,也可以使用任何其他支持Maven的 CI 。 主要缺点是依赖于artefacts存储库,并且此计划是一个新问题,部署管道涉及许多步骤,并且在这些步骤之间(通常,如果您正在构建快照版本),可以将新的artefact上传到具有相同版本的artefacts存储库,并在管道执行过程中使用它。 当然,可以通过在人工制品存储库中管理权限来避免这种情况。

另一种方法是使用Jenkins插件,称为copy-artifact-plugin 。 在这种情况下, 詹金斯(Jenkins)充当人工制品存储库,因此在下一步中使用在上一步中创建的工件,而无需涉及任何外部存储库。 使用这种方法,我们不能使用maven-cargo-plugin ,但是可以将deploy-jenkins-plugincopy-artifacts-plugin结合使用。

因此,让我们看看如何实现这种方法。

首先是创建一个Jenkins 构建作业bar-web ),该作业将创建war文件。 请注意,定义了两个构建后操作 ,第一个是Archive the artifacts ,用于存储生成的文件,因此复制工件插件可以将它们复制到另一个工作空间。 另一个是“ 构建其他项目” ,在这种情况下,该项目调用一个作业,该作业负责将war文件部署到登台目录( bar deploy-to-staging )。

接下来是创建栏从部署到分段构建作业,其主要操作是将先前构建作业生成的war文件部署到Tomcat服务器。

对于第二个构建作业,您应该配置复制工件插件以将以前生成的文件复制到当前工作空间,因此在“ 构建”部分的“ 从另一个项目复制工件”部分中,我们设置了要从哪个复制作业复制工件(在本例中) bar-web )以及我们要复制的工件。 最后,在“构建后操作”部分中 ,我们必须配置应将哪个文件部署到Tomcatbar.web ),请记住该文件是以前的构建作业所编译和打包的,最后设置了Tomcat参数。 执行管道如下所示:

请注意,已添加了第三个构建作业 ,该作业war文件部署到生产服务器。

第二种方法是第一种方法的对立部分,您可以确保在管道的上一步中使用的伪像将在所有步骤中使用,但是您必须遵守Jenkins / Hudson的规定

因此,如果您要在人工制品存储库中创建策略,以便只有管道执行程序可以将人工制品上载到存储库,则第一种方法更好,但是如果您不使用外部人工制品存储库(按原样使用Jenkins ),则第二种方法是最好的方法是确保先前步骤中包装的人工制品不会被并行步骤修改。

将文件部署到服务器后,可以毫无问题地执行验收测试或UAT测试。

我希望现在我们可以安全,更好地解决部署流程的最后步骤。

参考:在One Jar to Rulem All博客中,我们的JCG合作伙伴 Alex Soto 与Jenkins一起部署JEE工件 。


翻译自: https://www.javacodegeeks.com/2012/09/jenkins-deploying-jee-artifacts.html

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

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

相关文章

seafile 部署_Seafile开启webdav及读写性能测试

为什么要在seafile搞webdavSeafile 一直是一款可靠的文件同步web应用&#xff0c;经过个人测试&#xff0c;同一台机器上&#xff0c;seafile在传输文件时的速度比nextcloud要快&#xff08;可能也与php的设置有关系&#xff09;&#xff0c;这是seafile的优势。但是&#xff0…

Python--校园网爬虫记

查成绩&#xff0c;算分数&#xff0c;每年的综合测评都是个固定的过程&#xff0c;作为软件开发者&#xff0c;这些过程当然可以交给代码去做&#xff0c;通过脚本进行网络请求获取数据&#xff0c;然后直接进行计算得到基础分直接填表就好了&#xff0c;查成绩再手动计算既容…

Spring–添加SpringMVC –第1部分

欢迎来到本教程的第四部分。 在这一部分中&#xff0c;我们将使用Spring MVC编写控制器和视图&#xff0c;并考虑我们的REST模型。 我们必须做的第一件事&#xff0c;就是根据目前的情况制作一个Web应用程序。 我们将web / WEB-INF文件夹添加到我们的项目根目录。 在WEB-INF内创…

access month函数用法_学会了这7个EXCEL日期函数技巧,老板再让你加班,你找我!...

日期函数&#xff0c;常用年月日&#xff0c;时分秒&#xff0c;星期&#xff0c;季度&#xff0c;求差值等&#xff0c;学会以下几个函数&#xff0c;老板再让你加班&#xff0c;你找我&#xff01;1、记录当前时间(不随系统时间变化)NOW()函数与数据有效性结合&#xff0c;记…

meta 的作用 搜集

Meta标签中的format-detection属性及含义 format-detection翻译成中文的意思是“格式检测”&#xff0c;顾名思义&#xff0c;它是用来检测html里的一些格式的&#xff0c;那关于meta的format-detection属性主要是有以下几个设置&#xff1a;<meta name"format-detecti…

ThinkPHP 3.2.x 集成极光推送指北

3.2版本已经过了维护生命周期&#xff0c;官方已经不再维护&#xff0c;请及时更新至5.0版本 —— ThinkPHP 官方仓库 以上&#xff0c;如果有条件&#xff0c;请关闭这个页面&#xff0c;然后升级至 ThinkPHP 5&#xff0c;如果由于各种各样的原因无法升级至 TP 5 &#xff0c…

Java多线程——不变性与安全发布

1、不变性 某个对象在被创建后其状态就不能被修改&#xff0c;那么这个对象就称为不可变对象&#xff0c;不可变对象一定是线程安全的。不可变对象很简单。他们只有一种状态&#xff0c;并且该状态由构造函数来控制。 当满足以下条件时&#xff0c;对象才是不可变的&#xff1a…

中tr不能显示字符_垃圾文本识别中基本操作指南和错误总结,第三部分

创建模型需要用到机器学习的库&#xff0c;所以我们先下载sklearn库sklearn库下载完成后再输入库文件&#xff0c;就可以完美运行。然后就是划分测试集和训练集&#xff0c;需要注意的是&#xff0c;在从数据处理函数中导入数据时&#xff0c;足足运行了有将近30多秒&#xff0…

(转载)20分钟读懂程序集

转自&#xff1a;http://www.cnblogs.com/damonlan/p/3221347.html 说到程序集&#xff0c;我刚开始对这个名词特别的郁闷&#xff01;~。然后 前些天花了些时间 好好读了一下&#xff0c;现在比较清晰了&#xff0c;把一些书上看到的 记下来&#xff0c;以飨读者。希望没浪费你…

大数据胸_喂母乳会导致胸下垂?!你被这个谣言骗了多少年?

很多人认为&#xff0c;给宝宝喂奶会导致胸下垂。有些爱美的妈妈&#xff0c;甚至在宝宝出生6个月后就着急断奶。那么&#xff0c;喂奶真的会导致胸下垂么&#xff1f;给大家讲两个真实的调查结果哈~2004年的一次针对496名新妈妈的调查结果显示&#xff0c;有75%的母乳喂养母亲…

自制ACL+DHCP实验(初版)

&#xff08;实验用gns模拟器&#xff09; ACL 实验拓扑&#xff1a; 实验要求&#xff1a; 1.1.1.1→3.3.3.3 不通 11.11.11.11→3.3.3.3 通 2.2.2.2→3.3.3.3 通 实验步骤&#xff1a; 步骤一&#xff1a;基本配置 R1&#xff1a; R1#conf t R1(config)#int lo0 R1(config-if…

pil 图像最大值_第97天:图像库 PIL(二)

上节我们讲了 Python 的图像处理库 PIL 的基本图像处理功能&#xff0c;打开了 PIL 的神秘面纱。这节我们接着讲 PIL 的 Image 模块的常用方法。Image 模块的方法convertImage.convert(modeNone, matrixNone, ditherNone, palette0, colors256)参数说明&#xff1a;mode&#x…

c#的委托用法delegate

转载于:https://www.cnblogs.com/douzujun/p/6555886.html

np读取csv文件_被 Pandas read_csv 坑了

-- 不怕前路坎坷&#xff0c;只怕从一开始就走错了方向Pandas 是python的一个数据分析包&#xff0c;纳入了大量库和一些标准的数据模型&#xff0c;提供了高效地操作大型数据集所需的工具。Pandas 就是为解决数据分析任务生的&#xff0c;无论是数据分析还是机器学习项目数据预…

铃木uy125摩托车机油_UY125 新瑞梦UM125发布 济南铃木于湖南株洲吹响国IV集结号...

​4月18日&#xff0c;济南铃木在湖南株洲天台开元酒店举行了2019年新品发布会&#xff0c;并于现场发布了两款极具终端战略意义的新款国IV车型&#xff0c;分别为定位“实用运动”的全新个性化踏板车型UY125&#xff0c;以及能够进一步巩固济南铃木在国IV入门级踏板车型领域绝…

js判断时间是早上还是下午_牛奶早上喝好,还是晚上喝好?没想到“最佳时间”是这个点,颠覆了!...

都说喝牛奶好&#xff0c;要多喝。可什么时间喝牛奶最好呢&#xff1f;是饭前、饭后还是睡前&#xff1f;又或者喝酒前&#xff1f;确实得好好说说。传言&#xff1a;空腹时身体比较缺能量&#xff0c;牛奶里的蛋白会去提供能量&#xff0c;不会去构成和修复组织(比如修复皮肤)…

Python TK编程第一部分 Hello Again

当你想写大一点的程序的时候&#xff0c;将你的代码封装到一个或者多个类里会是一个不错的办法。下面hello world这个例子来自Matt Conway的Tkinter Life Preserver. [python]view plain copy from Tkinter import * class App: def __init__(self, master): …

视网膜脱离oct报告图_刚刚,爱尔眼科发布关于艾芬医生诊疗过程的核查报告

刚刚&#xff0c;爱尔眼科医院集团发布关于艾芬女士诊疗过程的核查报告&#xff0c;内容如下&#xff1a;得悉艾芬女士对武汉爱尔眼科医院白内障诊疗存疑&#xff0c;爱尔眼科医院集团高度重视&#xff0c;第一时间成立了工作组奔赴武汉&#xff0c;对事件的诊疗全过程开展了核…

20145233《网络对抗》第二周 后门原理与实践

20145233《网络对抗》第二周 后门原理与实践 实验内容 windows主机与kali虚拟机实现互联互通使用netcat获取主机操作Shell&#xff0c;cron启动使用socat获取主机操作Shell, 任务计划启动使用MSF meterpreter生成可执行文件&#xff0c;利用ncat或socat传送到主机并运行获取主机…

Spring 3.1:缓存和EhCache

如果在网上查找使用Spring 3.1内置缓存的示例&#xff0c;那么通常会碰到Spring的SimpleCacheManager &#xff0c;Spring的家伙说这对“用于测试或简单的缓存声明很有用”。 实际上&#xff0c;我更喜欢将SimpleCacheManager看作是轻量级的&#xff0c;而不是简单的。 在您希望…