【发布时间】:2016-03-28 02:02:51
【问题描述】:
我正在尝试在 Jenkins 中配置以下工作流模式:
- 构建 WAR 文件并发布到 Artifactory
- 将 WAR 文件从 Artifactory 部署到 DEV 并发布到 Artifactory 开发者回购
- 将 WAR 文件从 DEV 部署到 QA 并发布到 Artifactory Repo 以进行 QA
- {QA 到回归等}
我似乎错过了什么。应用程序的组件(jar 文件等)似乎可以在目标版本/快照目录中很好地部署到 Artifactory。然而,最终的 WAR 工件似乎并没有存储在 Artifactory 中,尽管 Jenkins 清楚地表明该工件已成功构建。
我正在使用标准目标:全新安装。 我也尝试过(没有改变):clean install repackage
我为 Jenkins 安装了标准的 Artifactory 插件。
我已经检查了第一个 Jenkins Job 的以下配置以构建项目并将其发布到 Artifactory:
预构建和构建
- 丢弃旧版本(保留 5 个)
- 复制工件的权限
- git(具有正常工作的必要凭据)
- 启用 Artifactory 发布管理(所有模块一个版本)
- 构建使用 POM 以及“清理”和“安装”选项。
构建后
- 归档工件 (**/*.war)
- 将工件部署到 Artifactory(发布和快照目录存在并且似乎工作正常,并且在我单击刷新时从 Artifactory 服务器正确加载)
- 捕获和发布构建信息
- 包括环境变量(仅配置的默认值)
还包括一个可编辑的电子邮件通知构建后步骤。
我可以使用这些相同的选项,它们将成功地将最终的 WAR 文件部署到 Tomcat 实例而不会出现问题。 Jenkins 还根据配置保留 WAR 文件。但 Artifactory 似乎存储的是组件而不是最终的 WAR 文件。
我一直在玩配置选项,但太久没有出现。感谢您提供任何和所有帮助。
编辑:这是构建 war 文件时用于“全新安装”目标的 POM 文件的片段。
<build>
<defaultGoal>clean install</defaultGoal>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.18.1</version>
<configuration>
<includes>
<include>**/*Tests.java</include>
<include>**/*Test.java</include>
<include>**/Test*.java</include>
</includes>
<skipTests>true</skipTests>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>${maven.compiler.plugin.version}</version>
<configuration>
<source>${java.version}</source>
<target>${java.version}</target>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>${maven.war.plugin.version}</version>
<configuration>
<failOnMissingWebXml>false</failOnMissingWebXml>
<archive>
<addMavenDescriptor>false</addMavenDescriptor>
<manifestEntries>
<Implementation-Version>${project.version}</Implementation-Version>
<Implementation-Revision>${git.revision}</Implementation-Revision>
<X-Git-Commits-Count>${git.commitsCount}</X-Git-Commits-Count>
</manifestEntries>
</archive>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-release-plugin</artifactId>
<configuration>
<autoVersionSubmodules>true</autoVersionSubmodules>
</configuration>
</plugin>
</plugins>
</build>
【问题讨论】:
-
您是否正在使用 Maven 战争插件构建战争?它有一个单独的 Maven 模块用于战争吗?你在构建信息中看到了吗?你见过project example吗?
-
Maven 集成插件和 Maven 项目插件均已安装、处于活动状态且是最新的。该应用程序构建良好并生成一个单一的战争文件:appName.war。该 war 文件被复制到 Tomcat 实例中,并且可以正常工作,包括 QA 测试。但是,当发布到 Artifactory 时,它不存储 war 文件,而是存储 war 文件的组件,如果我希望它执行代码快照而不是工件快照,这将很好。
-
我怀疑这个问题与 Maven 项目有关,所以我问的是正在使用的 Maven 插件(不是 Jenkins 插件)。看起来 Artifactory Jenkins 插件无法识别 Web 模块
-
正在使用maven war插件。
-
我试图从 POM 发布到部分,但评论太长。这里是它的名字:`
org.apache.maven.plugins maven-war-plugin `
标签: java maven jenkins artifactory