powershell - Jenkins中Powershell脚本中调用参数

标签 powershell jenkins groovy

我需要在 Jenkins 调用的函数中运行 powershell 脚本。调用此函数时,还包含另外两个参数/变量。这是我的代码示例:

        powershell '''
            $Headers = @{"ApiKey"="$env:myKey"}
            $jsonBody = @{
                varOne= '$env:params.varOne'
                varTwo = '$env:params.varTwo'} | ConvertTo-Json -Depth 10

            Invoke-RestMethod -Method Post -Uri "myUrl" -Headers $Headers -Body $jsonBody
        '''
    

这会引发“错误响应”错误。请注意,如果我对变量中的值进行硬编码,则脚本可以正常工作。 我也尝试用 withEnv 包装脚本,但遇到了同样的问题:

    withEnv(["varOne=${params.varOne}, varTwo=${params.varTwo}"]) {
    powershell '''
        $Headers = @{"ApiKey"="$env:myKey"}
        $jsonBody = @{
            varOne= '$env:params.varOne'
            varTwo = '$env:params.varTwo'} | ConvertTo-Json -Depth 10

        Invoke-RestMethod -Method Post -Uri "myUrl" -Headers $Headers -Body $jsonBody
    '''
}

最后,我知道如果我使用双引号而不是单引号,我可以成功调用这些变量

powershell """
some ps1 script
"""

但是,当我这样做时,它会说:

groovy.lang.MissingPropertyException: No such property: Headers

最佳答案

如果您要模板化变量,则需要 """ 正如我在您删除的问题中所说的那样,但您需要在非模板化变量上转义 $

powershell """
        \$Headers = @{"ApiKey"="$env:myKey"}
        \$jsonBody = @{
            varOne= '$env:params.varOne'
            varTwo = '$env:params.varTwo'} | ConvertTo-Json -Depth 10

        Invoke-RestMethod -Method Post -Uri "myUrl" -Headers \$Headers -Body \$jsonBody
    """

关于powershell - Jenkins中Powershell脚本中调用参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68535108/

相关文章:

c++ - 构建 Qt-Static 5.3.2 时遇到问题

html - Powershell 更改 RTF 文档并另存为 RTF 文档

file - 如何在 PowerShell 中检查文件是否在给定目录下?

powershell - 使用 Powershell 打开或提取文件 nupkg

docker - 在 Jenkins 声明式管道中使用适用于 Windows 的 Docker

jenkins - 如何在helm upgrade命令中传递指向文件的指针?

mysql - 在 Groovy/Gradle 中执行 Sql 脚本文件

jenkins - 如何更改 docker 卷中的权限?

Grails 过滤器语法,或者,如何在 Grails 之外调用 Grails 过滤器

java - Groovy 更新导致 PermGen 中大量死亡 GroovyClassLoader