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

Jenkins流水线失败时如何保留Slave Pod?

在Jenkins流水线失败时保留Slave Pod的解决方案

针对你遇到的podRetention: onFailure()仅识别Pod自身状态而非流水线任务状态的问题,以下是几种可行的解决方法:

方法一:在流水线失败阶段手动标记Pod保留

在流水线的post失败块中,通过kubectl命令给当前Slave Pod添加自定义注解,阻止Jenkins的清理逻辑删除它。

示例代码:

pipeline {
  agent {
    kubernetes {
      yaml '''
        apiVersion: v1
        kind: Pod
        metadata:
          labels:
            jenkins-slave: pipeline-slave
        spec:
          containers:
          - name: jnlp
            image: jenkins/inbound-agent:latest
          - name: docker
            image: docker:latest
            command: ["sleep", "infinity"]
      '''
      podRetention never() // 默认不保留,避免资源浪费
    }
  }
  stages {
    stage('Build') {
      steps {
        // 替换为你的实际流水线步骤,这里用exit 1模拟失败
        sh 'exit 1'
      }
    }
  }
  post {
    failure {
      script {
        // 从节点名称提取Pod名称(Jenkins节点名格式通常为pod-name-随机后缀)
        def podName = env.NODE_NAME.split('-')[0..-2].join('-')
        // 添加注解标记Pod需保留
        sh "kubectl patch pod ${podName} -p '{\"metadata\":{\"annotations\":{\"jenkins.io/retention\":\"keep\"}}}' -n ${env.JENKINS_NAMESPACE}"
      }
    }
  }
}

注意:需确保Jenkins代理的ServiceAccount拥有操作Pod的权限,后续需手动清理这些保留的Pod。

方法二:动态切换PodRetention策略

通过try-catch捕获流水线失败状态,动态调整PodRetention策略,确保流水线失败时保留Pod。

示例脚本化流水线:

def podRetention = 'never'

try {
  podTemplate(
    yaml: '''
      apiVersion: v1
      kind: Pod
      spec:
        containers:
        - name: jnlp
          image: jenkins/inbound-agent:latest
    ''',
    podRetention: podRetention
  ) {
    node {
      stage('Build') {
        sh 'exit 1' // 模拟流水线失败
      }
    }
  }
} catch (Exception e) {
  podRetention = 'onFailure'
  throw e // 重新抛出异常,维持流水线失败状态
}

方法三:自定义插件扩展(进阶)

如果上述方法无法满足需求,可基于Jenkins Kubernetes插件进行二次开发,扩展PodRetention的判断逻辑,让其识别流水线任务的失败状态。这种方式需要具备Jenkins插件开发能力。

内容的提问来源于stack exchange,提问作者Bryan Chen

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 07:45:26