【问题标题】:Using Jenkins and maven to publish a WAR file to Artifactory使用 Jenkins 和 maven 将 WAR 文件发布到 Artifactory
【发布时间】:2016-03-28 02:02:51
【问题描述】:

我正在尝试在 Jenkins 中配置以下工作流模式:

  1. 构建 WAR 文件并发布到 Artifactory
  2. 将 WAR 文件从 Artifactory 部署到 DEV 并发布到 Artifactory 开发者回购
  3. 将 WAR 文件从 DEV 部署到 QA 并发布到 Artifactory Repo 以进行 QA
  4. {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.pluginsmaven-war-plugin`

标签: java maven jenkins artifactory


【解决方案1】:

War 文件似乎是您的 Maven 项目的第二个工件。

您能看看这里并告诉我们它是否能解决您的问题吗? Maven deploy secondary file to repository

【讨论】:

  • 尝试将此作为解决方案,但它没有解决我的问题。
猜你喜欢
  • 2016-04-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-02
  • 1970-01-01
  • 1970-01-01
  • 2016-09-23
相关资源
最近更新 更多