假设我有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之类的构建工具,我可以使用它来存储我需要的库,不需要外部访问,请告诉我。
提前致谢。
答案 0 :(得分:3)
我不明白你的要求是什么,但让我们试一试:
使用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插件做同样的事情。
答案 1 :(得分:2)
使用Apache Ivy与proj1,proj2和proj3将他们的jar文件发布到工件库。无论何时发布proj1,proj2或proj3的新版本(例如,使用Jenkins Ivy Plugin),您都可以触发proj4。 Proj4再次使用Ivy,但这次要检索proj1,proj2和proj3 jar作为依赖项,然后用它们构建WAR(你也可以发布到你的存储库)。
如果你有信心,你也可以考虑从Ant切换到Gradle,它也使用常春藤。您也可以考虑Maven,但我不熟悉它推荐它。我听说很多人都发誓,很多人都发誓。