Чи є спосіб вставити ручне затвердження в трубопроводи 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"
}

Для впровадження у виробничу систему часто корисно вимагати затвердження вручну; чи є спосіб вставити ручну кнопку для натискання всередині трубопроводу?

Я шукав можливих кроків для досягнення цього в документах , безрезультатно.


Я не знаю Дженкінса, але хіба не існує способу розділити план побудови на кілька етапів, а деякі з цих кроків можна виконати лише на "ручному спуску"?
тиктак

Найкраще часткове рішення поки що: inputкрок в конвеєрі, який зупиняється, і запитує користувача у введення (або перервати збірку). Однак сцена та індикатор стану продовжують мигати, поки я хотів стабільного стану (наприклад, ви потрапляєте в нього в п’ятницю вдень і вирішите розгорнутись у понеділок)
giorgiosironi

Відповіді:


18

введення - це варіант, який ви шукаєте. Ось як я його використовую. Важливо мати крок за межами вузла, інакше дженкіни утримуватимуть агента, очікуючи наступного кроку. Майте на увазі, другий вузол може не використовувати те саме робоче поле, що і перший.

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/…
Стів Міскевич

1
Я не зрозумів , що вхід може бути налаштований , щоб НЕ затримувати агент. Це робить спосіб введення більш корисним.
djhaskin987

Було б непогано мати можливість перевстановити версію, не будуючи, або розгорнути попередню версію.
tehnicaorg

1

Врешті-решт я створив окремі test-projectта prod-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
                """
        }
    }

Якщо ви подивитесь на це, ви також можете прив’язати вхід джинкінів до облікових даних користувачів, які звертаються до Дженкінса, якщо ви лише бажаєте дозволити конкретним особам відповідати - це також підкріплюється тим, що ваші елементи управління 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"'

              }
        }
  }
   }
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.