Jenkins 管道 - 如何 运行 基于定义参数的阶段

Jenkins pipeline - How to run a stage based on defined parameter

我有一个包含几个阶段的 jenkins 管道 - 我希望仅在 deploy 参数 == yes 的情况下 运行 copy_file 阶段。我曾尝试使用 when 但它不起作用

servers =['100.1.1.1', '100.1.1.2']
deploy = yes

pipeline {
    agent { label 'server-1' }

    stages {
        stage('Connect to git') {
            steps {
                    git branch: 'xxxx', credentialsId: 'yyy', url: 'https://zzzz'
            }
        }
        stage ('Copy file') {
            when { deploy == 'yes' }
            steps {
                dir('folder_a') {
                    file_copy(servers)
                }
            }
        }
    }
}

def file_copy(list) {
    list.each { item ->
        sh "echo Copy file"
        sh "scp 11.txt user@${item}:/data/"
    }
}

首先声明一个环境变量。

environment {
    DEPLOY = 'YES'
}

现在在这样的when条件下使用它。

when { environment name: 'DEPLOY', value: 'YES' }

Jenkins 中有两种流水线代码。

  1. 声明式管道
  2. 脚本化管道(groovy 脚本)

您正在以声明方式编码,因此您需要遵循声明语法。

注意:还有其他方法可以实现您想要实现的目标。我的意思是说你可能会使用不同的逻辑。

另一种方法是使用参数:

parameters { 
   choice choices: ['YES', 'NO'], description: 'Deploy?', name: 'DEPLOY'
}
stages {
  stage ('continue if DEPLOY set to YES') {
    when {
      expression { params.DEPLOY == 'YES' }
    }
    steps {
      ...
    }
  }
}