从Jenkins Pipeline获取PowerShell脚本的输出值

4

我有一个简单的Jenkins流水线,调用了一个PS文件。 PS文件返回一些值,我想知道是否可以将这些值保存到变量中,并在我的流水线步骤中使用这些变量。

    pipeline {
    agent {label 'agent'}        
stages {

       stage("first script"){
            steps {
                echo "Current agent  info: ${env.AGENT_INFO}"
                script {
                        def msg = powershell(returnStdout: true, script: '.\\Get-Guid.ps1')
//                        def msg = powershell(returnStdout: true, script: 'ipconfig')
                            println "The new GUID is:  ${msg}"
                            my_guid = msg
                            env.my_guid  = my_guid
                  //      print msg#
                  echo "Is my GUID: ${my_guid}"

                }
            }
        }


        stage("Second Script"){
            steps {
                script {
                   def msg = powershell(returnStdout: true, script: 'write-output "Powershell is Great"')
             //       println msg
                }
            }
        }
    }
}

Get-GUID.ps1 的内容如下。
$buildguid = (New-Guid).Guid
$name = "Tom"

Write-Output $buildguid
Write-Output $name

理想情况下,我希望将value或buildguid存储在与管道分开的变量中,并将名称存储在另一个变量中。

有一个潜在的答案在 https://dev59.com/H5vga4cB1Zd3GeqP1WdF#58081219 - Sean Saleh
请在这里输入您要翻译的内容。 - Aditya Nair
1个回答

2

修改你的 Get-GUID.ps1 脚本,将输出写入一个或多个文件,并从中检索值。

你的 Get-GUID.ps1 文件将如下所示:

$buildguid = (New-Guid).Guid
$name = "Tom"

Write-Output $buildguid | Out-File "buildguid.txt"
Write-Output $name | Out-File "name.txt"

可以通过以下方式从管道中检索输出:

pipeline {
    agent { label 'windows' }
    stages {
        stage("Populate variables")
        {
            steps {
                script {
                    def result = powershell returnStatus:true, script: '.\\Get-GUID.ps1'
                }
            }
        }
        
        stage("Display variables")
        {
            steps {
                script {
                    def guid = powershell returnStdout:true, script: 'Get-Content .\\buildguid.txt'
                    def name = powershell returnStdout:true, script: 'Get-Content .\\name.txt'
                    print guid.trim()
                    print name.trim()
                }
            }
        }
    }
}

注意:在检索输出时不要忘记使用trim()函数进行修剪。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接