Jenkins 在将大文件部署到 Artifactory 时挂起

Jenkins hangs while deploying large files to Artifactory

提问人:Steffen Lomholt Hansen 提问时间:9/26/2023 最后编辑:Steffen Lomholt Hansen 更新时间:10/3/2023 访问量:97

问:

当我们的 Jenkins 项目管道生成大小接近 60 MB 或更大的 jar 文件并尝试将它们部署到 Artifactory 时,它们只是挂起,永远不会完成。

对于较小的 jar 文件 - 低于 10 MB - 没有问题。

我们使用的是 Jenkins 版本 2.414.1 和 Artifactory 商业许可证版本 7.68.7 修订版 76807900。Jenkins 使用 Artifactory 插件 3.18.9、Maven 集成插件 3.23 和 JFrog 插件 1.5.0。

我们是这样配置的 Artifactory tomcat:

雄猫: 连接器: extraConfig:“maxPostSize='-1' connectionTimeout='1500000'”

Artifactory 或 Jenkins 中没有指示问题的日志记录。

我们搜索了 stackoverflow 和类似网站上发布的类似问题,但没有找到任何问题。

大多数使用此类设置的开发人员都可以在大型 WAR 文件中正常工作。我们的应用程序基于 Spring Boot 3,可生成非常大的 jar 文件。我们的问题可能是由于 Jenkins 或 Artifactory 被非常大的 jar 文件混淆引起的吗?

Jenkins Artifactory 大文件

评论

0赞 Steffen Lomholt Hansen 9/26/2023
WAR文件也有同样的问题
0赞 Amirhossein Taheri 9/26/2023
您是否在 artifactory 中检查最大上传大小?
0赞 Steffen Lomholt Hansen 9/26/2023
maxPostSize='-1' 应该删除上传大小的限制。顺便说一句,使用 JFrog Cli 上传到 Artifactory 适用于大文件。但是如何在 Jenkins 管道中使用它呢?

答:

0赞 Steffen Lomholt Hansen 10/2/2023 #1

我找到了一个解决方案。

首先,您应该在 Jenkins 上安装 JFrog Cli。在项目的 jenkinsfile 中,您应该添加:

jfrog 'jfrog-cli'

到工具。在部署阶段,您应该有以下步骤:

jf 'rt mvn-config'
jf 'rt mvn clean install -DskipTests -DskipITs  deploy:deploy' // build & deploy artifacts
jf 'rt bp' // publish build info

最后,在你的pom.xml中,你应该添加:

    <distributionManagement>
        <repository>
            <id>libs-release-local</id>
            <url>artifactory-server-url/artifactory/libs-release-local</url>
        </repository>
        <snapshotRepository>
            <id>libs-snapshot-local</id>
            <url>artifactory-server-url/artifactory/libs-snapshot-local</url>
        </snapshotRepository>
    </distributionManagement>

Rememeber 在 maven 设置 .xml 中为您的存储库 ID 添加 Artifactory 凭据。

0赞 Shaurya Mishra 10/2/2023 #2

为了使用 Jenkins 将工件发布到 Artifactory,JFrog 推荐使用官方插件。https://plugins.jenkins.io/artifactory/

此插件与 JCasC(Jenkins 配置即代码)兼容。 设置后的示例配置:

JCasC:
  configScripts:
    artifactory: |-
      unclassified:
        artifactorybuilder:
          useCredentialsPlugin: true
          jfrogInstances:
            - instanceId: <your-instance-id>
              platformUrl: <your-platform-url>
              artifactoryUrl: <your-artifactory-url>
              deployerCredentialsConfig:
                credentialsId: <your-artifactory-credentials>

配置后,可以在声明性管道中使用插件提供的函数来发布 maven 工件。所有可用功能都可以在这里找到 https://jfrog.com/help/r/jfrog-integrations-documentation/declarative-pipeline-syntax

样本:

stage('Publish jars to Artifactory') {
    steps {
            rtMavenRun(
                    pom: "<your-pom-path>",
                    goals: "<your-maven-command>"
                )
            rtPublishBuildInfo(
                    serverId: "<your-instance-id>"
                )
    }
}

这里需要注意的是,需要在 maven 命令中使用“install”,而不是使用“deploy”来部署工件(参考文献:https://devpress.csdn.net/cicd/63179e8f26059229d1c850c0.html)。

我已经将此设置与 1000 个具有 500+ MB 的罐子一起使用,并且它没有任何问题。

此配置还提供有关构建 UI 的反馈和直接链接,可用于直接从 Artifactory 访问所需的 jar