Có cách nào để chèn một phê duyệt thủ công trong đường ống Jenkins 2 không?


19

Jenkins 2 có đường ống có một công dân hạng nhất. Tuy nhiên, trong các ví dụ, các tác vụ dường như được thực hiện dưới dạng một chuỗi:

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

Để triển khai vào hệ thống sản xuất, thường cần có sự phê duyệt thủ công; Có cách nào để chèn một nút thủ công để nhấn bên trong một đường ống?

Tôi đã tìm kiếm các bước có thể để thực hiện điều này trên các tài liệu , nhưng không có kết quả.


Tôi không biết Jenkins, nhưng không có cách nào để chia kế hoạch xây dựng của bạn thành nhiều bước và có một số bước này chỉ được chạy trên "trình kích hoạt thủ công"?
tiktak

Giải pháp một phần tốt nhất cho đến nay: một inputbước trong đường ống dừng và yêu cầu người dùng nhập liệu (hoặc hủy bỏ quá trình xây dựng). Tuy nhiên, giai đoạn và chỉ báo trạng thái tiếp tục nhấp nháy trong khi tôi muốn trạng thái ổn định (ví dụ: bạn vào đó vào chiều thứ Sáu và quyết định triển khai vào thứ Hai.)
giorgiosironi

Câu trả lời:


18

đầu vào là tùy chọn bạn đang tìm kiếm. Đây là cách tôi đang sử dụng nó. Điều quan trọng là phải có bước bên ngoài một nút, nếu không jenkins sẽ giữ một tác nhân chờ đợi bước tiếp theo. Hãy nhớ rằng nút thứ hai có thể không sử dụng cùng một không gian làm việc như nút đầu tiên.

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

Với nhiều đường ống có thể đến đó, điều gì xảy ra với những người lớn tuổi không được triển khai sản xuất? Có cách nào để ngăn những người lớn tuổi còn lại ở đó (không biết liệu họ có nhấp nháy không) trong trạng thái không hoàn chỉnh?
giorgiosironi

1
theo như tôi có thể nói nó sẽ nhấp nháy mãi mãi cho đến khi bạn nhấp vào phá thai, điều này khá là nhảm nhí. bạn có thể có thể thiết lập thời gian chờ để ngăn một số trong số này bị mất. Sau khi hết thời gian, bạn sẽ mất khả năng triển khai nó. jenkins.io/doc/pipeline/steps/workflow-basic-steps/...
Steve Miskiewicz

1
Tôi không hiểu rằng đầu vào có thể được cấu hình để không giữ một tác nhân. Điều này làm cho cách đầu vào hữu ích hơn.
djhaskin987

Sẽ rất tuyệt nếu có khả năng triển khai lại một phiên bản, mà không cần xây dựng hoặc triển khai phiên bản trước đó.
tehnicaorg

1

Cuối cùng, tôi đã tạo riêng test-projectprod-project đường ống và đường ống , ở cuối test-projectđoạn mã được hợp nhất thành một approvednhánh.

Sau đó, prod-project đường ống có thể được thiết lập để không kích hoạt cho mọi cam kết mới để có thể triển khai theo yêu cầu.


0

Ngoài ra, bạn cũng có thể thêm thời gian chờ tự động như bên dưới

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

Nếu bạn tra cứu, bạn cũng có thể liên kết đầu vào của jenkins với thông tin đăng nhập của người dùng truy cập Jenkins nếu bạn chỉ muốn cho phép các cá nhân cụ thể có khả năng trả lời - điều đó cũng được củng cố bởi thực tế là các điều khiển Git của bạn cũng đủ.


0

Đây chỉ là một ví dụ đơn giản nhưng bạn có thể kích hoạt nó theo cách bạn cần.

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

0

Tôi đã làm như cách dưới đây bằng cách đọc tài liệu này 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"'

              }
        }
  }
   }
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.