云效(原RDC)如何构建一个基于NodeJS的前后端项目

2023-10-22 01:59
文章标签 构建 项目 nodejs 云效 rdc

本文主要是介绍云效(原RDC)如何构建一个基于NodeJS的前后端项目,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

最近在将公司的持续集成架构做一个系统的调整,调整过程中受到了RDC团队大量的帮助,所以利用国庆时间写了几篇RDC的分享,希望能让更多的人了解和用好RDC这个产品。

我会把我最近3个月的使用体会分成5个部分:使用RDC的动机、PHP项目集成、JS项目集成、JAVA项目集成、Docker类项目集成这5个分支来写

因为近期RDC的迭代比较频繁,所以我的分享会比较的浅,点到为止,仅供参考,目录:

1、RDC如何耦合进我们的业务

2、如何构建一个基于Composer的PHP项目

3、如何构建一个基于NodeJS的前后端项目

4、如何构建一个基于Maven的Java项目

5、RDC + 容器服务完成持续集成


一、RDC基础操作

在开始一切之前您需要熟悉RDC的一些基础操作,创建一个项目,然后在这个项目中创建一个应用,然后让这个应用关联某个代码分支。这样基础工作就完成了,我这里不再赘述了,因为比较简单,只需要注册个阿里云账号,然后去 rdc.aliyun.com 创建/加入个企业就行了。

本文所有的体验均基于【自由模式】的应用。

值得一提的是,应用代码源目前支持的是阿里云的代码仓库,基于gitlab,地址是 code.aliyun.com,从我2年的使用经验来看,还算好用,也不收费,较为靠谱。

在创建应用时,我们需要选择对应的配置,如下图:

image

创建完应用后,进入【项目】--》【流水线】,找到刚才创建应用的【同名流水线】

image

点击流水线名称可以看到具体的流水线运行情况和对应节点,如下图:

image

可以看到有4个面板:构建、日常、预发、正式。

分别对应的是:构建打包、发布到日常环境、发布到预发环境、发布到正式环境。

RDC在创建应用时自动的为你生成了一个标准模板流水线,但是我们一般用不着,所以需要对流水线进行修改,去除无用的节点,添加我们自己的配置。点击界面上的【编辑流水线】按钮就可以进入修改界面。

image

我们先从构建开始,所以先暂时删除日常、预发、正式这3个部署节点,仅保留构建这一个节点即可。下面的配置暂时不进行调整。删除完毕后保存流水线即可,效果如下:

image

至此我们已经完成了基础的准备工作,下一步就开始进行代码的构建工作了。

在开始下一步工作之前,请重新git pull一下您的代码到本地,会看到一个由RDC服务自动生成的配置文件:==xxx.release== 这个文件相当重要,请注意,下面将会说明如何通过此文件完成个性化构建。


二、基于NodeJS的前后端项目构建

因为node类项目一般都通过NPM来维护第三方库,并且一般会通过webpack来进行构建、合并、压缩,所以在RDC构建时需要完成依赖包下载及webpack编译的相关工作。

这里需要找到我们上一章节中提到的:==xxx.release== 文件,xxx代表你的应用名,所以我这里看到的文件名是:ms-autotags.release

这个文件的配置规范可以参考:==https://help.aliyun.com/document_detail/59293.html==

打开这个文件可以看到,已经有一些预先定义好的配置:

# 构建源码语言类型
code.language=scripts# 应用部署脚本
deploy.appctl.path=deploy.sh# Docker镜像构建之后push的仓库地址
docker.repo=registry.cn-hangzhou.aliyuncs.com/xxx/abced

上面的配置是不能用的,我们需要将其修改为如下内容:

# 语言类型,需要修改,否则无法调用对应的构建环境
code.language=node8.x#构建命令
build.command=sh build.sh# 应用部署脚本,先注释掉,暂时用不上
# deploy.appctl.path=deploy.sh

↓↓↓↓ 配置说明:

code.language=nodejs

代表使用的是nodejs作为代码语言类型。支持以下枚举:

php5.6,php7.0,node6.x,node7.x,node8.x,oracle-jdk1.7,oracle-jdk1.8, oracle-jdk1.9,scripts

如果有使用过jenkins的同学,那么应该比较好理解,RDC的构建是通过Docker容器技术实现的,类似于配置好环境的jenkins构建机,RDC团队针对各种语言准备了不同的镜像作为构建宿主。


