目前在設計 Jenkins 流水線碰到個問題是,當流水線過程設計了某一個 stage 需要人工去觸發話,在按下觸發前會持續佔用 agent,他在等我按,但我想等真正要佈署時再按啊!
已知拆成兩個不同作業可以避免,但就需去兩個不同作業裡執行,且作業相依性低,怕誤觸或佈署錯誤版本。設計目標是希望能像 Gitlab CI 一樣,一個 Pipeline 流水線裡前後相依,不同 Stage 的工作,可以 Unit Test、Secure Check、Build 等流程都自動,Deploy 是等真正要時再手動觸發快速上線,這中間期間都不佔用有限的 agent/executor 數量。
以下是簡易 jenkinsfile 內容,實際流程會加入其他過程,最後才視上線時間手動 Deploy
pipeline {
agent {
node {
label 'master'
}
}
options {
disableConcurrentBuilds()
}
stages {
stage('Build') {
steps {
script {
println("建置")
}
}
}
stage('Deploy') {
when {
expression { params.env == "prod" }
}
steps {
input message: '確認佈署到正式環境?', submitterParameter: 'deploy'
script {
println("佈署")
}
}
}
}
}