我目前正在构建多个react应用程序,如果能够将它们从github repo连续部署到dev域,让客户端能够访问它们,那将是一件很棒的事情。每当我将pull请求合并到master分支时,我都可以通过GitHub Actions设置一个webhook,以便Plesk提取当前代码并部署它。现在我想我可以简单地在Plesk中的git-reo设置中添加两个额外的部署操作来使其工作:
/opt/plesk/node/17/bin/npm install &> npm-install.log
/opt/plesk/node/17/bin/npm run build &> npm-build.log
第一个显然将安装NPM依赖项,第二个将在/build文件夹中构建一个生产捆绑包(两个输出都已记录(。然后,我设置了一个非常简单的.htaccess文件,将流量重定向到该子目录中(有人告诉我,这也是实现路由的最简单方法(。
RewriteEngine on
RewriteCond %{REQUEST_URI} !build/
RewriteRule (.*) /build/$1 [L]
当我在本地机器上安装依赖项并手动上传时,一切都像一个魅力。通过Plesk安装依赖项也可以。不知怎么的,我无法让我的系统构建一个生产捆绑包。构建日志如下:
> testing@0.1.0 build
> react-scripts build
/var/www/vhosts/VIRTUALHOST/ROOTDIRECTORY/node_modules/universalify/index.js:15
}, 'name', { value: fn.name })
^
TypeError: Cannot read property 'name' of undefined
at exports.fromCallback (/var/www/vhosts/VIRTUALHOST/ROOTDIRECTORY/node_modules/universalify/index.js:15:26)
at Object.<anonymous> (/var/www/vhosts/VIRTUALHOST/ROOTDIRECTORY/node_modules/fs-extra/lib/fs/index.js:57:27)
at Module._compile (module.js:652:30)
at Object.Module._extensions..js (module.js:663:10)
at Module.load (module.js:565:32)
at tryModuleLoad (module.js:505:12)
at Function.Module._load (module.js:497:3)
at Module.require (module.js:596:17)
at require (internal/module.js:11:18)
at Object.<anonymous> (/var/www/vhosts/VIRTUALHOST/ROOTDIRECTORY/node_modules/fs-extra/lib/index.js:5:6)
然后我尝试通过SSH运行构建过程,结果也是一样。多个不同的NPM/节点版本,结果相同。我已经在谷歌上搜索了一个小时,但没有任何运气,但这对我来说真的很值得,因为如果我能以某种方式让它发挥作用,我会看到自己在未来更频繁地使用CI/CD工作流。
如果有人对CI/CD工作流有任何不同的建议,或者认为我的想法不是最佳实践,我很想学习!
感谢您的反馈
编辑1
所以我能够通过安装nvm让它通过SSH工作。问题是,部署操作仍然没有使用正确的版本(用于执行这些操作的用户与我通过SSH登录的用户相同,但它使用的是不同的NPM和节点版本(。我开始生气了,因为我根本不明白怎么了!:D
系统规格:
OS发布
NAME="Ubuntu">
VERSION="18.04.6 LTS(仿生海狸(">
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 18.04.6 LTS">
VERSION_ID=";18.04〃
HOME_URL="https://www.ubuntu.com/">
SUPPORT_URL="https://help.ubuntu.com/">
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/">
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy">
VERSION_CODENNAME=仿生
UBUNTU_CODENAME=仿生
Plesk版本
18.0.41 Ubuntu 18.04 1800220207.23
节点版本
v17.7.2(但也在其他几个版本上进行了测试(
NPM版本
8.5.2
核心启动与创建反应应用程序(5.0.0(。
经过思考,我认为也许再次编写一个自定义构建脚本来源于用户的.bashrc文件会奏效。。。瞧!
因此,需要重申的是,我的工作流程如下(仍有待建议(:我将提交推送到我的GitHub Repo,我将开发分支合并到我的master,一旦拉取请求被合并,GitHub Action就会触发我的Plesk Server设置的webhook,它反过来拉取所有代码更改,安装所有需要的依赖项,并构建一个生产包。我的域指向基本目录,但.htaccess文件(上面提供(将所有请求重定向到构建目录。
希望这对某人有帮助。