在詹金斯管道中不同代理上的PS阶段之间传递变量

时间:2018-06-27 14:59:04

标签: powershell jenkins groovy environment-variables pipeline

我有一个jenkins管道,具有两个(powershell)阶段,每个阶段在不同的节点/从站上运行。

我试图在第一阶段(在节点1上)设置一个变量,然后在下一阶段(在节点2上)之后使用它-但是,我找不到在它们之间传递此变量的方法。

值得说明的是,该变量是在阶段1中动态设置的,这意味着使用env:varscriptdef声明environment的解决方案无济于事(我尝试了多种组合)-每次运行管道时,该值可能会有所不同。

我尝试在阶段1中为env var设置一个新值,但看起来它仅在运行阶段的上下文中影响它的值。

(是的,它必须在powershell中并且在不同的节点上)

这是管道的基本概念(不起作用)

pipeline {
agent { label 'Node1' }

stages{ 
    stage('Calculate'){
        steps {
            git changelog: false, credentialsId: 'user', poll: false, url: 'https://mygit.com/myrepo.git'

            powershell '''
            $currentVersion=[version]$(git describe --tags)
            $newVersion=New-Object -TypeName System.Version($currentVersion.Major, $currentVersion.Minor, $currentVersion.Build, ($currentVersion.Revision + 1))
            '''
        }
    }

    stage('Act'){
        agent { label 'Node2' }
        steps {
            powershell "Write-Host $env:newVersion"
        }
    }
  }
}

有什么想法吗?

谢谢!

1 个答案:

答案 0 :(得分:0)

在脚本中,我在管道标记上方定义了一个变量,然后使用

returnValue = powershell returnStdout: true, script: '...'

生成我的Powershell输出。

'returnStdout: true' 

是从PowerShell脚本接收输出的关键。

在另一个阶段中,我使用bat调用PowerShell脚本并将其sned设置为它:

bat "powershell -File script.ps1 ${returnValue}"

希望有帮助。

问候