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

如何在Jenkinsfile中实现单个step的条件执行?

解决方案

一共有三种常用实现方式,都可以在不拆分原有stage的前提下实现单个step的条件执行:

方式1:使用script块内嵌if判断(最通用,适用于所有Jenkins版本)

在声明式Pipeline的steps块中插入script块,用Groovy的if逻辑控制单步执行,示例配置如下:

stage('My stage')
{
  steps
  {
    sh 'my_command1.sh'
    // 针对my_command2.sh单独加执行条件
    script {
      // 这里替换为你实际的判断条件,比如分支名、参数值、环境变量等
      if (env.BRANCH_NAME == 'main' && params.RUN_STEP2 == true) {
        sh 'my_command2.sh'
      }
    }
    sh 'my_command3.sh'
  }
}

注意:script块内可以使用所有Jenkins内置变量、自定义参数、Groovy语法逻辑,灵活性最高。


方式2:使用嵌套stage搭配when指令(更符合声明式Pipeline语法规范,Jenkins 2.3以上版本支持)

如果不想引入script块,可以在当前stage内嵌套仅包含单个step的子stage,子stage可以单独设置when指令,配置示例如下:

stage('My stage') {
  stages {
    stage('Run command1') {
      steps {
        sh 'my_command1.sh'
      }
    }
    // 带条件的子stage,仅包含my_command2.sh单步
    stage('Run command2') {
      when {
        // 这里替换为你实际的条件,比如branch、expression、environment等都支持
        expression { env.BRANCH_NAME == 'main' && params.RUN_STEP2 == true }
      }
      steps {
        sh 'my_command2.sh'
      }
    }
    stage('Run command3') {
      steps {
        sh 'my_command3.sh'
      }
    }
  }
}

这种方式的优点是完全遵循声明式Pipeline的语法规范,条件和步骤分离更清晰,在Jenkins UI上也能看到子stage的执行状态,方便排查问题。


方式3:shell级别的条件判断

如果判断逻辑只和shell环境相关,不需要用到Jenkins的Pipeline变量/参数,也可以直接在sh指令内写shell条件,无需修改Pipeline结构:

sh 'if [ "$SHELL_VAR" = "yes" ]; then my_command2.sh; fi'

内容的提问来源于stack exchange,提问作者C.S.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 09:15:04