簡體   English   中英

詹金斯管道MissingPropertyException工作Powershell命令

[英]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變量引用/表達式
  • 並轉義所有本應由PowerShell解釋為\\$ $實例。

例如,要在.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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM