Return 从 powershell 到管道内部管道的值

Return Value from powershell to pipeline inside pipeline

在 Jenkins 管道中,我想要 return 从 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
                    }
                }
            }
        }
    }

然后我想 return 从 powershell 脚本中获取 $value1 以便在另一个步骤中使用它。

我尝试使用 $ENV 但不起作用

$ENV:Value1 = $resultQuery.code

有什么想法吗??

我不熟悉 Jenkins,但您尝试过使用 Write-output $value1return $value1 吗?

我发现在我的一些 powershell 脚本中,我输出的任何内容都会被捕获并返回给调用函数。 当然,您需要以某种方式在 Jenkins 端保存该值以重用它。

另一种方法是将值保存到文件中并从文件中读取。您可以使用 $value1 | out-file C:\temp\temp.txt 完成它,然后在单独的脚本中使用 Get-Content C:\temp\temp.txt 读取它。

我用过这个:

powershell('''                       
 "env.PACKAGE_VERSION='$newversion'" | Out-File packageVersion.properties -Encoding ASCII
''')

以后:

script {
  load('packageVersion.properties')}

使用值:

echo("---- PACKAGE_VERSION: ${env.PACKAGE_VERSION} ----")

如果您有一个只输出您想要的单段文本的 powershell 脚本,那么您可以使用 returnStdout 参数将该值返回给管道脚本:

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/