Azure DevOps如何配置ArtifactoryDotnetCore成功数为0时失败
问题背景
现有Azure DevOps流水线使用ArtifactoryDotnetCore@1任务向Artifactory上传NuGet包,当任务未检索到待上传包时,仍会判定为执行成功,仅在日志输出如下结果:
{ "status": "success", "totals": { "success": 0, "failure": 0 } }
需求为实现当任务返回结果中totals.success字段值为0时,自动将任务判定为失败。此前尝试配置arguments输入参数,发现该参数仅对restore命令生效,对当前使用的push命令无效;查阅JFrog官方文档未找到相关有效配置说明,也无法获取该任务的源代码。
目前梳理了4种可能的解决方向,现确认前3种方案的可落地性:
- 存在遗漏的、可实现该需求的未公开配置参数;
- 更换为其他支持向Artifactory发布制品的任务实现需求;
- 通过后续任务提取、解析当前ArtifactoryDotnetCore任务的输出结果做失败判定;
- 通过命令行手动拼接参数调用
jfrog.exe rt u ...命令完成上传逻辑。
方案可行性说明
- 方案1:寻找未公开配置参数
不建议尝试。ArtifactoryDotnetCore@1所有公开支持的参数都已在任务配置面板完整列出,即使挖到未在文档中说明的隐藏参数,也属于任务内部实现逻辑,后续任务小版本迭代就可能被删除或修改规则,流水线稳定性没有保障。 - 方案2:更换其他支持Artifactory制品发布的任务
可以落地。第三方维护的Artifactory NuGet推送任务、对接Artifactory API的通用制品上传任务中,不少都自带「无匹配待上传文件时任务失败」的配置项,替换前在测试流水线验证通权限、路径匹配规则即可,改造成本不高。 - 方案3:增加后续任务解析上传任务输出做失败判定
落地成本最低,完全可行。操作步骤如下:- 给现有
ArtifactoryDotnetCore@1任务开启调试日志输出,或直接将任务控制台输出重定向到流水线工作目录下的临时日志文件 - 紧跟一个PowerShell/Bash脚本任务,将任务运行条件设置为「无论上一任务成功或失败均运行」
- 脚本读取日志内容,通过正则匹配到输出的JSON结构,解析
totals.success字段值,若值为0则执行exit 1返回非0退出码,即可直接触发流水线失败。
该方案不需要修改现有上传任务的任何配置,十几行脚本即可实现,对现有流程侵入性极小。
- 给现有
- 方案4:命令行手动调用
jfrog.exe rt u命令实现上传
不是必须选择的方案,但长期使用稳定性最高。直接调用CLI时所有逻辑完全可控:上传前可先扫描匹配到的nupkg文件数量,为0直接报错;上传完成后可直接解析CLI返回的标准执行结果做校验,不会被官方封装任务的默认逻辑限制,适合对流水线稳定性要求高、后续需要扩展更多自定义校验规则的场景。
如果只是快速解决当前问题,选方案3即可,10分钟左右就能调通;如果后续还要迭代Artifactory上传的相关逻辑,直接切换到方案4长期维护成本更低。
内容的提问来源于stack exchange,提问作者Mike
相关产品推荐
相关产品推荐

