Artifactory AQL返回非200状态时如何终止流水线?
AQL语法修正
你当前使用的AQL存在一处语法错误:{"name":{"$nmatch":"*-sample.*"}} 后多余的逗号会导致Artifactory返回400错误,修正后AQL如下:
{ "files": [{ "aql": { "items.find" : { "$or": [ { "$and": [ {"repo": "generic-temp"}, {"created": {"$before": "25days"} } ] }, { "$and": [ {"repo": "generic-temp"}, { "$and": [ {"name":{"$nmatch":"*-test"}}, {"name":{"$nmatch":"*-sample.*"}} ] } ] } ] }}]}
流水线控制逻辑实现
核心要做两层校验:请求状态码校验 + 响应体格式校验,任意一层不满足直接返回非0退出码,即可触发流水线中断。
通用Shell实现(适配绝大多数流水线)
依赖curl和jq工具,无需额外配置,直接嵌入流水线任务中即可:
# 替换为你的Artifactory认证信息和地址 ARTIFACTORY_USER="你的用户名" ARTIFACTORY_PWD="你的密码/API密钥" ARTIFACTORY_URL="https://你的Artifactory域名/artifactory" # 发起AQL请求,-f参数会让curl在收到非2xx/3xx响应时直接返回非0退出码 RESPONSE=$(curl -s -f -u "${ARTIFACTORY_USER}:${ARTIFACTORY_PWD}" \ -X POST \ -H "Content-Type: text/plain" \ "${ARTIFACTORY_URL}/api/search/aql" \ --data-binary @<替换为你的AQL文件路径>) # 第一层校验:判断请求是否返回非200状态 if [ $? -ne 0 ]; then echo "AQL请求失败,返回非200状态码" exit 1 fi # 第二层校验:判断响应格式和执行结果是否符合要求 echo "${RESPONSE}" | jq -e '.status == "success" and .totals.failure == 0' > /dev/null if [ $? -ne 0 ]; then echo "清理任务执行失败,或响应格式不符合要求" exit 1 fi echo "清理任务执行成功"
特定流水线适配说明
- Jenkins流水线:直接把上述脚本放到
sh块中即可,Jenkins会自动识别非0退出码标记阶段失败 - GitLab CI/GitHub Actions:将上述脚本写入step的run字段即可,同样会自动触发流水线中断
- 如果你使用JFrog CLI操作:添加
--fail-fast参数,CLI会在请求失败时自动返回非0退出码,再配合jq做响应校验即可
内容的提问来源于stack exchange,提问作者hammer89
相关产品推荐
相关产品推荐

