【问题标题】:TeamCity Unresolved reference from powershell script on a powershell stepTeamCity Unresolved reference from powershell script on a powershell step
【发布时间】:2021-03-27 04:04:17
【问题描述】:

我在 Teamcity 上的一个管道上有下一步工作

powerShell {
                    name = "Start e2e-container-group build at Azure"
                    executionMode = BuildStep.ExecutionMode.ALWAYS
                    scriptMode = script {
                        content = """
                            try {
                               $headers = New-Object "System.Collections.Generic.Dictionary[[String],[String]]"
                               $headers.Add("Authorization", "Basic token")
                               $headers.Add("Content-Type", "application/json")

                               $body = "{
                               `n  `"definitionId`": 7,
                               `n  `"description`": `"Release for E2E-UAT testing`"
                               `n}"

                               Invoke-RestMethod 'https://vsrm.dev.azure.com/company/projectname/_apis/release/releases?api-version=5.1' -Method 'POST' -Headers $headers -Body $body
                            } catch [Exception] {
                                Write-Output ${'$'}_.Exception.Message
                                exit 1
                            }
                        """.trimIndent()
                    }
                }

我在运行管道时得到的输出是:

 Kotlin DSL compilation errors
Compilation error Extra\buildTypes\E2ETestsBuild.kt[89:33]: Unresolved reference: headers
Compilation error Extra\buildTypes\E2ETestsBuild.kt[90:33]: Unresolved reference: headers
Compilation error Extra\buildTypes\E2ETestsBuild.kt[91:33]: Unresolved reference: headers
Compilation error Extra\buildTypes\E2ETestsBuild.kt[93:33]: Unresolved reference: body
Compilation error Extra\buildTypes\E2ETestsBuild.kt[98:172]: Unresolved reference: headers
Compilation error Extra\buildTypes\E2ETestsBuild.kt[98:187]: Unresolved reference: body
StackTrace
Load project model
Read build settings from revision c8c0bd16eb07f4165ca37f310d0ee25a69a3d448

脚本在 powershell 中运行良好,是否需要执行任何额外步骤才能在管道上运行它?

【问题讨论】:

  • 似乎缺少必要的导入。例如,对于 powershell,这是“import jetbrains.buildServer.configs.kotlin.v2018_2.buildSteps.powershell”

标签: powershell kotlin teamcity


【解决方案1】:

我知道这个问题已经有将近一年的历史了,但我正在为任何最终遇到与我相同情况的人发布解决方案。

解决此问题的一种方法是执行以下操作: 从 TeamCity 运行 PowerShell 脚本时,字符存在一些限制,因此,为了使用这些字符,您需要在字符之间添加 ${''}。通过这些更改,您的脚本可能看起来像这样:

powerShell {
                name = "Start e2e-container-group build at Azure"
                executionMode = BuildStep.ExecutionMode.ALWAYS
                scriptMode = script {
                    content = """
                        try {
                           ${'$'}headers = New-Object "System.Collections.Generic.Dictionary[[String],[String]]"
                           ${'$'}headers.Add("Authorization", "Basic token")
                           ${'$'}headers.Add("Content-Type", "application/json")

                           ${'$'}body = "{
                           `n  `"definitionId`": 7,
                           `n  `"description`": `"Release for E2E-UAT testing`"
                           `n}"

                           Invoke-RestMethod 'https://vsrm.dev.azure.com/company/projectname/_apis/release/releases?api-version=5.1' -Method 'POST' -Headers $headers -Body $body
                        } catch [Exception] {
                            Write-Output ${'$'}_.Exception.Message
                            exit 1
                        }
                    """.trimIndent()
                }
            }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-12-01
    • 2012-12-10
    • 2022-12-01
    • 2018-03-22
    • 2010-11-23
    • 1970-01-01
    • 1970-01-01
    • 2014-03-31
    相关资源
    最近更新 更多