build.command=sh build.sh

这一行的意思是,使用一个特定的脚本来进行自定义构建,因为构建有时候需要处理的东西很多,一行命令解决不了,所以需要一个自定义构建脚本,此处我设置的脚本在代码根目录下,创建一个build.sh脚本。如果你的构建只有1句话,可以直接写在“=”号后面,使用自定义脚本是为了更清晰和更灵活。

↓↓↓↓ build.sh脚本内容:

echo "##### npm to taobao"
npm install -g cnpm --registry=https://registry.npm.taobao.orgecho "##### cnpm install --save"
cnpm install --saveecho "##### cnpm build"
cnpm run build

逐句解释:

npm install -g cnpm --registry=https://registry.npm.taobao.org

使用npm的中国全量资源,cnpm由淘宝维护,国内最快的镜像站点。切换的目的就是为了构建快一些,因为RDC目前暂时不支持海外构建,所以不改可能会导致构建很慢。


cnpm install --save

最核心的一句话,安装所有第三方库依赖,这一句执行后如果正确,就会生成node_modules文件夹了。也意味着如果你使用开源框架,你的angularjs、vue等框架就安装成功了。


cnpm run build

这句话是使用webpack完成打包工作,前端项目通常是生成dist文件夹,此文件夹为项目的产出物。


我们已经完成了应用的创建+流水线的修改,那么我们运行一次构建试一下,只需要点击【运行流水线】按钮即可,运行后等几秒刷新一下页面,效果如下:

image

可以看到执行时间、版本号、日志、操作人等信息。

如果构建失败了,可以通过构建流程----日志详情面板看到具体的错误原因,有日志排查起来不太难,但是RDC的构建还是偏向黑盒,所以尽量熟练或在本地先把相关命令跑通后再上传到==xxx.release==文件里去进行RDC构建。

可以看到初始的版本号是:v0.0.1-1,如果你的构建一直失败,版本号会变成v0.0.1-3、v0.0.1-8、v0.0.1-18、v0.0.1-N。

如果你的流水线全流程跑完了,则会自动叠加一个小版本号变为v0.0.2-1,所以这种构建方式清晰明了,还算好用。


三、如何输出为一个Docker镜像

我们已经完成了代码的打包编译工作,下一步我们需要把完整的代码封装成一个Docker镜像,我们需要对==xxx.release==文件做如下改动:


# 语言类型,需要修改,否则无法调用对应的构建环境
code.language=node8.x#构建命令
build.command=sh build.sh# Docker 构建配置
docker.file=Dockerfile# Docker镜像构建之后push的仓库地址
docker.repo=registry.cn-hangzhou.aliyuncs.com/xxx/abceddocker.tag=ci-${PACKAGE_LABEL} # 应用部署脚本,先注释掉,暂时用不上
# deploy.appctl.path=deploy.sh

相对于单纯的构建,如果需要生成Docker镜像则需要补充几个配置项,拆解说明如下:

docker.file=Dockerfile

指明dockerfile文件的位置和文件名,默认就是根目录下的Dockerfile文件。


docker.repo=registry.cn-hangzhou.aliyuncs.com/xxx/abced

指定你的docker镜像仓库,建议使用阿里云提供的仓库,免费,速度快,可以加速docker hub的内容,无缝对接RDC服务,地址是 dev.aliyun.com ,此处的xxx对应的是你的名称空间,abced对应的是你的镜像名称。


docker.tag=ci-${PACKAGE_LABEL}-${TIMESTAMP}

这里指定你的docker镜像的tag名,使用了环境变量进行拼接。

${PACKAGE_LABEL}代表的是包名,这个参数在流水线配置里可以改,默认是default。

${TIMESTAMP}代表的是当前时间戳,格式是:20171008224350 这种样子。

有的项目一份代码可能产生多个docker镜像就需要通过这种方式来动态生成tag名,防止覆盖,也便于回滚。

关于构建传参,可以参考这个文章: https://help.aliyun.com/document_detail/59297.html

那么此处最终生成的tag名是这样的: ci-default-20171008224350

结合仓库名和镜像名,最终会生成镜像tag地址为:

registry.cn-hangzhou.aliyuncs.com/xxx/abced:ci-default-20171008224350


