当前位置: 首页 > 知识库问答 >
问题:

Groovy参数在Jenkinsfile的shell部分中不可见

百里景山
2023-03-14

我在Groovy脚本中遇到了一个问题,其中在shell脚本部分无法访问变量。

 def a=20;
 println ("a is: $a");
a is: 20

脚本2:

def a=20;
println ("a is: $a");
sh '''echo a is $a''';

输出-2:

groovy.lang.MissingMethodException:方法的无签名:script1.sh()适用于参数类型:(java.lang.string)值:[echo a is$a]可能的解决方案:use([ljava.lang.object;),is(java.lang.object),run(),run(),any(),在script1.run(script1.groovy:3)处用(groovy.lang.closure)

如何在shell部分中获得$A=20SH。换句话说,在shell脚本部分传递变量$a需要什么操作。

我是在Jenkins管道的上下文中编写这个脚本的,在这里我面临一个问题,即groovy变量在shell部分中不可见。

共有1个答案

阎阎宝
2023-03-14

这是有效的:

pipeline {
    agent any
    stages {
        stage('Example') {
            steps {
                script {
                    // a is accessible globally in the Jenkinsfile
                    a = 20
                    // b is only accessible inside this script block
                    def b = 22
                    sh "echo a is $a"
                    sh "echo b is $b"
                }
            }
        }
    }
    post { 
        always { 
            sh "echo a is $a"
        }
    }
}

shell语句应该使用双引号,而不是三个单引号。

 类似资料:
  • 我正在尝试从groovy中使用shell命令< code > notify-send-t 2000 " Title " " Message " ,以下一种方式< code > " notify-send-t 2000 \ " Title \ " \ " Message \ "。execute()就可以完美地工作了。但是当我试图用表达代替信息时,似乎什么都不管用。下面是代码片段: 能帮我理解一下吗?

  • 我该如何做到这一点,特别是因为您似乎无法真正运行中的任何类型的groovy代码?

  • 我想准备两个作业在同一个jenkins服务器,将读取从一个特定的分支。我必须使用git标签为其中一个作业,以某种方式将它们分开。 拜托,你能用git标签在jenkins中粘贴一些包含作业触发器的代码吗?

  • 问题内容: 我有一个管道脚本,可以使用和不使用参数。因此,我必须检查该参数是否可用。 我试过了,但这导致异常 还有另一种检查作业是否已参数化的方法吗? 问题答案: 较新的版本通过变量使参数可用。如果未定义该参数,则它将回退到配置的默认值(另请参见此处)。

  • 目前,我有一个“包罗万象”的jenkinsfile,其中包含各种函数。为了在其他jenkinsfile中重用这些函数,我想将它们放在单独的groovy脚本中,并从jenkinsfile中加载它们。 scmHandler。groovy: 在jenkinsfile中,我执行以下操作: <代码>。。。def scmHandler=负载(“测试/scmHandler.groovy”)scmHandler。

  • 问题内容: 我保留一个名为的shell脚本文件 ,并从构建中执行该文件。 当我执行构建时,它失败。 控制台输出如下: 我在应该保留外壳脚本文件以便执行的位置上感到困惑。 问题答案: 如果看到错误消息,则提示 在工作空间中构建/ var / lib / jenkins / workspace / AutoScript 并根据您的评论将urltest.sh放入 / var / lib / jenkin