在Window上使用Jenkins自动发布Java工件

这篇文章将展示如何使用Jenkins Continuous Integration自动执行Java Web应用程序(使用MYSQL DB和基于Hibernate ORM在基于REST的Jersey2 Spring环境中开发的学生申请应用程序)的发布过程-上载发布工件到发布存储库。 如上一篇文章在Windows上使用Jenkins自动执行快照Java工件的部署和上载中所述,仅在将快照工件上载到快照存储库中之后,才能运行使用本文配置的作业。 链接中的“ 使用Jersey REST和Spring一起构建Java Web应用程序”给出的更早的文章中介绍了实际应用程序的详细信息。

1.为Github生成SSH密钥(无密码)

Jenkins不支持SSH密钥的密码短语,因此无需密码即可生成Gihub帐户的SSH密钥。 请按照“ 生成SSH密钥”下给出的说明进行操作,生成不包含密码的SSH密钥 ,然后上传到Github帐户。

2.强制Jenkins使用SSH密钥以用户身份运行

在Windows上,Jenkins使用其运行用户身份的SSH密钥,该密钥位于C:\ Users <用户名> .ssh下。 因此,Jenkins必须以具有“用户名”的用户身份运行。

在命令提示符下键入“ services.msc”以打开“服务管理”。 右键单击Jenkins服务,然后选择“属性”。

jenkins服务属性

在“ Jenkins属性”窗口中,导航到“登录”选项卡。 选择以“此帐户”身份登录,输入该帐户的详细信息(使用“浏览”选项来选择/检查该帐户的名称),然后单击“确定”。 帐户凭据通常将与Windows的登录帐户匹配,如下面的快照所示。

詹金斯登录

保存更改后,通过右键单击Jenkins服务并从“服务管理”重新启动Jenkins服务,然后选择“重新启动”,如下所示

詹金斯服务重启

3.安装插件

在Jenkins仪表板上,导航到Manage Jenkins –> Manage Plugins,如下面的快照所示。

jenkins-manageplugins

安装以下插件,然后重新启动Jenkins,以使更改生效。

  • Jenkins版本插件(用于Maven版本)

4.配置系统

在Jenkins仪表板上,导航到Manage Jenkins –> Configure System,如下面的快照所示。

詹金斯配置系统

进入“ Maven版本插件”部分。 启用Nexus-Pro支持,输入Nexus URL,Nexus用户凭据并保存更改。

詹金斯-亲

5.创建一个新的詹金斯工作

在Jenkins仪表板上,单击“新作业”以创建新作业。 输入作业的名称,然后选择“ Build a maven2 / 3 project”作为选项,然后单击OK,如下所示。

詹金斯新工作

在“新作业配置”屏幕上,进入“源代码管理”部分,并为项目指定Git存储库URL,如下所示。 在“其他行为”部分,单击“添加”,然后选择“签出到特定的本地分支机构”。 输入分支名称为master,然后保存更改。

jenkins-源代码mgmt-发布

进入“构建环境”部分,启用“ Maven Release Build”选项并输入发布目标。

jenkins-maven-releasebuild

进入“构建”部分,输入构建快照的maven目标,如下所示,然后保存更改。

詹金斯建立

进入“构建设置”部分。 选择“电子邮件通知”选项,然后输入电子邮件收件人的值,如下所示。 保存更改。

jenkins-电子邮件通知

6.配置settings.xml

为了将构建的Maven工件上载到工件服务器,请使用相同的参数配置C:\ Program Files(x86)\ Jenkins \ tools \ hudson.tasks.Maven_MavenInstallation \ Maven_3.1 \ conf文件夹中的Jenkins settings.xml。如在系统上的Maven安装的默认settings.xml(通常在Windows机器的C:\ Program Files \ Apache Software Foundation \ apache-maven-3.1.0 \ conf下找到)中所找到的。

通常,需要在Maven版本的settings.xml中使用httpHeaders配置用于登台存储库的服务器部分。

