【发布时间】:2014-08-10 09:35:55
【问题描述】:
我的任务是收集所有与 maven/jenkins 相关的项目。目前,只要在 jenkins(svn 驱动)中发生 SCM 更改,更改的文件就会重新构建,并且依赖于它的所有内容都会构建,并且这种效果会级联。虽然这在某种意义上是好的,但它不是首选行为。当前需要的是构建更改的文件,并且所有直接相关的构建都不会向前级联,除非第二个文件现在不同。我仍然能想到的唯一解决方案(?)是 Jenkins/Maven 实际上并没有意识到项目之间的关系,并且没有进行有限的级联,因为它没有在哪里触发构建。
在 Jenkins 中,禁用“在构建快照依赖项时构建”,而是在高级构建选项中使用“增量构建”。还启用了轮询 scm。 Jenkins 在项目页面上不再有任何关于上游/下游项目的明确知识。
当 SCM 发生更改时,不会对直接依赖的模块产生级联效应。 Jenkins 没有处理增量步骤,因此使用了增量构建插件,没有发生不同的行为。
在一个沙盒环境中,旨在模拟我们的实际项目试图完成的任务。
沙盒设置
|Trunk
--|Project_C
| -Pom.xml
| -src
--|Project_B
| -pom.xml
| -src
--|Project_A
| -pom.xml
| -src
项目 A 依赖于项目 B。 项目 B 依赖于项目 C。
当项目 C 的 src 代码发生更改(+ SCM'd)会影响项目 B 的行为时,Jenkins 只会重建 Project_C。
项目 C 的 pom.xml
<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/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>project</groupId>
<artifactId>c</artifactId>
<version>1.0</version>
<packaging>jar</packaging>
<name>c</name>
<build>
<plugins>
<plugin>
<groupId>org.jvnet.maven.incrementalbuild</groupId>
<artifactId>incremental-build-plugin</artifactId>
<version>1.3</version>
<executions>
<execution>
<goals>
<goal>incremental-build</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
项目 B 的 pom.xml
<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/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>project</groupId>
<artifactId>b</artifactId>
<version>1.0</version>
<packaging>jar</packaging>
<name>b</name>
<build>
<plugins>
<plugin>
<groupId>org.jvnet.maven.incrementalbuild</groupId>
<artifactId>incremental-build-plugin</artifactId>
<version>1.3</version>
<executions>
<execution>
<goals>
<goal>incremental-build</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
<dependencies>
<dependency>
<groupId>project</groupId>
<artifactId>c</artifactId>
<version>1.0</version>
<type>jar</type>
</dependency>
</dependencies>
</project>
旁注:是否有人非常了解“增量构建”选项与“每当构建快照依赖项时构建”选项之间的交互?
【问题讨论】: