#groovy
#groovy
Вопрос:
привет, я пытаюсь понять проблему, при которой given if (version_exists != '' amp;amp; env.force_build == true)
оценивается как true, даже если env.force_build имеет значение false
pipeline {
agent { label 'master' }
parameters {
string(defaultValue: 'DEV', description: '', name: 'ENV', trim: true)
string(defaultValue: 'sys', description: '', name: 'platform_type', trim: true)
string(defaultValue: 'yyy', description: '', name: 'dev_app_host', trim: true)
string(defaultValue: 'xxx.dv.local', description: '', name: 'dev_xbar_host', trim: true)
string(defaultValue: '1.0.0.23', description: '', name: 'VERSION', trim: true)
booleanParam(defaultValue: false, description: 'force build if possible', name: 'force_build')
}
environment {
git_credential_id = '1234'
app_name = 'application'
app_module_name = 'dvmt_event_processor'
app_git_url = 'ssh://git@oooo:7999/data/application.git'
dna_common_git_url = 'ssh://git@oooo:7999/data/dna-common.git'
ansible_git_url = 'ssh://git@oooo:7999/data/operations-ansible.git'
pip_port = '9700'
}
stages {
stage('checkout from SCM') {
.....
}
stage('build') {
steps {
script {
// version_exists == dvmt_event_processor-1.0.0.23-py2.py3-none-any.whl
// force_build == false
def version_exists = ''
version_exists = sh(script: "ssh -o StrictHostKeyChecking=no ansible@pypi server ls /var/pypi/packages/dev/ | grep ${env.app_module_name} | grep ${env.VERSION}" , returnStdout: true)
if (version_exists != '' amp;amp; env.force_build == true) {
......
// evaluating to true no matter what
}
}
else if (version_exists != '' amp;amp; env.force_build == false ) {
echo "version already exists, just deploying"
......
}
else {
echo "starting full build"
.........
}
}
}
}
stage('Test') {
steps {
echo 'Testing...'
.............
}
}
}
}
консоль Дженкинса o / p
dvmt_event_processor-1.0.0.23-py2.py3-none-any.whl
[Pipeline] echo
false
[Pipeline] echo
starting full build
Ответ №1:
env.force_build
выводится как логическое значение, но это строка.
"false" == true
// → false
"false" == false
// → false
Всегда отлаживайте подобные проблемы с помощью соответствующих инструментов. Используйте .inspect()
или даже .dump()
для получения информации, какие данные у вас есть под рукой:
"false".inspect()
// → 'false'
"false".dump()
// → <java.lang.String@5cb1923 value=[102, 97, 108, 115, 101] coder=0 hash=97196323>
Обратите внимание на кавычки вокруг false
.inspect()
примера.
Чтобы преобразовать строку в логическое значение с помощью groovy, вы можете использовать String.toBoolean()
:
"false".toBoolean() == true
// → false
"false".toBoolean() == false
// → true