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

実稼働システムへの展開には、多くの場合、手動の承認が必要です。パイプライン内で押すために手動ボタンを挿入する方法はありますか?

私はドキュメントでこれを達成するための可能な手順を探していましが、無駄になりました。


ジェンキンスは知りませんが、ビルドプランを複数のステップに分割する方法はありません。これらのステップの一部を「手動トリガー」でのみ実行することはできますか?
tiktak

これまでの最善の部分的解決策:inputパイプラインのステップで、停止してユーザーに入力を要求します(またはビルドを中止します)。ただし、安定した状態が必要な間はステージとステータスインジケータが点滅し続けます(たとえば、金曜日の午後になって月曜日に展開することに決めた場合)
giorgiosironi

回答:


18

入力はあなたが探しているオプションです。これが私がそれを使用している方法です。ノードの外にステップがあることが重要です。そうしないと、ジェンキンスは次のステップを待っているエージェントを保持します。2番目のノードは最初のノードと同じワークスペースを使用しない場合があることに注意してください。

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

特定の個人にのみ応答を許可したい場合は、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.