Saya membuat contoh jenkins pipeline, berikut adalah kodenya.
pipeline {
agent any
stages {
stage('test') {
steps {
sh 'echo hello'
}
}
stage('test1') {
steps {
sh 'echo $TEST'
}
}
stage('test3') {
if (env.BRANCH_NAME == 'master') {
echo 'I only execute on the master branch'
} else {
echo 'I execute elsewhere'
}
}
}
}
pipeline ini gagal dengan log kesalahan berikut
Started by user admin
org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed:
WorkflowScript: 15: Not a valid stage section definition: "if (env.BRANCH_NAME == 'master') {
echo 'I only execute on the master branch'
} else {
echo 'I execute elsewhere'
}". Some extra configuration is required. @ line 15, column 9.
stage('test3') {
^
WorkflowScript: 15: Nothing to execute within stage "test3" @ line 15, column 9.
stage('test3') {
^
Tetapi ketika saya mengeksekusi contoh berikut dari url ini, itu berhasil dieksekusi dan mencetak bagian lain.
node {
stage('Example') {
if (env.BRANCH_NAME == 'master') {
echo 'I only execute on the master branch'
} else {
echo 'I execute elsewhere'
}
}
}
Satu-satunya perbedaan yang dapat saya lihat adalah bahwa dalam contoh kerja tidak ada tahapan
tetapi dalam kasus saya ada.
Apa yang salah di sini, adakah yang bisa menyarankan?
percobaan pertama anda menggunakan pipeline deklaratif, dan percobaan kedua menggunakan pipeline skrip. anda perlu menyertakan langkah-langkah dalam deklarasi langkah, dan anda tidak dapat menggunakan jika
sebagai langkah tingkat atas dalam deklaratif, jadi anda perlu membungkusnya dalam langkah skrip
. berikut ini adalah versi deklaratif yang berfungsi:
pipeline {
agent any
stages {
stage('test') {
steps {
sh 'echo hello'
}
}
stage('test1') {
steps {
sh 'echo $TEST'
}
}
stage('test3') {
steps {
script {
if (env.BRANCH_NAME == 'master') {
echo 'I only execute on the master branch'
} else {
echo 'I execute elsewhere'
}
}
}
}
}
}
Anda dapat menyederhanakan ini dan berpotensi menghindari pernyataan if (selama Anda tidak memerlukan else) dengan menggunakan "when". Lihat "when directive" di https://jenkins.io/doc/book/pipeline/syntax/. Anda juga dapat memvalidasi file jenkins menggunakan jenkins rest api. itu'super manis. bersenang-senanglah dengan pipeline deklaratif di jenkins!
Ini memerlukan sedikit pengaturan ulang, tetapi when
melakukan pekerjaan yang baik untuk menggantikan kondisional di atas. Inilah contoh dari atas yang ditulis menggunakan sintaks deklaratif. Perhatikan bahwa tahap test3
sekarang menjadi dua tahap yang berbeda. Satu yang berjalan pada cabang master dan satu lagi yang berjalan pada hal lain.
stage ('Test 3: Master') {
when { branch 'master' }
steps {
echo 'I only execute on the master branch.'
}
}
stage ('Test 3: Dev') {
when { not { branch 'master' } }
steps {
echo 'I execute on non-master branches.'
}
}
if ( params.build_deploy == '1' ) {
println "build_deploy 是 ${params.build_deploy}"
jobB = build job: 'k8s-core-user_deploy', propagate: false, wait: true, parameters: [
string(name:'environment', value: "${params.environment}"),
string(name:'branch_name', value: "${params.branch_name}"),
string(name:'service_name', value: "${params.service_name}"),
]
println jobB.getResult()
}