如何使用Jenkins管道变量到powershell或cmd代码?



我需要修改詹金斯管道脚本。这是一个片段。它在重命名中一直工作到Def。我得到的错误是

groovy.lang。MissingPropertyException: No such property: newFileName for class: groovy.lang.Binding

我希望注入版本号到文件名,然后由一个本土的应用程序处理,将其移动到需要去的地方和其他一些东西。我已经尝试将连接的${version}传递到上传可执行文件中,但它随后错误为文字而不是变量。

更新:我预定义变量并得到一个新的错误

powershell.exe: newFileName:术语'newFileName'不被识别为cmdlet,函数,脚本文件或可操作文件的名称在C:workspaceworkspaceCenturion Dashboard@tmpdurable-eb5db1aepowershellWrapper。ps1:3 char: 1,powershell -NoProfile -NonInteractive -ExecutionPolicy Bypass -Comm

  • CategoryInfo: NotSpecified: (newFileName: T…)e, or>operable:String) [], RemoteException
    • fulllyqualifiederrid: nativeecommanderror

想法吗?

stage('Rename') {
powershell """
rename-item -Path "C:\Users\Administrator\Documents\Advanced Installer\Projects\Proj\Setup Files\SetupCenturionDashboard.exe" -NewName "OtherProject-${version}.exe"
def newFileName = "C:\Users\Administrator\Documents\Advanced Installer\Projects\Proj\Setup Files\OtherProject-" + ${version} + ".exe"
echo ${newFileName} 
"""
} 
stage('Upload') {
bat label: 'Upload', script: 'C:\Static\BuildHelper\BuildHelper.exe ${newFileName} "develop" "home" "${version}"'
}

powershell != groovy

不能在powershell块中运行groovy

powershell """
"""

def newFileName是groovy,这就是为什么你得到错误:

The term 'newFileName' is not recognized as the name of a cmdlet...

可以看到,newFileNamewindows上不存在可执行文件

windows上的变量

如果你只需要传递版本和newFileName变量到你的powershell或bat代码,你需要使用windows语法%var%变量,而不是unix的${var},如果可能的话,在你的管道中使用全局变量:

def version = "1.0.0";
def newFileName;
stage('Rename') {
powershell """
rename-item -Path "C:\Users\foo.exe" -NewName "OtherProject-%version%.exe"
"""
newFileName = "C:\Users\OtherProject-${version}.exe"
} 
stage('Upload') {
bat label: 'Upload', script: 'C:\Static\BuildHelper\BuildHelper.exe %newFileName% "develop" "home" "%version%"'
}