云效流水线使用Node构建部署前端web项目

背景


先来看看没有配置云效流水线之前的部署流程:

在这里插入图片描述
而且宝塔会经常要求重新登录,麻烦的很

网上博客分享了不少的配置流程,这一篇博客的亮点就是不仅给出了npm命令构建,还给出了yarn命令构建,自测都成功部署了。

使用yarn构建过程中,遇到很多报错。

  • yarn install ETIMEDOUT
  • certificate has expired
  • getaddrinfo ENOTFOUND registry.nlark.com

具体怎么解决请看配置流水线的 Node.js 构建 或者前往 阿里云开发者社区 查看我的回答

新建流水线

进入到云效后台,按照下图步骤新建流水线,选择“部署到阿里云主机”

在这里插入图片描述

配置流水线

前面已经选好流水线模板了,接下来就是配置

第一步,修改基本信息

在这里插入图片描述
本项目要部署的是测试环境,所以选了日常环境

第二步,添加流水线源。这是最基础的配置,涉及了:关联代码仓库、配置触发条件

在这里插入图片描述

把代码检查跟单元测试删除了,暂不需要。

此步骤的意思是,当你把最新的代码push到xx分支上就会触发流水线

第三步,Node.js 构建

重要步骤

先看整体的构建步骤

在这里插入图片描述
上图有个构建步骤叫下载流水线源,其实就是跑了一下git clone,实际构建还需要打包dist产物,也就是Node.js 构建 、构建物上传这两个构建步骤

Node.js 构建
在这里插入图片描述
node的版本根据实际需要去选,vscode终端输入node --version查看项目依赖的node版本,但其实云效给出的版本也够用了。

构建命令(npm版本)

cnpm install
npm run build:test

为了避免项目中途增加依赖导致打包报错,建议先install再打包,云效推荐使用cnpm安装依赖,内部配置了最新的国内镜像源(淘宝镜像源)

构建命令(yarn版本-配置代理)

#yarn版本与本地版本保持一致(非必要步骤)
#npm install yarn@1.22.19 -g
#yarn --version
yarn config set registry https://registry.npmmirror.com/
yarn config set strict-ssl false
npm config set registry https://registry.npmmirror.com/
npm config set strict-ssl false
yarn config list
yarn install
yarn run build:test

registry 地址是最新的国内镜像源,保持与本地配置一样(vscode的配置)

构建命令(yarn版本-不配置代理)

#yarn版本与本地版本保持一致(非必要步骤)
#npm install yarn@1.22.19 -g
#yarn --version
yarn config set registry https://registry.yarnpkg.com
yarn config set strict-ssl false
npm config set registry https://registry.npmjs.org
npm config set strict-ssl false
yarn config list
yarn install
yarn run build:test

如果不配置代理那就要科学上网了,构建集群需要重新选择为“云效中国香港服务集群”,并且 registry 要设置回官方源
在这里插入图片描述
记录Node.js 构建使用yarn命令过程遇到一系列报错问题:

问题一:error An unexpected error occurred: “https://registry.npmjs.org/d3-hexjson/-/d3-hexjson-1.1.0.tgz: ETIMEDOUT”

解决方案:配置国内镜像源或者使用云效中国香港服务集群

问题二:项目某个包报错certificate has expired

解决方案:构建脚本多加多一句yarn config set strict-ssl false、npm config set strict-ssl false

问题三:项目某个包报错getaddrinfo ENOTFOUND registry.nlark.com

