如何在 Jenkins 上轮询 REST 端点?

How to do polling for REST endpoint on Jenkins?

在我创建的 Jenkins 管道上,我发出了一次 POST curl 请求。但是,由于这项工作首先进入队列,我需要等到工作完成。这是我的命令示例

curl -X POST -H "Content-Type: application/json" \
-d '{"source_path": "source/path/example", "destination_path": "destination/path/example"}' \
http://example.com/v1/postJob

这个returns一个JSON响应{"jobID": 1234}

我希望 Jenkins 作业保持 'running' 状态,直到 GET 端点 returns “状态”:成功。 GET 端点 returns 一个 JSON 主体,其中包含一个字段 'status',指示作业是否已完成。这是 GET 端点

curl http://example.com/v1/jobs/1234

这个returns一个JSON响应

{
   "job": 1234, 
   "status": success
}

谁能给我提供一个无需使用 Jenkinsfile 即可直接在 Jenkins 上实现的轮询示例?

对于 bash 上的端点轮询,此代码片段应该可以解决问题

GETURL="http://exmple.com/v1/tasks/${TASK_ID}"

while true; 
    do 
        STATUS=$(curl $GETURL | jq -r '.status'); //'status' is to check JSON response field
        echo ${STATUS}
        if [[ "$STATUS" == "succeeded" ]]; then 
            break; 
        fi; 
        sleep 2700; //The endpoint will be hit again after 2700 seconds
    done