将groovy变量传递给shell脚本

ylamdve6  于 2022-12-27  发布在  Shell
关注(0)|答案(7)|浏览(201)

我刚开始学习groovy,我想用svn copy命令把svnSourcePath和svnDestPath传递给shell脚本,但是URL没有被呈现.

node {
 stage 'Copy Svn code'

def svnSourcePath = "${svnBaseURL}${svnAppCode}${svnEnvDev}${SVN_DEV_PACKAGE}"
def svnDestPath = "${svnBaseURL}${svnAppCode}${svnEnvTest}${SVN_DEV_PACKAGE}"

print "DEBUG: svnSourcePath = ${svnSourcePath}"
print "DEBUG: svnDestPath = ${svnDestPath}"

withCredentials([[$class: 'UsernamePasswordMultiBinding', credentialsId: crendentialsIdSVN, passwordVariable: 'SVN_PWD', usernameVariable: 'SVN_USER']]) {
    sh '''  
    svn copy $svnSourcePath $svnDestPath -m 'promote dev to test' --username $SVN_USER --password $SVN_PWD '''
}  
}

产出

+ svn copy -m 'promote dev to test' --username techuser --password 'xxxyyy' 
     svn: E205001: Try 'svn help' for more info
     svn: E205001: Not enough arguments provided
5anewei6

5anewei61#

我在变量两边加上了单引号和加号运算符('+ variable +')。现在它可以工作了

svn copy '''+svnSourcePath+' '+svnDestPath+''' -m 'promote dev to test' --username $SVN_USER --password $SVN_PWD '''
qeeaahzv

qeeaahzv2#

+1到Selvam答案
下面是我使用参数插件的用例,
字符串参数名称:管道参数
默认值:4

node {
  stage('test') {
        withCredentials([[...]]) {
          def pipelineValue = "${pipelineParameter}"  //declare the parameter in groovy and use it in shellscript
          sh '''
             echo '''+pipelineValue+' abcd''''
             '''
        }
}}

上面打印4个abcd

xa9qqrwz

xa9qqrwz3#

您可以使用""" content $var """"""允许字符串插值在这里的文档; '''则不会。

y1aodyip

y1aodyip4#

只有一次双引号也可以使用

stage('test') {  
  steps {  
    script {  
      for(job in env.JOB_NAMES.split(',')) {  
        println(job);  
        sh "bash jenkins/script.sh $job"  
        sh "echo $job"  
      }  
    }//end of script  
  }//end of steps  
}//end of stage test
ghhaqwfi

ghhaqwfi5#

我在sh命令中寻找插入变量值的方法时遇到了这个问题。
单引号'string'和三重单引号'''string'''字符串都不支持插值。
According to Groovy documentation:
单引号字符串是普通的java.lang.String,不支持插值。
三重单引号字符串是普通的java.lang.String,不支持插值。
因此,要在groovy(GString)中使用嵌入的字符串值,必须使用双引号,其中的任何GString都将被求值,即使它位于单引号字符串中。

sh "git commit -m  'Build-Server: ${server}', during main build."
ztigrdn8

ztigrdn86#

如果需要bash脚本,您需要执行如下操作:
在全局或局部(函数)级别设置此变量,以便sh脚本可以访问这些变量:

def stageOneWorkSpace = "/path/test1"
def stageTwoWorkSpace = "/path/test2"

在shell脚本中,如下所示调用它们

sh '''
echo ''' +stageOneWorkSpace+ '''
echo ''' +stageTwoWorkSpace+ '''
cd ''' +stageOneWorkSpace+  '''
rm -r ''' +stageOneWorkSpace+ '''/AllResults
mkdir -p AllResults
mkdir -p AllResults/test1
mkdir -p AllResults/test2
cp -r ''' +stageOneWorkSpace+'''/qa/results/* ''' +stageOneWorkSpace+'''/AllResults/test1
cp -r ''' +stageTwoWorkSpace+'''/qa/results/* ''' +stageOneWorkSpace+'''/AllResults/test2
'''
mm5n2pyu

mm5n2pyu7#

def my_var = "hai"
sh (
    script:  "echo " + my_var,
    returnStdout: true
)

相关问题