我有一个jenkins管道,具有两个(powershell)阶段,每个阶段在不同的节点/从站上运行。
我试图在第一阶段(在节点1上)设置一个变量,然后在下一阶段(在节点2上)之后使用它-但是,我找不到在它们之间传递此变量的方法。
值得说明的是,该变量是在阶段1中动态设置的,这意味着使用env:var
或script
或def
声明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"
}
}
}
}
有什么想法吗?
谢谢!
答案 0 :(得分:0)
在脚本中,我在管道标记上方定义了一个变量,然后使用
returnValue = powershell returnStdout: true, script: '...'
生成我的Powershell输出。
'returnStdout: true'
是从PowerShell脚本接收输出的关键。
在另一个阶段中,我使用bat调用PowerShell脚本并将其sned设置为它:
bat "powershell -File script.ps1 ${returnValue}"
希望有帮助。
问候