首页 > 解决方案 > 如何在 Jenkins 声明式管道的 steps.sh 脚本中声明一个新变量?

问题描述

在我的 groovy 课程中,我有一个步骤:

def mergedBranch = steps.sh label:"Get the latest merged branch", script: """
            declare branch
            for branch in ${all_merged_branches}; 
            do
                merged_branch=$branch;
                echo $merged_branch
                break;
            done
      """, returnStdout: true

但是,每次我在管道上运行它时,都会收到一条错误消息:

No such property: branch for class: <classname>

如果我将脚本更改为使用三重单引号,则不会出现此错误,但我不能使用 Groovy 的字符串插值,它只发生在双引号字符串中。我能做些什么?

标签: jenkinsgroovyjenkins-groovy

解决方案


问题是所有变量都在双引号中时由 jenkins 评估。如果没有在环境中定义所有变量,您应该简单地转义分支和合并分支变量,即\$branch和 '\$merged_branch`

如果all_merged_branches存在于环境变量中,您可以简单地将步骤重写为

def mergedBranch = steps.sh label:"Get the latest merged branch", script: '''
            declare branch
            for branch in ${all_merged_branches}; 
            do
                merged_branch=$branch;
                echo $merged_branch
                break;
            done
      ''', returnStdout: true

推荐阅读