3

在 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

任何的想法??

4

3 回答 3

4

我用过这个:

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

之后:

script {
  load('packageVersion.properties')}

使用值:

echo("---- PACKAGE_VERSION: ${env.PACKAGE_VERSION} ----")
于 2019-01-09T09:58:29.590 回答
2

如果您有一个仅输出您想要的单条文本的 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/

于 2020-12-03T15:25:27.837 回答
1

我不熟悉詹金斯,但你试过使用Write-output $value1orreturn $value1吗?

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

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

于 2019-01-09T00:49:28.257 回答