使用 Jenkins 参数通过批处理命令调用 python 文件

Using Jenkins parameter to call python file via batch command

我正在为 Jenkins 管道而苦苦挣扎,希望你能帮助我。 我需要一个批处理命令中的 Jenkins 参数 (Cycle) 来调用 python 脚本。

environment {
    Variant = "${params.Var}"
    Cycle = "2021"
}
stages {
    stage('Check for most recent project') { 
        steps {
            script{
                if ("${Variant}" == "green") { 
                    help = bat(script: 'python.exe "somescript.py" --sourcepath \"\Buildenv\green\${Cycle}\"', returnStdout: true)
                }
                else {
                    help = bat(script: 'python.exe "somescript.py" --sourcepath \"\Buildenv\red\${Cycle}\"', returnStdout: true)
                }
                ProjectToBuild = help.split('\n')[-1]
                if ("${Variant}" == "green") {
                    bat script: "copy \"\Buildenv\green\${Cycle}\${ProjectToBuild}.7z\" \"D:\Workspace\""  
                }
                else {
                    bat script: "copy \"\Buildenv\red\${Cycle}\${ProjectToBuild}.7z\" \"D:\Workspace\""  
                }
            }
        }
    }
}

在使用参数的纯批处理命令(底线)中工作得很好。但是,如果我正在调用 python 脚本并想传递一个参数,这是行不通的。 不幸的是,我没有找到任何 post 帮助我解决这个问题。

已经感谢您的帮助!

您的问题与 python 执行无关,它与以下事实有关 groovy 单引号 (' ') 仅不支持 String Interpolation双引号 (" ") 做,因此你的参数没有得到评估。
所以你有两个选择:

  1. 更改您的 bat 脚本,使其使用双引号:
help = bat(script: "python.exe \"somescript.py\" --sourcepath \"\Buildenv\green\${Cycle}\"", returnStdout: true)
  1. 因为 Cycle 被设置为环境参数,它被传递到命令行环境,您可以将它用作 Windows 环境变量 % %:
help = bat(script: 'python.exe "somescript.py" --sourcepath "\Buildenv\green\%Cycle%"', returnStdout: true)