Я пытаюсь сравнить два целых числа в сценарии jenkins, используя groovy. Каждый раз получаю разные ответы. Я сомневаюсь, как преобразовать строку в целое число, затем сравнить ее и затем получить желаемый результат. мой скрипт выглядит так:
pipeline {
agent any
stages {
stage('checkout') {
steps {
script{
dec1='5.11.03'
dec2='5.9.06'
a=dec1.split("\\.")[1]
b=dec2.split("\\.")[1]
c='10'
one = "$a" as Integer
two = "$b" as Integer
three = "$c" as Integer
println("$one")
println("$two")
println("$one".compareTo(10))
println("$two".compareTo(10))
list1 = ("$one" >= "$three") ? 'total 7 repos' : 'total 4 repos'
list2 = ("$two" >= "$three") ? 'total 7 repos': 'total 4 repos'
println("the result for $dec1 is $list1")
println("the result for $dec2 is $list2")
}
}
}
}
}
Здесь я пытаюсь сравнить вторую часть десятичной цифры и проверить, больше ли она 10. Если она больше 10, она должна напечатать «всего 7 репозиториев» или напечатать «всего 4 репозитория». Я также пытался использовать compareTo(), который дает другой результат. может ли кто-нибудь помочь мне с этим. Заранее спасибо. Результат, который я получаю:
11
[Pipeline] echo
9
[Pipeline] echo
1
[Pipeline] echo
8
[Pipeline] echo
the result for 5.11.03 is total 7 repos
[Pipeline] echo
the result for 5.9.06 is total 7 repos
Проблема здесь в том, что вы используете кавычки и символы $ вокруг ваших переменных, но это неправильный синтаксис. Groovy следует синтаксису, подобному Java, и вы можете проверить документ здесь, посвященный переменным Groovy: https://groovy-lang.org/semantics.html#_variable_assignment
По сути, проблема в ваших "" и $.
Переключите строки 11-14 на:
println(one.compareTo(10))
println(two.compareTo(10))
list1 = (one >= three) ? 'total 7 repos' : 'total 4 repos'
list2 = (two >= three) ? 'total 7 repos': 'total 4 repos'
Должно решить проблему.
@MB да, изменение кода, как вы упомянули, дало идеальный результат ... Большое спасибо за ваш подробный ответ ...
one
— целое число, а"$one"
— gstring. Избегайте использования"$xyz"
, и ваш код должен работать.