作者:罂粟花wd2010 | 来源:互联网 | 2023-06-04 17:02
假设我有3个ANT项目,每个项目的build.xml脚本都位于顶级文件夹中proj1file1.javaproj2file2.javaproj3file3.java我将Jenkin
假设我有3个ANT项目,每个项目的build.xml脚本都位于顶级文件夹中
proj1
file1.java
proj2
file2.java
proj3
file3.java
我将Jenkins配置为构建这3个项目,并构建它们并将输出存储在三个单独的文件夹中.
/output/proj1/2012-02-28_20-11-06/proj1/distribution/proj1.jar
/output/proj2/2012-02-28_20-11-08/proj2/distribution/proj2.jar
/output/proj3/2012-02-28_20-11-09/proj3/distribution/proj3.jar
ANT脚本是将jar文件放在分发文件夹中的脚本.我想在另一个生成war文件的项目中使用这些jar文件.
每个项目中生成的jar文件用于构建WAR文件.有没有办法我可以配置Jenkins来构建proj1,proj2,proj3然后将jar文件复制到一个特定的位置,该位置将包含另一个ANT项目,该项目在运行时会产生一个war文件?或者这是否必须用ANT编码?
此外,是否可以在运行ANT构建脚本之前配置jenkins进行多次检出.我正在使用CVS,并希望在运行构建之前使用不同的标记执行3次检出.
编辑
我在睡觉前昨晚发布了这个问题.今天再读一遍,我认为还不够清楚,所以我会再次澄清这个要求.我有4个项目使用ANT作为构建机制,并且都存储在CVS存储库中.构建的所有4个项目形成一个部署在Tomcat应用程序服务器上的WAR文件.
proj1
- file1.java
- file2.java
proj2
- file3.java
- file4.java
proj3
- file3.java
- file4.java
proj4
- jsp
- home.jsp
- css
- home.css
- WEB-INF
- lib
- classes
- web.xml
每个项目(proj4除外)都有一个ANT构建文件,用于构建项目并生成一个JAR文件,该文件存储在项目根文件夹的“distribution”文件夹中.例如,在构建proj1之后,它将如下所示
proj1
- file1.java
- file2.java
- distribution
- classes
- file1.class
- file2.class
- proj1.jar
Proj4依赖于proj1,proj2和proj3,因为它首先需要在构建war文件之前将所有jar文件复制到其工作区. project4的ANT构建文件从proj1,2和3复制JAR文件并构建WAR文件.生成的WAR文件包含以下结构
proj4
- jsp
- home.jsp
- css
- home.css
- WEB-INF
- lib
- proj1.jar
- proj2.jar
- proj3.jar
- classes
- web.xml
现在自动执行上述操作我需要以某种方式配置Jenkins和ANT来执行以下操作(按所示顺序)
- Checkout proj1 from CVS using RELEASE1.1 tag
- Build proj1
- Checkout proj2 from CVS using RELEASE1.2 tag
- Build proj2
- Checkout proj3 from CVS using RELEASE1.1 tag
- Build proj3
- Checkout proj4 from CVS using RELEASE1.1 tag
- Copy the proj1.jar, proj2.jar, proj3.jar from the previous 3 builds and copy them to the proj4 WEB-INF/lib folder.
- Build proj4
- Deploy the WAR file.
昨天我和Jenkins一起玩,并设法配置它来构建每个项目,但每个jar文件最终都在一个不相关的文件夹中.我如何配置Jenkins来构建项目,如上所述?
环境具有以下属性
Build tool - ANT
OS - Solaris
Maven可能会使用它,但目前还没有计划引入Maven.如果有一个简单的Maven之类的构建工具,我可以使用它来存储我需要的库,不需要外部访问,请告诉我.
提前致谢.
解决方法:
我不明白你的要求是什么,但让我们试一试:
使用Parameterized Trigger Plugin作为构建步骤,从单个作业(称为TriggerJob)启动三个作业.给他们TriggerJob的BUILD_ID作为参数,他们将用它来存储结果(而不是使用他们自己的BUILD_ID;如果你仍然需要单独构建它们 – 而不是从TriggerJob触发 – 你可以为参数指定一些默认值,并使用Conditional BuildStep Plugin检查它,当它具有默认值时 – 使用自己的BUILD_ID,否则使用传入的参数).
让TriggerJob等待三个作业完成,然后收集你的jar(TriggerJob知道它们在哪里),然后继续第四个作业,它将调用你的最后一个ANT将它们归档在一起(或者将它变成TriggerJob中的ANT构建步骤,什么适合更好).
以防万一以下观察结果可能对您有用:每个ANT构建步骤都可以使用自己的构建文件(它位于ADVANCED按钮下).您可以使用环境变量指定其路径.
多次检查:我不熟悉CVS插件,但是使用Subversion插件我更喜欢手工操作:我有触发作业通过Subversion插件轮询SVN并将修订号作为参数传递给实际工作的作业.然后,这些作业使用显式SVN调用(从shell构建步骤)更新为作为参数传递的修订.也许你可以用CVS插件做同样的事情.