在 Jenkins 的 Powershell 脚本中调用参数

Call parameters in Powershell script in Jenkins

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

        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
        '''
    

这引发了 'Bad Response' 错误。请注意,如果我对变量中的值进行硬编码,则脚本会起作用。 我也尝试用 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
    """