#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.