使用GitHub Actions部署Node.js/React应用到AWS EC2遇问题求助
结合你的GitHub Actions配置和部署场景,可能的原因有以下几点:
dist目录不存在或为空
你的配置中使用了npm run build --if-present,这个参数会在package.json没有定义build脚本时跳过执行,不会抛出错误。如果你的项目里没有build脚本,或者build过程中出现编译错误(比如依赖缺失、语法错误)导致dist目录未生成,后续的cp命令就会因为找不到dist/*而失败。另外,部分React脚手架(比如Create React App)默认build产物目录是build而非dist,如果你的项目属于这种情况,复制dist的步骤自然会出错。权限不足
你在清理和复制文件时使用了sudo,但EC2上的self-hosted runner用户可能没有无密码sudo权限,执行sudo时需要输入密码,导致命令卡住失败。另外,/var/www/html目录的权限设置可能限制了runner用户(即使通过sudo)的写入操作,比如SELinux的安全策略阻止了文件写入。Self-hosted Runner环境异常
EC2上的self-hosted runner可能存在环境问题:比如系统中安装的Node.js版本与setup-node指定的版本冲突,导致npm ci或npm run build执行失败;或者runner的工作目录出现异常,代码checkout不完整,导致后续依赖安装、编译步骤出错。文件复制命令的潜在问题
使用cp -Rv dist/* /var/www/html时,如果dist目录下没有任何文件,部分Linux系统会抛出no such file or directory的错误;如果dist目录本身不存在,这个命令直接执行失败。
内容的提问来源于stack exchange,提问作者Chris Gauthier Winnipeg