解决方案:删除项目的yarn.lock、node_modules目录,重新执行yarn install,再提交变更的yarn.lock文件(参考博客:本地或jenkins打包报错:getaddrinfo ENOTFOUND registry.nlark.com

构建物上传

在这里插入图片描述
构建物上传很简单,只要设置一下为打包路径

#具体要看 webpack 配置的 `output.path` ,不一定都叫dist
dist/

这代表只会上传dist目录下所有文件。到了主机部署,云效会把这个构建物压缩,传输到你自己的阿里云服务器

第四步,主机部署

重要步骤

先看主机部署整体配置

在这里插入图片描述

新建主机组暂时没有教程,可以参考以下教程:

下载路径,需要去宝塔新建一个目录,专门放流水线下载的压缩包。

在这里插入图片描述
下载路径

/www/wwwroot/packages/web.tgz

执行用户

root

部署脚本

# 删除dist下的所有文件
rm -rf /www/wwwroot/${APP_PATH}/dist/*
# 把构建物解压到dist目录下
tar zxvf /www/wwwroot/packages/web.tgz -C /www/wwwroot/${APP_PATH}/dist
# 删除压缩包(非必要步骤,反正每次部署都会覆盖前一次的压缩包)
#rm -rf /www/wwwroot/packages/web.tgz

这里根据项目实际情况而定,本项目还多一层dist目录(宝塔站点网站目录配置:设置dist目录为运行目录),具体目录结构前面的背景也有截图出来。

脚本变量 APP_PATH 配置
在这里插入图片描述
字符变量名称

APP_PATH|APP_NAME|WEB_PATH|WEB_NAME|PROJECT_PATH|PROJECT_NAME

记录主机部署配置过程中的报错问题

构建日志报错信息
/root/logger.sh: line 16: date: command not found
[] [INFO] 执行步骤
/root/exec.sh: line 4: tee: command not found
/root/logger.sh: line 4: date: command not found
[] [ERROR] BUILD ERROR
/root/logger.sh: line 4: date: command not found
[] [ERROR] 282504095
/root/logger.sh: line 4: date: command not found
[] [ERROR] 步骤运行失败,返回码: 141
/root/entry.sh: line 180: which: command not found

解决方案:字符变量起名带一个前缀


运行流水线

流水线已全部配置完毕,还需要测试一下脚本执行的有没有问题。

因为脚本里面有rm删除目录操作,注意看前面的文件路径参数有没有写错,记得做好备份

在这里插入图片描述

运行备注随便写,比如:测试自动化部署

点击运行后,会跳转到云效流水线的运行界面

在这里插入图片描述
流水线运行成功后,登进宝塔看看文件的最新修改时间,检查有没有成功部署

确定部署成功之后就可以提交代码去触发流水线

如果触发成功,你可以在流水线的运行历史看到

在这里插入图片描述

至此自动化部署的流水线全部配置完毕,希望能帮助大家

总结

云效流水线可视化做得真好,我们后端也是用的云效流水线。上一篇:云效流水线自动化部署前端纯静态网站

补充(2025年1月22号:pnpm命令构建)

今天跑vue3+ts项目的流水线,发现用cnpm构建报错,本地是用pnpm来管理依赖的

#下载指定版本的pnpm
cnpm install -g pnpm@8.15.4
pnpm i
pnpm run build

具体请看前面的 Node.js 构建

补充(2025年12月11号:push触发的过滤条件)

经常在我提交 master 分支代码也触发了流水线,不合理,开发分支代码是更新到测试环境测试的。所以研究了一下怎么配置,文档写得不是很清楚,连一个完整的例子都没有

官网文档:云效 >操作指南>流水线 >流水线管理 >触发流水线

我试了过滤规则,写了正则表达式,发现没效果。后面还是开启了“开启代码源触发”再配分支过滤条件

在这里插入图片描述
根据需要写自己的分支

.*newres

仅保存之后,尝试一下,在 master 分支也不会触发流水线了,只有在 newres 分支推送代码才会触发

### 平台前端项目流水线部署实现方法 #### 准备工作 为了成功在平台上完成前端项目流水线部署,前期准备工作至关重要。这包括确保公司政策允许代码托管于,并且目标服务器已正确接入阿里环境[^2]。 #### 配置Maven仓库与镜像仓库 对于前端项目而言,虽然主要依赖Node.js生态系统而非Java生态中的Maven工具链,但在某些情况下仍然可能涉及到后端服务或API接口的支持部分;因此设置好相应的构建资源存储位置(如私有npm registry)同样重要。而对于Docker容器化部署场景,则需提前准备好能够容纳应用运行所需全部组件的镜像文件并上传至指定仓库中以便后续拉取使用。 #### 创建主机组及配置 针对具体执行部署操作的目标机器群组定义清晰合理的分组策略有助于简化管理流程提高率。参照已有文档说明来调整适合当前业务需求的最佳实践方案可以作为参考起点[^1]。 #### 编写YAML脚本定义CI/CD过程 通过编写`.yml`格式描述符文件详细规定每一个阶段的任务列表及其参数选项,从而达成持续集成和交付的目的。下面是一个简单的例子展示如何利用提供的能力自动编译打包Vue单页应用程序(SPA),并将产物传输给远程Linux实例上供公网访问: ```yaml version: 1.0 jobs: build_and_deploy_vue_app: steps: - checkout_code: {} - setup_nodejs_environment: node_version: '16.x' - install_dependencies: command: npm ci --prefer-offline - run_build_script: command: npm run build - configure_remote_server_connection: host_ip: $TARGET_ECS_IP username: root private_key_file_path: /path/to/private/key.pem - transfer_artifacts_to_remote_host: source_directory: dist/ destination_directory: /var/www/html/my-vue-app/ - restart_web_service_on_remote_machine: command: systemctl restart nginx.service ``` 此段代码实现了从源码检出、开发环境初始化直至最终发布上线整个闭环内的各个关键环节控制逻辑表达。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值