web-dev-qa-db-ja.com

Jenkins 2パイプラインに手動承認を挿入する方法はありますか?

Jenkins 2にはパイプラインがあり、一流の市民がいます。ただし、例では、タスクは単一のシーケンスとして実行されているように見えます。

node {
   // Mark the code checkout 'stage'....
   stage 'Checkout'

   // Get some code from a GitHub repository
   git url: '[email protected]:elifesciences/elife-bot.git'

   // Mark the code build 'stage'....
   stage 'Build'
   echo "Unit tests will run here"

   stage "Production"
   echo "Deploying to production environment"
}

本番システムへの導入には、手動による承認が必要な場合がよくあります。手動ボタンを挿入してパイプライン内を押す方法はありますか?

私はこれを達成するための可能なステップを探していました the docs が役に立たない。

20
giorgiosironi

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

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

最後に、個別のtest-projectパイプラインとprod-projectパイプラインを作成しました。このパイプラインでは、test-projectの最後にコードがapprovedブランチにマージされます。

次に、prod-projectパイプラインを設定して、新しいコミットごとにトリガーされないようにして、オンデマンドでデプロイできるようにすることができます。

1
giorgiosironi

これは単なる例ですが、必要に応じてトリガーできます。

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

私はこのドキュメントを読むことで以下のように行いました 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"'

              }
        }
  }
   }
0
user5956891

さらに、以下のように自動タイムアウトを追加することもできます

        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
Kru