gpt4 book ai didi

Jenkins Pipeline 中的 PowerShell 环境变量给出 `org.jenkinsci.plugins.workflow.cps.EnvActionImpl@1b69f5bb:VARIABLE_NAME`

转载 作者:行者123 更新时间:2023-12-04 21:02:13 25 4
gpt4 key购买 nike

有没有人在 Jenkins 管道中使用 PowerShell 时遇到问题,当您尝试引入环境变量(例如, $env:CHANGE_ID )时,它的评估结果是这样的?

org.jenkinsci.plugins.workflow.cps.EnvActionImpl@1b69f5bb:VARIABLE_NAME

看起来其他人在这个问题中遇到了同样的问题,但我不确定它在那里得到了回答(他们展示了如何打印所有环境变量,但没有在 toString 不是实现的):
Retrieve all properties of env in Jenkinsfile

我的 Jenkins 管道文件:
pipeline {
agent {
node {
label 'jenkins_managed_windows'
}
}

stages {
stage('SonarQube Analysis') {
steps {
powershell "dotnet sonarscanner begin /k:project-key /d:sonar.branch.name=$env:BRANCH_NAME"
}
}

stage('Build') {
steps {
powershell 'dotnet build'
}
}

stage('SonarQube End') {
steps {
powershell 'dotnet sonarscanner end'
}
}
}
}

带有环境变量的步骤运行如下:
dotnet sonarscanner begin /k:project-key /d:sonar.branch.name=org.jenkinsci.plugins.workflow.cps.EnvActionImpl@54ee3a8:BRANCH_NAME

有趣的是,如果我使用单引号:
powershell 'dotnet sonarscanner begin /k:project-key /d:sonar.branch.name=$env:BRANCH_NAME'

它甚至根本不评估环境变量,只是运行为:
dotnet sonarscanner begin /k:project-key /d:sonar.branch.name=$env:BRANCH_NAME

最佳答案

语法形式 $env:BRANCH_NAME和等效的 ${env:BRANCH_NAME}是 PowerShell 结构,这意味着为了将它们传递给 PowerShell 在插值 Groovy 字符串 ( "..." ) 中,您必须 \ -逃离$阻止 Groovy 解释构造的字符 前面:

powershell "dotnet sonarscanner begin ... /d:sonar.branch.name=\$env:BRANCH_NAME"
也就是说,鉴于您的命令不包含需要插入的 Groovy 变量(让 PowerShell 引用环境变量更安全、更可靠), 您可以简单地使用文字 Groovy 字符串,'...' ,其中 $字符。发往 PowerShell 无需转义 :
powershell 'dotnet sonarscanner begin ... /d:sonar.branch.name=$env:BRANCH_NAME'

至于 你试过什么 : "... $env:BRANCH_NAME"在插值 Groovy 字符串中导致 Groovy 插值变量 env (因为它前面是 $ ),并处理 :BRANCH_NAME作为字面意思。
env指的是包含所有环境变量的对象,您看到的是该对象的(无用的)字符串化,即类名( org.jenkinsci.plugins.workflow.cps.EnvActionImpl )后跟特定于实例的哈希码( @54ee3a8 )。
使用 ${env.BRANCH_NAME}本来可以的 - 鉴于环境变量的值 BRANCH_NAME可以作为 env 的属性访问对象 - 但请注意,这意味着 Groovy 预先插入值,然后 PowerShell 只能看到结果值。
在简单情况下(没有空格或特殊字符的环境变量值), "${env.BRANCH_NAME}" (由 Groovy 预先插值)和 "\${env:BRANCH_NAME}" (稍后由 PowerShell 解释)是可互换的,但只有后一种方法对所有值都有效。

关于Jenkins Pipeline 中的 PowerShell 环境变量给出 `org.jenkinsci.plugins.workflow.cps.EnvActionImpl@1b69f5bb:VARIABLE_NAME`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57778560/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com