想象一下一个使用Maven构建的Java项目,我为此:
这似乎是一种典型的情况。目前,我正在跑步:
配置了两个CI作业,两个作业均指向项目的VCS分支:
问题在于作业2单元将再次测试并构建被测工件(因为验证阶段会自动调用打包阶段)。由于多种原因(重要性降低),这是不希望的:
所以我的问题是,如何配置作业2以使用由作业1创建的工件?
我意识到我只能有一个运行“ mvn verify”的CI作业,该作业只能创建一次工件,但是我想拥有上述单独的CI作业以实现Farley风格的部署管道。
万一它对任何人都有帮助,这是公认的答案中“项目2”的完整Maven 2 POM:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.example.cake</groupId>
<artifactId>cake-acceptance</artifactId>
<version>1.0</version>
<packaging>jar</packaging>
<name>Cake Shop Acceptance Tests</name>
<description>
Runs the automated acceptance tests for the Cake Shop web application.
</description>
<build>
<plugins>
<!-- Compiler -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.3.1</version>
<configuration>
<source>${java.version}</source>
<target>${java.version}</target>
</configuration>
</plugin>
<!-- Suppress the normal "test" phase; there's no unit tests -->
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.5</version>
<configuration>
<skipTests>true</skipTests>
</configuration>
</plugin>
<!-- Cargo (starts and stops the web container) -->
<plugin>
<groupId>org.codehaus.cargo</groupId>
<artifactId>cargo-maven2-plugin</artifactId>
<version>1.0.5</version>
<executions>
<execution>
<id>start-container</id>
<phase>pre-integration-test</phase>
<goals>
<goal>start</goal>
</goals>
</execution>
<execution>
<id>stop-container</id>
<phase>post-integration-test</phase>
<goals>
<goal>stop</goal>
</goals>
</execution>
</executions>
<configuration>
<!-- Don't wait for CTRL-C after starting the container -->
<wait>false</wait>
<container>
<containerId>jetty7x</containerId>
<type>embedded</type>
<timeout>20000</timeout>
</container>
<configuration>
<properties>
<cargo.servlet.port>${http.port}</cargo.servlet.port>
</properties>
<deployables>
<deployable>
<groupId>${project.groupId}</groupId>
<artifactId>${target.artifactId}</artifactId>
<type>war</type>
<properties>
<context>${context.path}</context>
</properties>
</deployable>
</deployables>
</configuration>
</configuration>
</plugin>
<!-- Failsafe (runs the acceptance tests) -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-failsafe-plugin</artifactId>
<version>2.6</version>
<executions>
<execution>
<id>integration-test</id>
<goals>
<goal>integration-test</goal>
</goals>
</execution>
<execution>
<id>verify</id>
<goals>
<goal>verify</goal>
</goals>
</execution>
</executions>
<configuration>
<includes>
<include>**/*Test.java</include>
</includes>
<skipTests>false</skipTests>
</configuration>
</plugin>
</plugins>
</build>
<dependencies>
<!-- Add your tests' dependencies here, e.g. Selenium or Sahi,
with "test" scope -->
<dependency>
<!-- The artifact under test -->
<groupId>${project.groupId}</groupId>
<artifactId>${target.artifactId}</artifactId>
<version>${target.version}</version>
<type>war</type>
</dependency>
</dependencies>
<properties>
<!-- The artifact under test -->
<target.artifactId>cake</target.artifactId>
<target.version>0.1.0-SNAPSHOT</target.version>
<context.path>${target.artifactId}</context.path>
<http.port>8081</http.port>
<java.version>1.6</java.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
</project>
请注意,即使这个“测试”项目没有创建工件,它也必须使用某种包装(我在这里使用“ jar”),否则在验证阶段就不会运行任何测试。
尝试两个Maven项目。第一个包含构建和单元测试。您将工件安装在本地存储库中。第二个作业运行第二个maven项目,该项目将第一个项目的工件声明为依赖项并运行功能测试。
不知道我刚才描述的方案是否可行,但我认为是可行的。
为了快速改进,您可以使用绕过单元测试-Dmaven.test.skip=true
。如果将scm中代码的修订版本号传递给第二项工作,则应该能够签出相同的源代码。
您也可以签入克隆工作区SCM插件。这可能会为您提供一些其他选择。
问题内容: 当我使用WebEngine创建播放YouTube视频的新舞台时,关闭它之后-Youtube继续在backgroung上播放。如果我使用“ Platform.exit”-它会关闭我的所有JavaFX App,但我只想关闭为YouTube创建的阶段。 这是我针对YouTube播放器的课程: 在“主舞台”中单击按钮后,我的YouTube播放器舞台正在创建: 问题答案: 您无法处置WebEng
问题内容: 我是Maven和Checkstyle的新手,所以请保持礼貌:)。 我设法将maven与checkstyle插件一起使用,并且可以在代码上创建报告。但是我真正想要拥有的是,如果样式检查有任何错误,我可以停止Maven的构建过程。 到目前为止,我的pom.xml如下所示: 我如何在这里达到目标?我们的团队希望有严格的编码风格标准,所以我必须使用它。 问题答案: 为了实现所需的功能,除了报告
我面临一个问题,在我的管道中定义了两个阶段,它们都在同一个节点上运行,需要在同一个工作区中运行。 这些阶段中的第一个阶段最初在我的主节点上运行,但在定义的步骤即将结束时,必须将一些文件解压缩到另一个节点上。 然后,第二阶段只需要在我的主程序上继续,并且依赖于从第一阶段安装的一些模块。 以下是我要更好地解释的管道: 如您所见,我在每个阶段\节点的开始处添加了注释,用于显示我看到的分配了哪些工作空间的
问题内容: 我有一个bean,我在其中为每个字段定义多个验证注释,例如 我遇到了 两个 无法以任何简单方式解决的问题。 每个字段的指定批注的验证顺序是随机的,即不会按照定义批注的顺序进行。 我相信@GroupSequence将无济于事,因为它仅定义组验证序列,而不是注释序列。 正如@Tom正确注释的那样,违规被报告为Set,这意味着注释的执行顺序与所报告的违规之间没有1:1的映射。 我只想使每个字
我已经设置了一个Jenkins声明管道作业,它从Git中提取Jenkins文件。我有一个在另一个节点上运行的阶段(由标签选择),但它也试图从Git中检出Jenkinsfile。 我怎样才能阻止这种行为?这个特定的从属服务器位于防火墙的另一端,我只能通过SSH访问它。
问题内容: 我正在使用nodejs和mongoose —尝试在嵌套有递归函数和foreach的深层注释中找到特定的注释。有没有一种方法可以停止nodejs forEach?据我了解,每个forEach迭代都是一个函数,并且我不能只执行“ break”,而只能执行“ return”,但这不会停止foreach。 问题答案: 您无法打破。不过,我可以想到三种伪造方法。 1.The Ugly Way :