groovy ошибочно выводит «off» как логическое значение вместо строки - PullRequest
1 голос
/ 03 мая 2019

У меня есть сценарий Jenkinsfile в groovy, который обрабатывает файл application.properties приложения Java, который я только что добавил с помощью

spring.main.banner-mode: off

В моем сценарии я прочитал файл application.properties вкарта в памяти с использованием библиотеки надстроек Jenkins yamlRead, а затем я снова выводю значение в другой файл, но оно выглядит так:

spring.main.banner-mode: false

Это ломает мою Java-программу при загрузке с неприятной пружинойошибка загрузки.Переменная загрузки пружины ожидает либо OFF, FILE или CONSOLE.

У меня нет способа изменить yamlRead, но я могу изменить скрипт вывода, который выглядит следующим образом:

yaml.each {
    key, value -> B: {
            // some processing...
            sh "echo '$base$key=$value' >> $file"
        }
    }
}

Как определить, действительно ли карта имеет логический тип (которыйбыло бы плохо, так как я не могу его изменить) или нежелательное приведение к логическому значению происходит в myy echo >> file?

Или я мог бы как-то заставить groovy не выводить логическое значение, когда он читает входные данные, возможно, скавычки вокруг "выкл"?

Ответы [ 2 ]

4 голосов
/ 03 мая 2019

Все работает как положено. Groovy это не твоя проблема, это YAML. Ссылка YAML говорит, что «off» интерпретируется как «false», как вы можете видеть здесь

https://yaml.org/refcard.html

Jenkins yamlRead считывает «off» и преобразует его в логическое значение со значением «false».

1 голос
/ 03 мая 2019

как писал Томас: off - зарезервированное слово в формате yaml для логического значения false

, однако вы можете заключить его в кавычки, чтобы оно стало строкой:

spring.main.banner-mode: 'off'

в этом случае ключ spring.main.banner-mode будет иметь строковое значение off

, чтобы проверить логическое значение false, вы можете использовать что-то вроде:

yaml.each {
    key, value -> B: {
        // some processing...
        sh "echo '$base$key=${ value==false? 'off' : value }' >> $file"
    }
}

PS: вместо вызова sh для добавления в файл одного значения ключа вы можете использовать следующий код:

def values = yaml.collect{k,v-> "$k=$v"}.join("\n")
writeFile( file: file, text: values )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...