Jenkinsfile Pipeline Модификация динамической среды во время выполнения - PullRequest
0 голосов
/ 13 сентября 2018

Мне нужно получить GitVersion.exe переменных в моем конвейере Дженкинса.

Документация GitVersion дает подсказку, как это сделать. По сути звоните gitversion /output buildserver.

Этот вызов добавляет переменные к текущему шагу, и они теряются после завершения шага. Я могу показать, что этот вызов выполняется при объединении команды set в одном и том же выполнении bat. Второй set показывает, что переменные исчезли из среды.

bat 'nuget install GitVersion.CommandLine -OutputDirectory c:/packages -Version 3.6.5'
bat 'c:/packages/GitVersion.CommandLine.3.6.5/tools/GitVersion.exe /output buildserver && set'
bat 'set'

Документация GitVersion знает об этом и предлагает использовать EnvInject . Установка плагина и выполнение одного и того же конвейера не изменили результат. Я читал, что плагин не предназначен для конвейеров, поэтому может иметь к нему какое-то отношение.

Конвейеры поддерживают синтаксис для окружения .

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

environment {
    ASuperVariable = 'MySuperVariable'
}

Мне нужно объединить эти вызовы, чтобы я мог добавить переменные времени выполнения к Pupeline Jenkinsfile.

environment {
    bat 'gitversion /output buildserver'
}

Теперь очевидно, что приведенный выше вызов даже не является правильным синтаксисом. Есть ли способ отметить раздел так, чтобы содержащиеся изменения среды были доступны для других шагов?

EDIT: Это все еще не решено. На данный момент мне нужно создать пакетный скрипт и передать инструмент в качестве аргумента. Внутри пакета я могу вызвать инструмент для добавления в среду пакетного сценария и использовать его, когда выполняется пакет. Многострочный пакет в файле Jenkins может быть решением, если процесс остается одинаковым для всех нескольких строк.

1 Ответ

0 голосов
/ 15 сентября 2018

Не уверен, сможете ли вы использовать скриптовый конвейер или хотя бы блок скриптов внутри декларативного.Это было бы довольно легко сделать так:

withEnv(['ASuperVariable=MySuperVariable']) {
    echo env.ASuperVariable
}

Или при вызове сценария Windows cmd:

node('win') {
    withEnv(['ASuperVariable=MySuperVariable']) {
        bat 'echo %ASuperVariable%'
    }
}
...