java - 使用 Jenkins 和 maven 发布 WAR 文件到 Artifactory

标签 java maven jenkins artifactory

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

  1. 构建 WAR 文件并发布到 Artifactory
  2. 将 WAR 文件从 Artifactory 部署到 DEV 并发布到 Artifactory 开发 repo
  3. 将 WAR 文件从 DEV 部署到 QA 并发布到 Artifactory Repo 以进行 QA
  4. {QA 到回归等等}

我好像漏掉了什么。应用程序的组件(jar 文件等)似乎在目标发布/快照目录中很好地部署到 Artifactory。然而,尽管 Jenkins 清楚地确定 Artifact 已成功构建,但最终的 WAR Artifact 似乎并未存储在 Artifactory 中。

我使用的是标准目标:全新安装。 我也尝试过(没有改变):全新安装重新打包

我安装了 Jenkins 的标准 Artifactory 插件。

我已经检查了第一个 Jenkins Job 的以下配置,以构建项目并将其发布到 Artifactory:

预构建和构建

  • 丢弃旧构建(保留 5 个)
  • 复制 Artifact 的权限
  • git(具有正常工作的必要凭据)
  • 启用 Artifactory 发布管理(所有模块一个版本)
  • 构建使用 POM 以及“清理”和“安装”选项。

构建后

  • 归档 Artifact (**/*.war)
  • 将 Artifact 部署到 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>

最佳答案

看来War文件是你的Maven项目的第二个 Artifact 。

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

关于java - 使用 Jenkins 和 maven 发布 WAR 文件到 Artifactory,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34405130/

相关文章:

eclipse - 打包前在 Maven 中执行任务

arrays - Jenkinsfile (Groovy) 中的多维数组

java - 识别触发 onTap 调用的 GeoPoint

java - Apache Tomcat 错误 http 状态 404

java - 在 Maven 中为 Launch4j 添加系统属性(使用 Log4j 2)

android - Selendroid 与 Maven : No such archiver: 'apk'

java - 我需要获取数组元素的数量?

java - Spring MVC 中的嵌套异常处理

hudson - 如何删除 Jenkins/Hudson 矩阵构建中无用的未配置项

docker - 如何使用 Jenkins 声明式管道运行特权 Docker 容器