Jenkins Pipeline执行报错:build.sh未找到问题求助
问题分析与解决
问题现象
Jenkins部署在Ubuntu系统,工作空间路径为/var/lib/jenkins/workspace。从GitHub拉取包含build.sh、deploy.sh、quality.sh的仓库后,执行Pipeline脚本时提示脚本未找到,但实际/var/lib/jenkins/workspace/Scripted_Pipeline_GitHub目录下确实存在这三个脚本,仅Scripted_Pipeline_GitHub@tmp目录为空。报错信息如下:
Running on Jenkins in /var/lib/jenkins/workspace/Scripted_Pipeline_GitHub
/var/lib/jenkins/workspace/Scripted_Pipeline_GitHub@tmp/durable-9a8651c4/script.sh: 1: build.sh: not found
核心原因
- Ubuntu系统默认不会将当前工作目录(
.)加入PATH环境变量,直接输入build.sh时,系统只会在PATH指定的目录中查找脚本,找不到就会报错。 - 脚本可能缺少可执行权限,导致无法运行。
解决方法
方法1:用相对路径执行脚本
修改Pipeline中的sh命令,通过./明确指定当前工作目录下的脚本:
pipeline { agent any stages { stage('Git-Checkout') { steps { echo 'Checking out from Git Repo'; git 'https://github.com/garyyang6/scripts.git' } } stage('Build') { steps { echo "Building the checked out project"; sh './build.sh' } } stage('Unit-Test') { steps { echo "Running JUnit Tests"; } } stage('Quality-Gate') { steps { echo "Verifying Quality Gates"; sh './quality.sh' } } stage('Deploy') { steps { echo "Deploying to Stage Environment for more tests"; sh './deploy.sh' } } } }
方法2:先为脚本添加执行权限
如果脚本本身没有可执行权限,即使路径正确也无法运行,可在拉取代码后添加权限:
stage('Git-Checkout') { steps { echo 'Checking out from Git Repo'; git 'https://github.com/garyyang6/scripts.git' // 为三个脚本添加可执行权限 sh 'chmod +x build.sh quality.sh deploy.sh' } }
之后再用./build.sh的方式执行脚本即可。
方法3:使用绝对路径执行脚本
直接指定脚本的完整绝对路径,彻底避免路径识别问题:
sh '/var/lib/jenkins/workspace/Scripted_Pipeline_GitHub/build.sh'
注:此方法灵活性较差,若工作目录名称变更需同步修改路径,优先推荐前两种方法。
内容的提问来源于stack exchange,提问作者Gary
相关产品推荐
相关产品推荐

