【问题标题】:Passing variables between PS stages on different agents in jenkins pipeline在詹金斯管道中不同代理的PS阶段之间传递变量
【发布时间】:2018-12-06 12:55:06
【问题描述】:

我有一个带有两个(powershell)阶段的詹金斯管道,每个阶段都在不同的节点/从站上运行。

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

值得澄清的是,这个变量是在第 1 阶段动态设置的,这意味着像使用 scriptdefenvironment 声明 env:var 这样的解决方案没有帮助(我尝试了很多组合) -每次运行管道时,值都会有所不同。

我尝试在第 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"
        }
    }
  }
}

有什么想法吗?

谢谢!

【问题讨论】:

    标签: powershell jenkins groovy environment-variables jenkins-pipeline


    【解决方案1】:

    在我的脚本中,我在管道标签上方定义了一个 var,然后我使用了

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

    生成我的 Powershell 输出。

    'returnStdout: true' 
    

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

    在另一个阶段,我使用 bat 调用 PowerShell 脚本并将我的 var 写入它:

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

    希望对您有所帮助。

    问候

    【讨论】:

    • 这无济于事!您帮助从命令中获得了输出,但是一旦获得了该输出并且您想将其用作其他从属服务器上的变量,它将无法访问!
    猜你喜欢
    • 2017-02-11
    • 2012-03-31
    • 1970-01-01
    • 1970-01-01
    • 2016-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多