You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 05:10:32