Jeknins трубопровод Global Vars - вернуть переменную из сценария оболочки, а затем экспортировать ее в сценарий оболочки - PullRequest
0 голосов
/ 30 апреля 2019

Мне нужно разделить тег git по тире.Вот пример данных:

DEVQA-10000000-6d26fa05def3fa94a2acd0ca12fcdd6a82fc46d7-SUCCESS

Это должно делиться на $ 1- $ 2- $ 3- $ 4

Моя идея заключалась в том, чтобы использовать awk git tag -l | grep DEVQA | awk -F '[ -]' '{print $1}' дляinstance.

Я попытался определить с помощью withEnvs, я попытался получить значения в другом скрипте и загрузить его в мой, т.е. загрузить 'env / file'

Я не могу понять это.Он печатает команды при запуске конвейера s

stage('Build ') {
def buildRecordId = sh(script: "git tag -l | grep DEVQA | awk -F \'[ -]\' \'{print \$2}\'", returnStdout: true).trim() as Integer
def startRev = sh(script: "git tag -l | grep DEVQA | awk -F \'[ -]\' \'{print \$3}\'", returnStdout: true).trim()
def testlevel="noLocalTests"
sh """ export testlevel="${testlevel}";
export startrevision="${env.startRev}";
export buildrecordid="${env.buildRecordId}";
echo "I worked: $startrevision";
/tools/ant/apache-ant-1.9.4/bin/ant  -verbose -buildfile ./buildtool/build.xml -propertyfile ./buildtool/build.properties.hc.inc.dev startCICD
            """
                    }

И, конечно, не находит startrevision:

"groovy.lang.MissingPropertyException: Нет такого свойства: startrevision для класса: groovy.lang.Binding в groovy.lang.Binding.getVariable (Binding.java:63) в org.jenkinsci.plugins.scriptsecurity.sandbox.groovy.SandboxInterceptor.onGetProperty (SandboxInterceptor.java:264)

1 Ответ

0 голосов
/ 01 мая 2019

Вы использовали тройную двойную кавычку в шаге sh, которая будет выполнять интерполяцию строки перед выполнением bash внутри шага sh.Подробнее см. Здесь здесь

Строковая интерполяция попытается заменить ${ABC} или $ABC значением переменной groovy ABC.

Ваша ошибка говорит о том, что она не в состояниинайти переменную groovy startrevision при выполнении интерполяции.

Если startrevision намеревается быть переменной окружения bash, вам нужно экранировать $ на \$, если переменная groovy, укажите и назначьтезначение для него.

echo "I worked: \$startrevision";
...