首页 > 解决方案 > 如何引用groovy管道脚本中的参数?

问题描述

我将其合并为vars/gitCheckout.goovy将其作为库添加到詹金斯

def call(String branch = '*/master') {
  checkout([$class: 'GitSCM',
      branches: [[name: ${branch}]],
      doGenerateSubmoduleConfigurations: false,
      extensions: [[$class: 'SubmoduleOption',
                    disableSubmodules: false,
                    parentCredentials: false,
                    recursiveSubmodules: true,
                    reference: '',
                    trackingSubmodules: false]],
      submoduleCfg: [],
      userRemoteConfigs: [[url: 'https://my-server.com/some/project.git']]])
}

从 jenkins Pipeline Script 调用此方法如下:

@Library('jenkins-library@master') _

pipeline {
  agent { label 'my-server' }
  stages {
    stage('Git Checkout') {
        steps {
        gitCheckout()
        }
  }
  }
}

这失败并出现错误java.lang.NoSuchMethodError: No such DSL method '$' found among steps [ArtifactoryGradleBuild, MavenDescriptorStep, ....

我尝试了 $branch、params.branch,但它没有用,如果我不使用参数并硬编码分支名称,则代码可以正常工作。另外,每当我对这个 .groovy 脚本进行任何更新时,我是否应该通过将它合并并作为 jenkins 作业运行来测试它?在合并 groovy 脚本之前还有其他方法可以测试吗?

标签: jenkins-pipelinejenkins-groovy

解决方案


${branch}用 just替换第 3 行branch$当您在 Groovy 字符串中插入变量时,您可以使用变量名:

def value = "current branch is: ${branch}" // produces: current branch is */master

如果您忘记$在字符串插值中使用,则不会发生任何事情:

def value = "current branch is: branch" // produces: current branch is branch

推荐阅读