我在运行nginx的Ubuntu服务器上有一个Laravel应用程序。
我想为静态站点设置一个像Netlify一样的CD系统,以便服务器在每个git push
上自动pull
并运行build
脚本,这非常酷。
我设置了一个GitHub Webhook,以便每次按下它都会触发服务器上名为deploy.sh
的bash脚本。
这是我的deploy.sh
:
#!/bin/bash
# activate maintenance mode
php artisan down
# update source code
git pull
npm run build
# update PHP dependencies
#composer install --no-interaction --no-dev --prefer-dist
php artisan migrate --force
php artisan up
到目前为止一切顺利。
但是该脚本在npm run build
脚本处失败,我得到以下输出:
> npm run production
npm ERR! code ELIFECYCLE
npm ERR! syscall spawn sh
npm ERR! file sh
npm ERR! path sh
npm ERR! errno ENOENT
npm ERR! @ build: `npm run production`
npm ERR! spawn sh ENOENT
npm ERR!
npm ERR! Failed at the @ build script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
当我在终端中通过ssh手动运行脚本时,即使www-data
用户也可以运行脚本!
我测试了通过运行www-data
以sudo -H -u www-data ./deploy.sh
用户的身份运行它,它可以正常工作!
因此,我感到困惑的是,为什么它在被Webhook [以用户www-data
身份运行时触发失败,我通过将whoami
放入脚本中来确认] ...
任何帮助将不胜感激,因为我已经尝试了很长时间了...