如何让Jenkins 2.0在结帐的同一目录中执行sh命令?

Sal*_*ley 36 shell groovy jenkins jenkins-pipeline

这是我的Jenkins 2.x管道:

node ('master'){
    stage 'Checkout'
    checkout scm
    stage "Build Pex"
    sh('build.sh')
}
Run Code Online (Sandbox Code Playgroud)

当我运行这个管道时,checkout会按预期将代码放入工作区,但不是期望在workspace /(它确实存在!)中找到脚本,而是查找一个不相关的目录:workspace @ tmp/durable-d812f509.

Entering stage Build Pex
Proceeding
[Pipeline] sh
[workspace] Running shell script
+ build.sh
/home/conmonsysdev/deployments/jenkins_ci_2016_interns/jenkins_home/jobs/pex/branches/master/workspace@tmp/durable-d812f509/script.sh: line 2: build.sh: command not found
Run Code Online (Sandbox Code Playgroud)

如何修改这个Jenkins文件,以便在我检查项目源代码的完全相同的目录中执行build.sh?

Jay*_*yan 36

您可以将您的操作包含在dir 块中.

checkout scm
stage "Build Pex"
dir ('your new directory') { 
    sh('build.sh')
}
...
Run Code Online (Sandbox Code Playgroud)

your new directory是占位符你的实际目录.默认情况下,它是工作空间的相对路径.如果您确定代理上存在绝对路径,则可以定义绝对路径.

  • 这个答案没有回答问题,除非你创建一个新的子目录,否则它不起作用.问题是如何从项目的工作区(root)运行脚本.对我来说,当你有一个子目录时它工作正常,但是当我试图从项目根目录运行脚本时它不起作用. (4认同)
  • “您的新目录”代表什么?它是一个占位符吗? (2认同)
  • 不要为我工作:-(我在哪里必须把shellcript?现在它在我的git repo的根目录中.我试图将它移动到子目录'buildscripts'然后使用`dir('buildscripts') ){}`但没有运气 (2认同)

Kei*_*ell 14

您的脚本不起作用的原因是因为"build.sh"不在您的PATH中.

Jenkinsfile正在运行一个"sh"脚本,其全部内容是字符串build.sh.该脚本是在"@tmp"目录,将永远存在-在"@tmp"目录是詹金斯在运行过程中保持Jenkinsfile,本质上,.

要解决此问题,请将行更改为sh "./build.sh"sh "bash build.sh",以便shJenkinsfile 中的块可以正确找到build.sh要执行的脚本.