四、后记

NodeJS构建 + Docker构建就说到这里,因为主要是为了介绍RDC,所以Docker部分就挑重点讲了,如何编写Dockerfile文件请自行学习。

输出成Docker镜像后,如何使用RDC部署到容器相关问题我会单独开一个文章来分享。

这篇关于云效(原RDC)如何构建一个基于NodeJS的前后端项目的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/258380

相关文章

vite搭建vue3项目的搭建步骤

《vite搭建vue3项目的搭建步骤》本文主要介绍了vite搭建vue3项目的搭建步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学... 目录1.确保Nodejs环境2.使用vite-cli工具3.进入项目安装依赖1.确保Nodejs环境

idea npm install很慢问题及解决(nodejs)

《ideanpminstall很慢问题及解决(nodejs)》npm安装速度慢可通过配置国内镜像源(如淘宝)、清理缓存及切换工具解决,建议设置全局镜像(npmconfigsetregistryht... 目录idea npm install很慢(nodejs)配置国内镜像源清理缓存总结idea npm in

idea+spring boot创建项目的搭建全过程

《idea+springboot创建项目的搭建全过程》SpringBoot是Spring社区发布的一个开源项目,旨在帮助开发者快速并且更简单的构建项目,:本文主要介绍idea+springb... 目录一.idea四种搭建方式1.Javaidea命名规范2JavaWebTomcat的安装一.明确tomcat

pycharm跑python项目易出错的问题总结

《pycharm跑python项目易出错的问题总结》:本文主要介绍pycharm跑python项目易出错问题的相关资料,当你在PyCharm中运行Python程序时遇到报错,可以按照以下步骤进行排... 1. 一定不要在pycharm终端里面创建环境安装别人的项目子模块等,有可能出现的问题就是你不报错都安装

nodejs打包作为公共包使用的完整流程

《nodejs打包作为公共包使用的完整流程》在Node.js项目中,打包和部署是发布应用的关键步骤,:本文主要介绍nodejs打包作为公共包使用的相关资料,文中通过代码介绍的非常详细,需要的朋友可... 目录前言一、前置准备二、创建与编码三、一键构建四、本地“白嫖”测试(可选)五、发布公共包六、常见踩坑提醒

uni-app小程序项目中实现前端图片压缩实现方式(附详细代码)

《uni-app小程序项目中实现前端图片压缩实现方式(附详细代码)》在uni-app开发中,文件上传和图片处理是很常见的需求,但也经常会遇到各种问题,下面:本文主要介绍uni-app小程序项目中实... 目录方式一:使用<canvas>实现图片压缩(推荐,兼容性好)示例代码(小程序平台):方式二:使用uni

MyCat分库分表的项目实践

《MyCat分库分表的项目实践》分库分表解决大数据量和高并发性能瓶颈,MyCat作为中间件支持分片、读写分离与事务处理,本文就来介绍一下MyCat分库分表的实践,感兴趣的可以了解一下... 目录一、为什么要分库分表?二、分库分表的常见方案三、MyCat简介四、MyCat分库分表深度解析1. 架构原理2. 分

使用Node.js和PostgreSQL构建数据库应用

《使用Node.js和PostgreSQL构建数据库应用》PostgreSQL是一个功能强大的开源关系型数据库,而Node.js是构建高效网络应用的理想平台,结合这两个技术,我们可以创建出色的数据驱动... 目录初始化项目与安装依赖建立数据库连接执行CRUD操作查询数据插入数据更新数据删除数据完整示例与最佳

linux查找java项目日志查找报错信息方式

《linux查找java项目日志查找报错信息方式》日志查找定位步骤:进入项目,用tail-f实时跟踪日志,tail-n1000查看末尾1000行,grep搜索关键词或时间,vim内精准查找并高亮定位,... 目录日志查找定位在当前文件里找到报错消息总结日志查找定位1.cd 进入项目2.正常日志 和错误日

在.NET项目中嵌入Python代码的实践指南

《在.NET项目中嵌入Python代码的实践指南》在现代开发中,.NET与Python的协作需求日益增长,从机器学习模型集成到科学计算,从脚本自动化到数据分析,然而,传统的解决方案(如HTTPAPI或... 目录一、CSnakes vs python.NET:为何选择 CSnakes?二、环境准备:从 Py