在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,一经查实,立即删除!

相关文章

scss-@for 指令

此指令用于循环输出&#xff0c;具有两种循环方式&#xff0c;下面分别做一下介绍。 &#xff08;1&#xff09;.for $var from <start> through <end>: 此种方式的遍历索引区间是[start,end]&#xff0c;scss代码实例如下: for $i from 1 through 3 {.item-#{$i} …

Python开发【第六篇】:模块

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

yocto 离线编译

使用yocto编译一个软件包时&#xff0c;一般会先在本地寻找下载好的源码包&#xff0c;如果不存在则根据配置从网络下载。 添加本地源码包 为了支持离线编译&#xff0c;添加一个包的配置文件后&#xff0c;需要在本地也准备好源码包。 可以先打开网络连接&#xff0c;让yocto帮…

mysql 帐号开启远程_两大步骤教您开启MySQL 数据库远程登陆帐号

在工作实践和学习中&#xff0c;如何开启 MySQL 数据库的远程登陆帐号算是一个难点的问题&#xff0c;以下内容便是在工作和实践中总结出来的两大步骤&#xff0c;能帮助DBA们顺利的完成开启 MySQL 数据库的远程登陆帐号。1、确定服务器上的防火墙没有阻止 3306 端口MySQL 默认…

scss-字符串连接符

运算可用于连接字符串: // SCSS p {cursor: e -resize; } // 编译后的 CSS 样式 p {cursor: e-resize; } 请注意&#xff0c;如果带引号的字符串被添加到不带引号的字符串中&#xff08;也就是说&#xff0c;带引号的字符串在 的左侧&#xff09;&#xff0c; 那么返回的结…

用于Play框架分布式应用程序的Init.d Shell脚本

我编写了一个Shell脚本来控制使用内置命令dist打包的Play框架应用程序。 以这种方式打包的应用程序是压缩的独立发行版&#xff0c;不需要在应该运行其的计算机上安装Play框架。 所需的一切都在包装内。 在zip的bin目录中&#xff0c;有一个可执行的Shell脚本&#xff0c;其名称…

在Java中使用内存映射文件时检测(写入)失败

内存映射文件是一个很好的并且经常被忽视的工具。 我不会在这里详细介绍它们的工作方式&#xff08;使用 力 Google Luke&#xff01;&#xff09;&#xff0c;但我将快速总结其优势&#xff1a; 操作系统提供的延迟加载和写入缓存&#xff08;您不必自己编写&#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、主线…

HTML邮件制作规范

以下内容有些是别人总结的&#xff0c;有些是自己在工作中总结的。 模板最佳尺寸&#xff1a;显示宽度550px-750px&#xff0c;模板高度控制在一屏以内。 1、 用table css方式构建模板 Div css布局不完全被邮件客户端支持&#xff0c;所以无法使用div css布局。 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…

在Jersey 2中进行集成测试自定义验证约束

我最近加入了一个团队&#xff0c;试图将一个单一的遗留系统转换为Java中的RESTful服务集。 他们决定使用最新的2.x版本的Jersey作为REST容器&#xff0c;这对我来说不是首选&#xff0c;因为我不是JSR- *规范的忠实拥护者。 但是现在我必须承认&#xff0c;JAX-RS 2.x的运行正…

mysql什么实务_MysQL是什么类型的据库?

【单选题】【听力题】Listen to the interview with Ajay, someone from India. Are the following statements true or false? (6.0分)【听力题】Listen to the talk about the changing of the guard ceremony in London. Then fill in the details in the process. (8.0分)…

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…

Neo4j Backup:在Mark Needham上存储副本和一致性检查

我上周写的有关 Neo4j在线备份工具的鲜为人知的事情之一是&#xff0c;从概念上讲&#xff0c;它包含两个部分&#xff1a; 将商店文件复制到您选择的位置 验证这些存储文件是否一致。 默认情况下&#xff0c;这两个命令都在您运行“ neo4j-backup”脚本时运行&#xff0c;但…

Guava之RangeMap

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

sqoop遇到mysql字段为保留字_关于在sqoop 导出数据到mysql数据库的过程对于空字符的处理。...

今天在做sqoop的导入和导出的操作。在导出数据到mysql数据库的时候一直有问题&#xff0c;在导入空字段的时候就出现下面这个错误。WARN hdfs.DFSClient: Caught exceptionjava.lang.InterruptedExceptionat java.lang.Object.wait(Native Method)at java.lang.Thread.join(Thr…

CSS3新增的伪类选择器

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

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

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