首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Jenkins Pipeline:如何跳到其他阶段?

Jenkins Pipeline:如何跳到其他阶段?
EN

Stack Overflow用户
提问于 2017-10-20 06:24:34
回答 3查看 9.5K关注 0票数 2

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

节点{stage(‘one’){ sh‘echo one 'stage2’stage2| stage3 | stage4‘}stage(’two‘){ sh’echo two‘}stage(’three‘){ sh’echo three‘}stage(’four‘){ sh’echo four‘}}

EN

回答 3

Stack Overflow用户

发布于 2017-10-20 13:26:19

您可以在脚本化管道中做到这一点。我是在声明式中创建的,但如果您喜欢,将其反向工程为一个脚本化管道应该很容易。

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

代码语言:javascript
复制
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"
            }
        }

    }
}
票数 3
EN

Stack Overflow用户

发布于 2017-10-20 13:00:44

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

代码语言:javascript
复制
node {
  if(lint == true) {
    load("lint.groovy").lint()
  }
  if(test == true) {
    load("test.groovy").test()
  }
}

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

票数 0
EN

Stack Overflow用户

发布于 2017-11-08 08:39:28

谢谢你的帮助。以下是我解决的问题,我将阶段包装在if...else条件中

代码语言:javascript
复制
if (env.BRANCH_NAME == 'branch name') {
env.DEPLOY_TO_LAST = input message: 'User input required',
        parameters: [choice(name: 'Deploy to LAST', choices: 'no\nyes')]
if (env.DEPLOY_TO_LAST == 'yes'){
    stage('LAST') {
        node('') {
            sh 'echo "stage Last"'
            unstash(name: 'Saved')
        }
    }
}
else {
    stage('FIRST') {
        node('') {
            sh 'echo "stage FIRST"'
            unstash(name: 'Saved')
        }
    }
    stage('SECOND') {
        node('') {
            sh 'echo "stage SECOND"'
            unstash(name: 'Saved')
        }
    }
    stage('THIRD') {
        node('') {
            sh 'echo "stage THIRD"'
            unstash(name: 'Saved')
        }
    }
}

}

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46839772

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档