Örnek bir jenkins boru hattı oluşturuyorum, işte kod.
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'
}
}
}
}
bu boru hattı aşağıdaki hata günlükleri ile başarısız olur
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') {
^
Ancak aşağıdaki örneği bu url'den çalıştırdığımda, başarıyla yürütülüyor ve else kısmını yazdırıyor.
node {
stage('Example') {
if (env.BRANCH_NAME == 'master') {
echo 'I only execute on the master branch'
} else {
echo 'I execute elsewhere'
}
}
}
Görebildiğim tek fark, çalışan örnekte stages
yok ama benim durumumda var.
Burada yanlış olan nedir, lütfen biri önerebilir mi?
ilk denemeniz bildirimsel boru hatlarını kullanıyor, ikinci denemeniz ise komut dosyası boru hatlarını kullanıyor. adımları bir adım bildirimi içine almanız gerekir ve bildirimselde üst düzey bir adım olarak if
kullanamazsınız, bu nedenle bunu bir script
adımına sarmanız gerekir. işte çalışan bir bildirimsel sürüm:
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'
}
}
}
}
}
}
bunu basitleştirebilir ve "when" kullanarak if deyiminden (else'e ihtiyacınız olmadığı sürece) kaçınabilirsiniz. Bakınız "when directive" https://jenkins.io/doc/book/pipeline/syntax/. jenkins rest api'sini kullanarak jenkins dosyalarını da doğrulayabilirsiniz. süper tatlı. jenkins'te bildirimsel boru hatlarıyla iyi eğlenceler!
Biraz yeniden düzenleme gerektirir, ancak when
yukarıdaki koşullu ifadeleri değiştirmek için iyi bir iş çıkarır. İşte bildirimsel sözdizimi kullanılarak yazılmış yukarıdaki örnek. Test3` aşamasının artık iki farklı aşama olduğuna dikkat edin. Biri ana dal üzerinde çalışan, diğeri ise başka herhangi bir dal üzerinde çalışan.
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()
}