如何让Jenkins任务仅因‘invalid JWT token’错误重触发下游任务
特定错误触发下游任务重跑的实现方案
核心思路是通过try-catch块捕获下游任务的失败异常,仅当错误信息匹配invalid JWT token时,才使用修改后的参数重新触发任务。以下是主流CI/CD工具的具体实现示例:
Jenkins Pipeline 实现
pipeline { agent any parameters { string(name: 'ORIGINAL_JWT_TOKEN', defaultValue: '', description: '初始JWT Token') // 按需添加其他任务参数 } stages { stage('Run Downstream Job') { steps { script { try { // 首次触发下游任务,传入初始参数 build job: 'your-downstream-job-name', parameters: [ string(name: 'JWT_TOKEN', value: params.ORIGINAL_JWT_TOKEN) // 传递其他必要参数 ], wait: true } catch (Exception e) { // 捕获异常并检查错误信息 def errorDetail = e.toString() if (errorDetail.contains('invalid JWT token')) { echo "捕获到目标错误,将使用更新后的参数重跑任务" // 生成更新后的JWT Token(替换为你的实际刷新逻辑) def updatedToken = getRefreshedJwtToken() // 重新触发下游任务 build job: 'your-downstream-job-name', parameters: [ string(name: 'JWT_TOKEN', value: updatedToken) // 保持其他参数一致 ], wait: true } else { // 非目标错误,抛出原异常终止流水线 throw e } } } } } } } // 示例:模拟获取刷新后的JWT Token方法 def getRefreshedJwtToken() { // 这里替换为实际的Token刷新逻辑,比如调用认证接口 return 'refreshed-valid-jwt-token-456' }
关键说明
wait: true确保流水线等待下游任务执行完成后再处理结果- 通过异常对象的
toString()获取错误信息,若需要更精准的日志匹配,可通过下游任务的构建日志API查询详情 - 仅在错误匹配时执行重触发,非目标错误直接抛出原异常,避免无意义的重试
GitLab CI 实现
stages: - trigger-downstream trigger-downstream-job: stage: trigger-downstream script: - | # 首次触发下游流水线 initial_response=$(curl -s -X POST \ -H "PRIVATE-TOKEN: $CI_JOB_TOKEN" \ -F "variables[JWT_TOKEN]=$ORIGINAL_JWT_TOKEN" \ "$CI_API_V4_URL/projects/your-downstream-project-id/trigger/pipeline") # 检查首次触发是否失败且包含目标错误 if echo "$initial_response" | grep -q "invalid JWT token"; then echo "检测到'invalid JWT token'错误,执行重触发" # 获取更新后的JWT Token UPDATED_JWT_TOKEN=$(./refresh-jwt-token.sh) # 替换为你的刷新脚本 # 重新触发下游流水线 curl -X POST \ -H "PRIVATE-TOKEN: $CI_JOB_TOKEN" \ -F "variables[JWT_TOKEN]=$UPDATED_JWT_TOKEN" \ "$CI_API_V4_URL/projects/your-downstream-project-id/trigger/pipeline" elif ! echo "$initial_response" | jq -e '.id' > /dev/null; then # 非目标错误,终止任务 echo "任务失败,错误类型不匹配" exit 1 fi
内容的提问来源于stack exchange,提问作者k.pavan kumar
相关产品推荐
相关产品推荐

