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


19

詹金斯2号管道拥有一流的公民。但是,在示例中,任务似乎是按单个序列执行的:

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

   // Get some code from a GitHub repository
   git url: 'git@github.com:elifesciences/elife-bot.git'

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

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

为了部署到生产系统中,通常需要人工批准;有没有一种方法可以插入手动按钮以在管道内部按下?

我一直在寻找可能的步骤来在docs上完成此操作,没有成功。


我不了解詹金斯(Jenkins),但是没有办法将您的构建计划分为几个步骤,而其中一些步骤只能在“手动触发器”上运行吗?
tiktak '16

迄今为止最好的部分解决方案:input管道中的一个步骤,该步骤停止并要求用户输入(或中止构建)。但是,当我想要一个稳定的状态时,舞台和状态指示灯会不断闪烁(例如,您在星期五下午进入状态并决定在星期一部署。)
giorgiosironi

Answers:


18

输入是您要寻找的选项。这是我使用它的方式。将步骤置于节点之外很重要,否则jenkins将让代理等待下一步。请记住,第二个节点可能不会使用与第一个相同的工作空间。

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

如果有多个管道可以到达那儿,那么那些没有部署到生产环境中的老管道会怎样呢?有没有一种方法可以阻止较旧的孩子以不完整的状态停留在那里(不知道它们是否会闪烁)?
giorgiosironi

1
据我所知,它将永远闪烁,直到您单击中止,这是非常糟糕的。您可能会设置超时,以防止其中的一些丢失。超时后,您将失去部署它的能力。 jenkins.io/doc/pipeline/steps/workflow-basic-steps/...
史蒂夫Miskiewicz

1
我不知道可以将输入配置为容纳代理。这使输入方式更有用。
djhaskin987

能够重新部署一个版本而不构建或部署以前的版本,将是一个很好的选择。
tehnicaorg

1

最后,我创建了单独的test-projectprod-project管道,在test-project代码末尾将代码合并到一个approved分支中。

然后,prod-project可以将管道设置为不为每个新的提交触发,以便可以按需部署它。


0

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

        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控件也足够的事实。


0

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

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

0

通过阅读此文档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"'

              }
        }
  }
   }
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.