Возвращаемое значение из 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 в отдельном скрипте.

Другие вопросы по тегам