CI/CD GitHub:使用Plesk服务器在开发人员域上进行React应用程序



我目前正在构建多个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文件(上面提供(将所有请求重定向到构建目录。

希望这对某人有帮助。

最新更新