从批处理文件检索变量的输出/状态到 jenkins 管道



我正在尝试通过将 env 变量最初设置为 true 来检索 bat 中可用变量的输出/状态到 jenkins 管道。

我的期望是,根据 bat 内部分配的变量的值(即 status=false(,下一阶段无法执行,因为当在该阶段给出表达式时:

pipeline {
    agent any
    environment{
        STATUS='TRUE'
    }
    stages {
        stage('test1') {
            steps {
                bat '''set status=FALSE 
echo %status%'''   
                echo "$status" 
            }
        }
       stage('test2') {
            when{
               environment name: 'STATUS', value: 'TRUE' 
                }
            steps {
                input message: 'Push', ok: 'GO!!'
            }
        }
    }
}

我目前得到的输出o/p: false用于蝙蝠执行,下一步提供输出为 true。

echo "$status"

管道中,随着环境STATUS更改在节点上完成。AFAIK 这不会反映在管道本身中。

您可以做的是使用returnStdout: true并在管道中维护此变量状态

def script = '''set status=FALSE 
    echo %status%'''   
def status = bat(script: script, returnStdout: true)
echo "$status" 

按照上面的 hakamairi 回答,@echo off 应该添加到脚本字符串的开头,否则returnStdout: true也会返回命令提示符。

此外,如果在其他地方使用分配的 status 变量的值,则在 bat 脚本的末尾(在其右括号之后(添加 .trim() 可能会很有用,其中末尾的换行是不可取的。

最新更新