<servers><server><id>sonatype-nexus-staging</id><username>username</username><password>password</password><configuration><httpHeaders><property><name>User-Agent</name><value>Maven m2Release (java:${java.vm.version} ${env.BUILD_TAG }</value></property></httpHeaders></configuration></server>
</servers>

此外,型材断面需要进行配置的PGP签名,如何产生与Maven PGP签名的细节可以从节中找到生成密钥对在如何生成PGP签名与Maven

<profiles><profile><id>gpg-release</id><properties><gpg.passphrase>passphrase</gpg.passphrase><gpg.useagent>true</gpg.useagent><gpg.defaultKeyring>false</gpg.defaultKeyring><gpg.homedir>C:/Users/Sara/AppData/Roaming/gnupg</gpg.homedir><gpg.publicKeyring>C:/Users/Sara/AppData/Roaming/gnupg/pubring.gpg</gpg.publicKeyring><gpg.secretKeyring>C:/Users/Sara/AppData/Roaming/gnupg/secring.gpg</gpg.secretKeyring></properties> </profile>
</profiles>

6.更新pom.xml

需要使用build部分下的以下插件来配置项目的pom.xml文件。

  • Maven执行器插件
  • Maven发布插件
<build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-enforcer-plugin</artifactId><version>1.2</version><executions><execution><id>enforce-maven</id><goals><goal>enforce</goal></goals><configuration><rules><requireMavenVersion><version>(,2.1.0),(2.1.0,2.2.0),(2.2.0,)</version><message>Maven 2.1.0 and 2.2.0 produce incorrect GPG signaturesand checksums respectively.</message></requireMavenVersion></rules></configuration></execution></executions></plugin></plugins><pluginManagement><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-release-plugin</artifactId><version>2.4.2</version><configuration><tagBase>https://github.com/elizabetht/StudentEnrollmentWithREST/tags</tagBase><mavenExecutorId>forked-path</mavenExecutorId><useReleaseProfile>false</useReleaseProfile><arguments>-Psonatype-oss-release</arguments></configuration></plugin></plugins></pluginManagement>
</build>

使用maven-gpg-plugin的配置文件部分更新pom.xml

<profiles><profile><id>sign</id><build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-gpg-plugin</artifactId><executions><execution><id>sign-artifacts</id><phase>verify</phase><goals><goal>sign</goal></goals></execution></executions></plugin></plugins></build></profile>
</profiles>

在pom.xml中添加一个分发管理部分,以指定快照和登台存储库URL。

<distributionManagement><repository><id>sonatype-nexus-staging</id><url>https://oss.sonatype.org/service/local/staging/deploy/maven2</url></repository><snapshotRepository><id>sonatype-nexus-snapshots</id><url>https://oss.sonatype.org/content/repositories/snapshots</url></snapshotRepository>
</distributionManagement>

8.立即建立

完成上述配置步骤后,单击Jenkins –> Upload REST Release Artifacts(或相应的Job名称)下的“立即构建”,以根据配置构建项目。

控制台输出中包含有关配置已启动哪些步骤以及整个构建结果的详细日志。 验证构建成功。

9.执行Maven发布

一旦构建成功并将快照上传到快照存储库,请单击Jenkins下的“ Perform Maven Release” –>上载REST发行工件(或相应的作业名称)以开始Maven发行过程。

验证发行版本和下一个开发版本是否正确。 启用“指定自定义SCM注释前缀”以输入自定义SCM注释。 启用“指定自定义SCM标签”以输入自定义SCM标签。 单击Schedule Maven Release Build。

詹金斯执行Maven发布

一旦发布过程成功,登台存储库将与发布工件一起上载。

因此,只需通过Jenkins单击按钮,就可以自动完成将工件向暂存库进行正式发布以及触发向收件人发送电子邮件的整个过程。 然后可以通过关闭(如果它仍处于打开状态)和发布步骤来使用登台存储库,以完成工件的升级。

参考: “ 我的实验与技术”博客中的JCG合作伙伴伊丽莎白·托马斯(Elizabeth Thomas)在Windows上使用Jenkins在Java上自动发布了Java工件 。

翻译自: https://www.javacodegeeks.com/2014/02/automating-the-release-of-java-artifacts-using-jenkins-on-window.html

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

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

相关文章

Python开发【第六篇】:模块

Python开发【第六篇】&#xff1a;模块 模块&#xff0c;用一砣代码实现了某个功能的代码集合。 类似于函数式编程和面向过程编程&#xff0c;函数式编程则完成一个功能&#xff0c;其他代码用来调用即可&#xff0c;提供了代码的重用性和代码间的耦合。而对于一个复杂的功能来…

在jsp文件中通过超链接访问servlet_Eclipse中创建Servlet

1.新建test1.jsp文件&#xff0c;输入如下代码代码解释&#xff1a;一个超链接&#xff0c;跳转到forwardServlet注意forwardServlet 这里是个Servlet2.在工程中新建Servlet3.输入Class名称&#xff0c;注意下边的Supper Class 它自动继承了HttpServlet选择next4.Create Servle…

C# 多线程学习系列四之ThreadPool取消、超时子线程操作以及ManualResetEvent和AutoResetEvent信号量的使用...

1、简介 虽然ThreadPool、Thread能开启子线程将一些任务交给子线程去承担,但是很多时候,因为某种原因,比如子线程发生异常、或者子线程的业务逻辑不符合我们的预期,那么这个时候我们必须关闭它,而不是让它继续执行,消耗资源.让CPU不在把时间和资源花在没有意义的代码上. 2、主线…

Oracle学习:新建表空间

1. 以 sysdba 身份登入Oracle sqlplus / as sysdba; 2. 创建表空间 create tablespace (空间名)fwptfs (数据文件存放路径)datafile D:\xxx (初始大小)size 500m (自动扩容&#xff0c;每次200m)autoextend on next 200m; 3. 创建用户 create user (用户名)fwptfs…

tomcat7使用dbcp连接池遇到的坑

项目部署在tomcat后每隔一段时间便会报错 Cause: java.sql.SQLException: Could not retrieve transation read-only status server ; SQL []; Could not retrieve transation read-only status server; nested exception is java.sql.SQLException: Could not retrieve transa…

纯CSS实现3D照片墙

HTML部分&#xff1a; <body><div class"photo-wrap"> <!-- 舞台 --><div class"container"> <!-- 容器 --><div class"img">我是中心</div><div class"img img01"><img src&q…

Guava之RangeMap

在Guava官方API上面可以得知&#xff1a;RangeMap是一种集合类型( collection type)&#xff0c;它将不相交、且不为空的Range&#xff08;key&#xff09;映射给一个值&#xff08;Value&#xff09;。和RangeSet不一样&#xff0c;RangeMap不可以将相邻的区间合并&#xff0c…

CSS3新增的伪类选择器

伪类选择器的作用&#xff1a;对已有选择器做进一步的限制&#xff0c;对已有选择器能匹配的元素做进一步的过滤。CSS 3提供的伪类选择器主要分为以下三类&#xff1a; 结构性伪类选择器UI元素状态伪类选择器其他伪类选择器 1、结构性伪类选择器 Selector:root&#xff1a;匹…

签名SOAP消息–生成封装的XML签名

数字签名是使数字内容真实可信的一种广泛使用的机制。 通过为某些内容生成数字签名&#xff0c;我们可以让另一方能够验证该内容。 通过此验证&#xff0c;它可以保证在我们签名后不会更改。 通过这个示例&#xff0c;我将分享如何为SOAP信封生成签名。 但是&#xff0c;这当然…

2019 The 19th Zhejiang University Programming Contest

感想&#xff1a; 今天三个人的状态比昨天计院校赛的状态要好很多&#xff0c;然而三个人都慢热体质导致签到题wa了很多发。最后虽然跟大家题数一样(6题)&#xff0c;然而输在罚时。 只能说&#xff0c;水题还是刷得少&#xff0c;看到签到都没灵感实在不应该。 题目链接&#…

openvas安装和基本使用

OpenVAS是开放式漏洞评估系统&#xff0c;也可以说它是一个包含着相关工具的网络扫描器。OpenVAS是开放式漏洞评估系统&#xff0c;也可以说它是一个包含着相关工具的网络扫描器。其核心部件是一个服务器&#xff0c;包括一套网络漏洞测试程序&#xff0c;可以检测远程系统和应…

修改mysql编码方式centos_CentOS下修改mysql数据库编码为UTF-8(附mysql开启远程链接和开放3306端口)...

楼主在配置好linux云服务器的jdk,tomcat,mysql后&#xff0c;当要开始部署项目是&#xff0c;忽然意识到一个很严重的问题&#xff0c;那就是数据库的编码问题&#xff0c;自安装完成后并未修改数据库的额编码。。。。下面就来讲说linux下修改mysql的编码问题吧。。有一个问题网…

srtvlet filter

Filter&#xff0c;过滤器&#xff0c;顾名思义&#xff0c;即是对数据等的过滤&#xff0c;预处理过程。为什么要引入过滤器呢&#xff1f;在平常访问网站的时候&#xff0c;有时候发一些敏感的信息&#xff0c;发出后显示时 就会将敏感信息用*等字符替代&#xff0c;这就是用…

mysql怎么合并行_mysql怎么合并行

mysql合并行的方法&#xff1a;使用函数【GROUP_CONCAT()】&#xff0c;代码为【SELECT am.activeId,GROUP_CONCAT(m.modelName SEPARATOR ‘,’) modelName】。【相关学习推荐&#xff1a;mysql学习】mysql合并行的方法&#xff1a;一个字段可能对应多条数据&#xff0c;用mys…

将旧项目从Ant迁移到Maven的4个简单步骤

一段时间以来&#xff0c;我们一直在考虑将构建从蚂蚁移植到Maven。 它发生在上个月&#xff0c;实际上比我们预期的要简单。 根据我的经验&#xff0c;这里简要介绍了我们遵循的步骤。 我们的应用程序是一个具有多个框架和技术的企业Web应用程序构建&#xff0c;并作为单个WAR…

折腾Java设计模式之建造者模式

博文原址&#xff1a;折腾Java设计模式之建造者模式 建造者模式 Separate the construction of a complex object from its representation, allowing the same construction process to create various representations. 将复杂对象的构造与其表现分离&#xff0c;允许相同的构…

python小甲鱼练习题答案_小甲鱼Python第 013讲元组:戴上了枷锁的列表 | 课后测试题及参考答案...

测试题&#xff1a;0. 请用一句话描述什么是列表&#xff1f;再用一句话描述什么是元组&#xff1f;列表&#xff1a;一个大仓库&#xff0c;可以随时往里面添加和删除任何东西。元祖&#xff1a;封闭的列表&#xff0c;一旦定义&#xff0c;就不可改变(不能添加、删除或修改)1…

Vue--- 一点车项目

一点车项目 cli脚手架 组件化 数据交互路由指向存入数据库 前端页面 cli脚手架的安装与搭建 创建对应包 页面组件化编辑 &#xff08;共享组件&#xff1a;摘取出来一模一样的组件重用&#xff09;&#xff08;私有组件:在自己的组件写入 引入共享组件&#xff09; 数据交…

设计模式:模式或反模式,这就是问题

我最近遇到了Wiki页面“ Anti-pattern” &#xff0c;其中包含详尽的反模式列表。 其中一些对我来说很明显。 他们中的一些让我想了一下&#xff0c;其他的让我想了更多。 然后&#xff0c;我开始在页面上查找反模式“ singleton”&#xff0c;但找不到。 &#xff08;文本搜索…

Redis的散列类型

Redis是采用字典结构以key-value的形式存储数据的&#xff0c;在散列类型&#xff08;所谓的hash&#xff09;中的value也是一种字典结构。如果用关系表结构去理解&#xff0c;就是key为对象&#xff0c;value是属性和属性值。如下图&#xff1a; 所以使用散列&#xff08;hash…