Команда оболочки Jenkinsfile не использует переменные env, как ожидалось

#jenkins #groovy

Вопрос:

В моем файле Дженкинса я хочу динамически найти версию unity, используя скрипт на python, например:

 


 environment {
    UNITY_EDITOR = bat(script: "py $WORKSPACE/get_versions.py --unity", returnStdout: true).trim()
    UNITY_BASE = "C:/Program Files/Unity/Hub/Editor/$UNITY_EDITOR/Editor/Unity.exe"
    UNITY_WRAPPER = "UnityBatchWrapper -silent-crashes -no-dialogs -batchmode -quit -unityPath "$UNITY_BASE""
}
post {
        always {
            script {
                echo "Returning license"
                licenseReturnStatus = bat ( 
                    script: "$UNITY_WRAPPER -returnlicense",
                    returnStatus: true
                ) == 0
            }
        }
  


Из других ответов на stackoverflow кажется, что это должно сработать, но вместо этого моя работа Дженкинса выдает ошибки на этапе после сборки, потому что $UNITY_WRAPPER не определен:

 groovy.lang.MissingPropertyException: No such property: UNITY_WRAPPER for class: groovy.lang.Binding
 

Я думаю, что пакетный шаг-это то, что терпит неудачу, хотя Дженкинс на это не жалуется. Я также пробовал использовать $env.РАБОЧЕЕ ПРОСТРАНСТВО и %РАБОЧЕЕ ПРОСТРАНСТВО%, и это тоже не работает.
Я начинаю думать, что $WORKSPACE не существует до завершения шага среды...

Комментарии:

1. Ваш код в post разделе в порядке и должен работать, у вас, вероятно, проблема в UNITY_EDITOR = bat(...).trim() команде, которая выдает ошибку, и, следовательно UNITY_BASE , UNITY_WRAPPER параметры не заданы, и вы получаете ошибку "Нет такого свойства". убедитесь, что у вас нет предыдущих ошибок в environment блоке.

Ответ №1:

Оказывается, у меня не был установлен Python, так как это был эфемерный конструктор GCP, и я еще не обновил метку узла.

Для тех, кто читает это, у кого есть проблемы с командами bat - обязательно поставьте знак @ перед своей командой, например "@py...", иначе команда будет повторена в выводе. Также урежьте свой вывод, чтобы в нем не было CRLF.