詹金斯管道:如何跳到其他阶段?

时间:2017-10-19 22:24:34

标签: jenkins

用户需要能够选择跳转到哪个阶段而不是下一个阶段。可以在Jenkins管道中完成吗?例如,在第一阶段之后,用户可以选择跳转到哪个阶段:

节点{   阶段('one'){     sh'echo one'     输入' stage2 | stage3 | STAGE4'   }   阶段('two'){     sh'echy two'   }   阶段('三'){     sh'回声三''   }   阶段('四'){     sh'回声四''   } }

3 个答案:

答案 0 :(得分:1)

您可以在脚本管道中执行此操作。我在声明中创建了这个,但如果这是您的偏好,应该很容易将其反向工程到脚本管道。

基本上,您在输入中提供choice参数,然后使用该值来确定是否应该运行该阶段。在脚本化管道中,您可以使用if / then,或switch语句或任何数量的东西。

pipeline {
    agent none

    stages {
        stage ('First') {
            agent any
            steps {
                echo "First dummy stage"
            }
        }
        stage ('Input') {
            agent none
            steps {
                script {
                    myStage = input message: 'What stage do you want to run now?', parameters: [choice(choices: 'Stage1\nStage2\nStage3', description: '', name: 'Stage')]
                }
                echo myStage
            }
        }

        stage('Stage1') {
            when {
                expression { myStage == 'Stage1' }
            }
            steps {
                echo "Running Stage1"
            }
        }

        stage('Stage2') {
            when {
                expression { myStage == 'Stage2' }
            }
            steps {
                echo "Running Stage2"
            }
        }

        stage('Stage3') {
            when {
                expression { myStage == 'Stage3' }
            }
            steps {
                echo "Running Stage3"
            }
        }

    }
}

答案 1 :(得分:0)

你可以使用groovy来做到这一点。在Jenkinsfile中,您可以定义将执行groovy脚本的条件。作为简化示例,您可以执行以下操作:

node {
  if(lint == true) {
    load("lint.groovy").lint()
  }
  if(test == true) {
    load("test.groovy").test()
  }
}

在上面的示例中,lint.groovy包含lint()个函数,该函数具有lint阶段。对于定义test.groovy函数和test()阶段的test也是如此。

答案 2 :(得分:0)

感谢您的帮助。这是我已经解决的问题,我在if ... else条件

中包含了各个阶段
{{1}}

}