有没有办法在 Jenkins 2 管道中插入手动批准?

有没有办法在 Jenkins 2 管道中插入手动批准?

Jenkins 2 的管道是一等公民。然而,在示例中,任务似乎作为单个序列执行:

node {
   // Mark the code checkout 'stage'....
   stage 'Checkout'

   // Get some code from a GitHub repository
   git url: '[email protected]:elifesciences/elife-bot.git'

   // Mark the code build 'stage'....
   stage 'Build'
   echo "Unit tests will run here"

   stage "Production"
   echo "Deploying to production environment"
}

对于部署到生产系统,通常需要手动批准;有没有办法在管道内插入一个手动按钮来按下?

我一直在寻找可能的步骤来实现这一点文档,但无济于事。

答案1

输入是您正在寻找的选项。这是我使用它的方式。将步骤放在节点之外很重要,否则詹金斯将保留一个代理等待下一步。请记住,第二个节点可能不使用与第一个相同的工作区。

node {
    stage('build'){
        echo "building"
    }
}
stage('Deploy approval'){
    input "Deploy to prod?"
}
node {
    stage('deploy to prod'){
        echo "deploying"
    }
}

答案2

我按照如下所示的方式阅读了此文档https://jenkins.io/doc/book/pipeline/syntax/

pipeline {
environment {
    BRANCH_NAME = "${env.BRANCH_NAME}"
}
agent any
stages{
    stage('Build-Initiator-Info'){
            steps{
                sh 'echo "Send Info"'
            }
    }
    stage('Build') {
        steps{
             catchError {
                sh 'echo "This is build"'
            }
         }
         post {
            success {
                echo 'Compile Stage Successful . . .'
            }
            failure {
                echo 'Compile stage failed'
                error('Stopping early…')

             }
    }
   }
  stage ('Deploy To Prod'){
  input{
    message "Do you want to proceed for production deployment?"
  }
    steps {
                sh 'echo "Deploy into Prod"'

              }
        }
  }
   }

答案3

此外,您还可以添加自动超时,如下所示

        stage('build') {
        steps {
            sh  """
                # Some commands
                """
            script {
              timeout(time: 10, unit: 'MINUTES') {
                input(id: "Deploy Gate", message: "Deploy ${params.project_name}?", ok: 'Deploy')
              }
            }
        }
    }

    stage('deploy') {
        when {
            branch 'master'
        }
        steps {
            sh  """
                # some commands
                """
        }
    }

如果您查找它,如果您只希望允许特定的个人能够回答,您还可以将 jenkins 输入绑定到访问 Jenkins 的用户的凭据 - 这也是由您的 Git 控制也足够的事实支撑的。

答案4

这只是一个简单的例子,但您可以根据需要触发它。

stage{
    script{
        input "Continue?"
        ...enter code here
        ...
    }
}

相关内容