Возвращаемое значение из powershell для конвейера внутри конвейера
В Jenkins Pipeline я хочу вернуть значение из powershell в конвейер, но я не знаю, как
Пример:
pipeline {
agent any
stages {
stage('Return Value') {
steps {
parameters([
string(name: 'Value1'),
])
powershell '''
parameters for conection ...
extra parameters ....
$resultQuery= Invoke-Sqlcmd @conection -QueryTimeout 0 -ErrorAction Stop
$value1 = $resultQuery.code <# 1000 #>
$message = $resultQuery.message <# Some message #>
''')
}
}
stage('Another Step') {
steps {
//I want ... if ($value1 <= 1000)
// do something
}
}
}
}
}
Затем я хочу вернуть из сценария powershell $value1 для использования в другом шаге.
я пытаюсь с $ENV, но не работает
$ENV:Value1 = $resultQuery.code
любая идея??
2 ответа
Я использовал это:
powershell('''
"env.PACKAGE_VERSION='$newversion'" | Out-File packageVersion.properties -Encoding ASCII
''')
потом:
script {
load('packageVersion.properties')}
используя значение:
echo("---- PACKAGE_VERSION: ${env.PACKAGE_VERSION} ----")
Если у вас есть сценарий PowerShell, который просто выводит нужный фрагмент текста, то вы можете использовать
returnStdout
param, чтобы вернуть это значение в сценарий конвейера:
steps {
script {
env.MY_RESULT = powershell(returnStdout: true, script:'echo hi')
}
echo "${env.MY_RESULT}" // prints "hi"
}
подробнее здесь: https://www.jenkins.io/blog/2017/07/26/powershell-pipeline/
Я не знаком с Дженкинсом, но вы пытались использовать Write-output $value1
или же return $value1
?
Я обнаружил, что в некоторых моих сценариях powershell все, что я выводил, захватывается и возвращается в вызывающую функцию. Конечно, вам нужно как-то сохранить значение на стороне Дженкинса, чтобы использовать его повторно.
Другой способ - сохранить значение в файле и прочитать его из файла. Вы можете сделать это с помощью $value1 | out-file C:\temp\temp.txt
а затем прочитать его с помощью Get-Content C:\temp\temp.txt
в отдельном скрипте.