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
是占位符你的实际目录.默认情况下,它是工作空间的相对路径.如果您确定代理上存在绝对路径,则可以定义绝对路径.
Kei*_*ell 14
您的脚本不起作用的原因是因为"build.sh"不在您的PATH中.
Jenkinsfile正在运行一个"sh"脚本,其全部内容是字符串build.sh
.该父脚本是在"@tmp"目录,将永远存在-在"@tmp"目录是詹金斯在运行过程中保持Jenkinsfile,本质上,.
要解决此问题,请将行更改为sh "./build.sh"
或sh "bash build.sh"
,以便sh
Jenkinsfile 中的块可以正确找到build.sh
要执行的脚本.