2017-06-02 230 views
7

我想运行在詹金斯的管道,而不是一个shell命令bash命令,Groovy脚本里面:运行bash命令

我已经尝试过使用“#/斌/庆典!”:

stage('Setting the variables values') { 
    steps { 
     sh ''' 
      #!/bin/bash 
      echo "hello world" 
     ''' 
    } 
} 

而且还试图用“庆典”,而不是“上海”

stage('Setting the variables values') { 
    steps { 
     bash ''' 
      #!/bin/bash 
      echo "hello world" 
     ''' 
    } 
} 

显然,我的命令是不是一个“回响的hello world”复杂。

+0

你的问题是什么?请清楚地提出你的问题,并提供你面临的问题细节。 – deimus

+0

我认为我们有同样的问题。即使在第二个例子中,它仍然用sh而不是bash执行。那是你所看到的吗? – Jake

+0

是的,它是!创建一个解决方案,在我的git仓库中添加一个.bash文件,所以我说詹金斯在我的项目内部的特定路径上运行它。 –

回答

7

的Groovy脚本您提供的是将第一行格式化为结果脚本中的空白行。 shebang,告诉脚本以/ bin/bash而不是/ bin/sh运行,需要在文件的第一行,否则它将被忽略。

因此,相反,你应该格式化你的Groovy这样的:

stage('Setting the variables values') { 
    steps { 
     bash '''#!/bin/bash 
       echo "hello world" 
     ''' 
    } 
} 

它将与/斌/ bash中执行。

+0

你测试了吗? 我用我在git仓库中运行一个文件的方式制作了一个文件,我确信代码将作为bash代码执行,而不是shell代码。 –

+0

是的,它成功地为我工作。我有一个使用bash特定语法的脚本,直到格式化为止,因此第一行不是空白。 – Jake

+0

@Jake任何想法你在一个阶段如何使用特定于bash的脚本?这部分也适用于我,但是当我尝试触发bash脚本时,它不适用于我。 – DenCowboy

-3

尝试蝙蝠 “” 行前:蝙蝠 '删除C:\ hello.txt的'

+0

java.io.IOException:批处理脚本只能在Windows节点上运行 –

+0

您的slave os是linux吗? – Emile

+0

是的,它是一个Linux奴隶。 –

3

this document,你应该能够做到这一点,像这样:

node { 
    sh "#!/bin/bash \n" + 
     "echo \"Hello from \$SHELL\"" 
} 
+0

该徽标返回“+”的错误 WorkflowScript:9:美元符号后的非法字符串正文字符; 解决方案:或者转义字面美元符号“\ $ 5”或括起值表达式“$ {5}”@ line 9,column 68. 2c-437a-b8a2-db013fe42f62 \“”+ –

+0

您可以发布脚本?从你粘贴的内容看,'+'前面有两个引号,这是错误的。 – Jacob