这是我的Jenkins 2.x管道:
node ('master'){
stage 'Checkout'
checkout scm
stage "Build Pex"
sh('build.sh')
}
当我运行这个管道时,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
如何修改这个Jenkins文件,以便在我检查项目源代码的完全相同的目录中执行build.sh?
4 回答
您可以将您的操作包含在
dir
块中 .your new directory
是占位符您的实际目录 . 默认情况下,它是工作空间的相对路径 . 如果您确定代理上存在绝对路径,则可以定义绝对路径 .您的脚本不起作用的原因是因为“build.sh”不在您的PATH中 .
Jenkinsfile正在运行"sh"脚本,其全部内容是字符串
build.sh
. 父脚本位于"@tmp"目录中并且将始终存在 - __998962_目录是Jenkins在运行期间保留Jenkins文件的位置 .要解决此问题,请将行更改为
sh "./build.sh"
或sh "bash build.sh"
,以便Jenkinsfile中的sh
块可以正确找到要执行的build.sh
脚本 .我有同样的问题,dir没有帮助,可能是因为我在tmp dir本身的子目录中工作(因为这里没有密切关系) . 我的代码看起来像这样
(
pwd
和la -l
语句只是为了调试而添加 . 问题存在与它们不存在 . )有了它们,我输出如下:我最终这样做了:
Jenkins在从项目中克隆时会创建一个文件夹,如下所示:
/ var / lib / jenkins / workspace / job-name @script
为此,如果您在Linux环境中,则必须将文件设置为可执行文件,然后调用shell脚本 .
像这样的东西: