将值传递给 TeamCity 元运行程序中的 PowerShell 脚本

我有一个像这样定义的 metarunner:

<?xml version="1.0" encoding="UTF-8"?>
<meta-runner name="Fancy Pancy">
  [...]
  <build-runners>
    <runner name="Fancy Pancy" type="jetbrains_powershell">
      <parameters>
        [...]
<param name="jetbrains_powershell_scriptArguments"><![CDATA-Optional:%SomeOptMetarunnerParam%
-Required:%SomeReqMetarunnerParam%]]></param>

<param name="jetbrains_powershell_script_code"><![CDATA[#Requires -Version 7
[CmdletBinding()]
param (
  [string] $Optional,[string] $Required
)
        [...]

我的问题如下:如果用户将可选参数保留为空,PowerShell 执行认为“-Required:%SomeReqMetarunnerParam”是“可选”参数的参数值,最终失败,因为“必需”参数的值" 参数丢失。如果用户确实为可选参数提供了值,则一切都会按预期进行。

我通过如下重新定义参数来解决这个问题(注意引号):

<param name="jetbrains_powershell_scriptArguments"><![CDATA-Optional:'%SomeOptMetarunnerParam%'
-Required:'%SomeReqMetarunnerParam%']]></param>

这是可行的,但是,引号成为值的一部分。所以我必须在 PowerShell 脚本的开头修剪它们,这显然是一种糟糕的风格,而且根本不是干净的代码。

有什么技巧可以解决这个问题吗?

iCMS 回答:将值传递给 TeamCity 元运行程序中的 PowerShell 脚本

我找到了解决问题的方法。我完全删除了 scriptArguments XML、CmdletBinding 和 param 声明。相反,我只是访问了 jetbrains_powershell_script_code XML 开头的变量:

$Optional = "%Optional%"
$Required = "%Required%"

所需的检查由 TeamCity 的 validationMode 属性在 XML 中进一步完成。

本文链接:https://www.f2er.com/141099.html

大家都在问