มีวิธีแทรกการอนุมัติด้วยตนเองในท่อส่งเจนกินส์ 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

อินพุตเป็นตัวเลือกที่คุณต้องการ นี่คือวิธีที่ฉันใช้ เป็นสิ่งสำคัญที่จะต้องมีขั้นตอนนอกโหนดมิฉะนั้นเจนกินส์จะถือตัวแทนรอขั้นตอนต่อไป โปรดทราบว่าโหนดที่สองอาจไม่ใช้พื้นที่ทำงานเดียวกันกับโหนดแรก

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

              }
        }
  }
   }
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.