如何通过Jenkins Artifactory插件在构建中途上传文件?
针对你提出的需求——在Jenkins构建过程中途上传文件到Artifactory,触发下游任务下载该制品,同时利用Artifactory插件清理旧构建制品(不用Jenkins自带归档),这里有两个可行的方案,根据你的灵活性需求选择:
方案一:用Artifactory插件的Generic Integration完成全流程(推荐)
这个方案完全依赖Jenkins Artifactory插件,无需手动写curl命令,能自动关联构建与制品,方便后续清理:
步骤1:配置Generic-Artifactory集成
在你的Jenkins任务配置页,找到Artifactory相关配置区,选择「Generic-Artifactory Integration」。提前在Jenkins全局配置好Artifactory服务器(包括凭证和仓库信息),这里直接选择对应的服务器即可。
设定上传规则:指定本地要上传的文件模式(比如./build/outputs/*.zip),以及Artifactory的目标仓库和路径(比如libs-local/com/myapp/${BUILD_NUMBER}/,用${BUILD_NUMBER}区分不同构建的制品)。记得勾选「上传后保留构建关联」,这是后续清理旧构建的关键。步骤2:在构建中途添加上传步骤
不用等构建结束,在你需要上传制品的阶段(比如编译完成后),添加「Artifactory Generic Upload」构建步骤。这里的配置要和步骤1的规则对应,确认文件模式、目标仓库路径无误。执行这一步后,文件会立即上传到Artifactory,你还能通过插件提供的环境变量ARTIFACTORY_UPLOADED_ARTIFACTS获取已上传制品的完整路径。步骤3:触发下游任务并传递制品信息
上传完成后,添加「Trigger parameterized build on other projects」构建步骤,选择你要触发的下游任务。传递关键参数:比如把Artifactory仓库名(ARTIFACT_REPO=libs-local)和制品路径(ARTIFACT_PATH=com/myapp/${BUILD_NUMBER}/myapp.zip)作为参数传给下游,让下游任务知道从哪里下载。步骤4:配置旧构建清理
在任务的「构建后操作」里添加「Artifactory Build Cleanup」步骤。设定清理规则:比如保留最近10个构建的制品,或者删除7天前的旧构建制品。因为之前勾选了构建关联,插件会自动找到每个构建对应的Artifactory制品,清理时精准删除,不会误删其他构建的文件。
方案二:curl手动上传 + Artifactory插件做清理(适合自定义上传逻辑)
如果你的上传逻辑比较复杂,需要用curl实现,也可以结合插件完成构建关联和清理:
步骤1:用curl完成中途上传
在构建步骤中添加Shell/PowerShell脚本,用curl上传文件。注意要使用Jenkins的凭证管理来获取Artifactory的用户名和密码,避免硬编码。示例bash命令:# 先绑定Artifactory凭证(在任务配置的「绑定凭证」中添加,凭证ID设为artifactory-creds) curl -u ${ARTIFACTORY_CREDS_USR}:${ARTIFACTORY_CREDS_PSW} -X PUT "http://your-artifactory-url/artifactory/libs-local/com/myapp/${BUILD_NUMBER}/myapp.zip" -T ./build/outputs/myapp.zip步骤2:关联构建与Artifactory制品
上传完成后,添加「Artifactory Build Info」构建步骤,手动添加刚才上传的制品路径(比如libs-local/com/myapp/${BUILD_NUMBER}/myapp.zip)。这一步是为了让插件把当前构建和Artifactory里的制品关联起来,这样后续清理时才能准确找到要删除的文件。步骤3:触发下游任务
和方案一一样,用参数化构建触发下游任务,传递仓库名和制品路径参数。步骤4:配置旧构建清理
同样添加「Artifactory Build Cleanup」步骤,设定清理规则即可。因为已经完成了构建与制品的关联,插件会自动处理旧制品的删除。
下游任务的下载配置
下游任务要下载制品,同样可以用Artifactory插件的「Generic Download」步骤:
- 添加「Artifactory Generic Download」构建步骤,选择对应的Artifactory服务器。
- 用上游传递的参数配置下载路径:比如从
${ARTIFACT_REPO}/${ARTIFACT_PATH}下载到本地./downloads/目录,这样就能精准获取到上游上传的制品。
内容的提问来源于stack exchange,提问作者Anton Balashov

