You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Jenkins Pipeline在macOS执行yarn install提示命令未找到求助

问题

将我编写的首份Jenkins脚本在Linux环境运行正常,迁移至macOS High Sierra系统后出现Shell脚本错误。已在本地Jenkins用户账户下安装Node和yarn,但执行yarn install时提示“yarn: command not found”,无法定位问题原因,恳请协助排查。

我的Jenkinsfile:

node { 
    stage('Check out') { 
        checkout scm 
    } 
    stage('Prepare') { 
        sh "yarn install" 
    } 
    stage('Test') { 
        sh "yarn test" 
    } 
    stage('Sonar') { 
        if (env.BRANCH_NAME == 'dev') { 
            def scannerHome = tool 'sonar scanner'; 
            withSonarQubeEnv('sonar') { 
                sh "${scannerHome}/bin/sonar-scanner" 
            } 
        } 
    } 
}

完整构建日志:

14:43:11 使用hariklee/******连接至https://api.github.com
从6c639bd70ac86cbe6a49ac0b58bcc10e3c64a375获取Jenkinsfile
运行持久化等级:MAX_SURVIVABILITY
[Pipeline] node
在Jenkins上运行,工作目录:/Users/Shared/Jenkins/Home/workspace/wingman_423_ci_cd-7PSSGRAMBTXUQRESYCNVODXU7IZJLJLPHQOE3KYEPCSAAYAFFD4A
[Pipeline] {
[Pipeline] stage
[Pipeline] { (Check out)
[Pipeline] checkout
git rev-parse --is-inside-work-tree # 超时时间=10
从远程Git仓库拉取变更
git config remote.origin.url https://github.com/wingman-xyz/app.git # 超时时间=10
不拉取标签
从https://github.com/wingman-xyz/app.git拉取上游变更
git --version # 超时时间=10
使用GIT_ASKPASS设置凭据
git fetch --no-tags --progress https://github.com/wingman-xyz/app.git +refs/heads/423_ci_cd:refs/remotes/origin/423_ci_cd
检出版本6c639bd70ac86cbe6a49ac0b58bcc10e3c64a375 (423_ci_cd)
git config core.sparsecheckout # 超时时间=10
git checkout -f 6c639bd70ac86cbe6a49ac0b58bcc10e3c64a375
提交信息:"jenkins test"
首次构建,跳过变更日志。
[Pipeline] }
[Pipeline] // stage
[Pipeline] stage
[Pipeline] { (Prepare)
[Pipeline] sh
[wingman_423_ci_cd-7PSSGRAMBTXUQRESYCNVODXU7IZJLJLPHQOE3KYEPCSAAYAFFD4A] 执行Shell脚本
yarn install
/Users/Shared/Jenkins/Home/workspace/wingman_423_ci_cd-7PSSGRAMBTXUQRESYCNVODXU7IZJLJLPHQOE3KYEPCSAAYAFFD4A@tmp/durable-cf573520/script.sh: 第2行: yarn: 命令未找到
[Pipeline] }
[Pipeline] // stage
[Pipeline] }
[Pipeline] // node
[Pipeline] 构建结束
已通知GitHub本次提交的构建结果
ERROR: 脚本返回退出码127
构建完成:FAILURE

解决方案

这个问题我在macOS部署Jenkins时也踩过坑,核心原因是Jenkins的运行环境和你本地登录用户的shell环境变量完全不共享:

macOS上Jenkins默认是以系统服务(LaunchDaemon)的形式运行的,它的PATH变量只包含系统默认路径(比如/usr/bin、/bin),而你在本地用户账户下安装的yarn(通常在/usr/local/bin或者~/.nvm/versions/node/xxx/bin这类用户级路径里)不在Jenkins的PATH范围内,所以会提示“命令未找到”。

下面给你几种简单有效的解决方法:

方法1:直接使用yarn的绝对路径执行

先在本地用户终端执行which yarn,得到yarn的绝对路径(比如/Users/yourusername/.nvm/versions/node/v18.17.0/bin/yarn或者/usr/local/bin/yarn),然后修改Jenkinsfile里的命令:

stage('Prepare') { 
    sh "/Users/yourusername/.nvm/versions/node/v18.17.0/bin/yarn install" 
}
stage('Test') { 
    sh "/Users/yourusername/.nvm/versions/node/v18.17.0/bin/yarn test" 
}

这种方法最直接,适合快速验证。

方法2:在Jenkinsfile里手动添加PATH环境变量

把yarn所在的目录加到Jenkins的PATH里,后续就能直接用yarn命令了:

node { 
    stage('Check out') { 
        checkout scm 
    } 
    stage('Prepare') { 
        // 替换成你实际的yarn父目录路径,比如nvm的node bin目录或者/usr/local/bin
        env.PATH = "/Users/yourusername/.nvm/versions/node/v18.17.0/bin:${env.PATH}"
        sh "yarn install" 
    } 
    stage('Test') { 
        sh "yarn test" 
    } 
    // 其他stage保持不变...
}

方法3:全局配置Jenkins的环境变量

如果你的Jenkins有多个项目需要用到yarn,可以一次性在全局配置里设置:

  1. 打开Jenkins管理界面,进入「系统管理」→「系统设置」
  2. 找到「全局属性」,勾选「环境变量」
  3. 添加一个变量:
    • 名称:PATH
    • 值:/Users/yourusername/.nvm/versions/node/v18.17.0/bin:/usr/local/bin:${PATH}(替换成你实际的路径)
  4. 保存配置后,所有Jenkins项目都会继承这个PATH,不用每个项目都改Jenkinsfile。

注意事项

  • 如果你是用nvm安装的Node/yarn,要确保路径正确,nvm的路径通常在用户主目录下的.nvm文件夹里
  • 不要直接修改系统级的PATH,避免影响其他服务的运行

内容的提问来源于stack exchange,提问作者d4rkwinz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 04:42:19