提问人:Steffen Lomholt Hansen 提问时间:9/26/2023 最后编辑:Steffen Lomholt Hansen 更新时间:10/3/2023 访问量:97
Jenkins 在将大文件部署到 Artifactory 时挂起
Jenkins hangs while deploying large files to Artifactory
问:
当我们的 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 上安装 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 凭据。
为了使用 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
评论