Jenkins 2 파이프 라인에 수동 승인을 삽입하는 방법이 있습니까?


19

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는 모르지만 빌드 계획을 여러 단계로 나누고이 단계 중 일부를 "수동 트리거"에서만 실행할 수있는 방법이 없습니까?
tiktak

지금까지 가장 좋은 부분 솔루션 : input파이프 라인에서 단계를 멈추고 사용자에게 입력을 요청 하는 단계 (또는 빌드 중단). 그러나 안정적인 상태를 원할 때 스테이지와 상태 표시기가 계속 깜박입니다 (예 : 금요일 오후에 들어가 월요일에 배포하기로 결정)
giorgiosironi

답변:


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/…
Steve 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"'

              }
        }
  }
   }
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.