Jenkins 2 파이프 라인에 수동 승인을 삽입하는 방법이 있습니까? 단일 시퀀스로 실행되는 것으로

Jenkins 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"
}

프로덕션 시스템에 배포하려면 수동 승인이 필요한 경우가 종종 있습니다. 파이프 라인 내부를 누르기 위해 수동 버튼을 삽입하는 방법이 있습니까?

나는 문서 에서 이것을 달성 할 수있는 가능한 단계를 찾고 있었지만 아무 소용이 없었다.



답변

입력 은 당신이 찾고있는 옵션입니다. 내가 사용하는 방법은 다음과 같습니다. 단계는 노드 외부에 있어야합니다. 그렇지 않으면 jenkins는 다음 단계를 기다리는 에이전트를 보유합니다. 두 번째 노드는 첫 번째 노드와 동일한 작업 공간을 사용하지 않을 수 있습니다.

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

답변

결국 나는 별도의 생성 test-projectprod-project파이프 라인이 곳의 끝 부분에 test-project코드가에 병합되는 approved지점입니다.

그런 다음 prod-project모든 새 커밋에 대해 트리거하지 않도록 파이프 라인을 설정하여 필요할 때 배포 할 수 있습니다.


답변

또한 아래와 같이 자동 타임 아웃을 추가 할 수도 있습니다

        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 컨트롤도 충분하다는 사실에 근거합니다.


답변

이것은 간단한 예일 뿐이지 만 필요한 경우 트리거 할 수 있습니다.

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

답변

나는이 문서를 읽고 아래에 표시된 것처럼 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"'

              }
        }
  }
   }