【问题标题】:Passing values to a PowerShell script in a TeamCity metarunner将值传递给 TeamCity 元运行器中的 PowerShell 脚本
【发布时间】:2021-07-07 14:33:10
【问题描述】:

我有一个这样定义的元运行器:

<?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 脚本的开头修剪它们,这显然是一种糟糕的风格,而且根本不是干净的代码。

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

【问题讨论】:

    标签: powershell teamcity


    【解决方案1】:

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

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

    所需的检查由 TeamCity 的 validationMode 属性在 XML 的上方完成。

    【讨论】:

      猜你喜欢
      • 2020-12-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-21
      • 2019-07-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多