[英]Jenkins Pipeline MissingPropertyException for Working Powershell Command
我正在嘗試在我的Jenkins Pipeline版本中運行此工作腳本:
powershell(returnStdout: true, script: "gci -path "c:/jenkins/workspace/testdata" -recurse | where-object{ $_.Name -like "*testconfig.staging.json*"} | %{rename-item $_.FullName $_.FullName.Replace("staging","local") }")
但這給了我以下例外:
java.lang.ClassCastException: org.jenkinsci.plugins.workflow.steps.EchoStep.message expects class java.lang.String but received class groovy.lang.MissingPropertyException
我嘗試剪切命令以查看失敗的地方,並且在嘗試將輸出管道傳輸到where-object
時似乎發生了。
如果我只是運行此:
powershell(returnStdout: true, script: "gci -path "c:/jenkins/workspace/testdata" -recurse ")
然后輸出結果,我實際上得到了該目錄中文件夾的列表。
對這一步失敗的原因有任何想法嗎?
你的問題是,你忘記了逃跑的"
字符。 內嵌 (嵌套)在你的整體"..."
-quoted命令字符串作為\\"
。
powershell(returnStdout: true, script: "gci -path "c:\\jenkins\\..." .... "
^ ^ must be \-escaped
但是,鑒於您沒有嘗試在腳本中引用Groovy變量值,一個簡單的解決方法是使用'...'
作為整體引號,其中的"
可以在不使用轉義的情況下使用:
powershell returnStdout: true, script: 'gci -path "c:/jenkins/workspace/testdata" -recurse | where-object{ $_.Name -like "*testconfig.staging.json*"} | %{rename-item $_.FullName $_.FullName.Replace("staging","local") }'
為了獲得更大的靈活性,您可以使用三重單引號字符串(通常用於定義多行字符串文字),在其中您可以自由使用'
和"
實例,而無需轉義:
powershell returnStdout: true, script: '''
gci -path "c:/jenkins/workspace/testdata" -recurse | where-object{ $_.Name -like "*testconfig.staging.json*"} | %{rename-item $_.FullName $_.FullName.Replace("staging","local") }
'''
請注意,在開頭的'''
和結尾的'''
之前的換行符(換行符)成為字符串的一部分,但是在將字符串解釋為PowerShell源代碼的情況下沒有區別。
如果確實要將Groovy變量或表達式合並到命令字符串中:
${...}
嵌入Groovy變量引用/表達式 \\$
$
實例。 例如,要在.Replace()
調用中使用Groovy變量$variable
:
powershell returnStdout: true, script: """
gci -path "c:/jenkins/workspace/testdata" -recurse |
where-object { \$_.Name -like "*testconfig.staging.json*" } |
% { rename-item \$_.FullName \$_.FullName.Replace("${variable}","local") }
"""
再次使用三重雙引號格式可以使您在字符串中自由嵌入"
實例。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.