从Powershell返回值到管道内部的管道

时间:2019-01-08 20:01:48

标签: powershell jenkins return-value pipeline invoke-sqlcmd

在詹金斯管道中,我想从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

任何想法?

3 个答案:

答案 0 :(得分:0)

我对詹金斯不熟悉,但是您是否尝试过使用Write-output $value1return $value1

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

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

答案 1 :(得分:0)

我用过这个:

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

稍后:

script {
  load('packageVersion.properties')}

使用值:

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

答案 2 :(得分:0)

如果您有一个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/