阿里云持续集成实践

之前项目部署都是ssh登陆到服务器,手动执行更新代码、关闭已启动的应用实例、启动应用实例。如果有多台机器的话,效率上就有点偏低了。后来发现阿里云有CodePipeline产品,可以用来做持续集成。配置好后,在web界面里点一下就能一键部署,甚至部署到多台机器。过程中也遇到了一些问题,现记录下。

问题1

首先是项目依赖bcrypt,这个包构建依赖于python,但nodejs的构建机环境是没有python的。解决方式是自己提供python

wget https://www.python.org/ftp/python/2.7.15/Python-2.7.15.tar.xz
tar -xf Python-2.7.15.tar.xz
export PATH=$PATH:$WORKSPACE/Python-2.7.15/bin
npm install
rm Python-2.7.15.tar.xz
rm -rf Python-2.7.15
复制代码

下载python蛮费时间的,我最后选择把python压缩文件包加到仓库里。

问题2

CodePipeline整个流程是这样的,先在构建机构建,完成后上传到oss,最后下载构建好的项目到目标机器上部署。npm install安装是在构建阶段执行的,会symlink包的执行文件到node_modules/.bin下,但是在目标机器部署时,symlink就失效了。所以执行npm scripts时就会报错。

解决方式有两种,首先是直接执行node_modules下包的js文件

  "scripts": {
    "start": "EGG_SERVER_ENV=prod egg-scripts start --daemon --title=egg-server-lvcaixin-user",
    "startCI": "EGG_SERVER_ENV=prod node ./node_modules/egg-scripts/bin/egg-scripts.js start --daemon --title=egg-server-lvcaixin-user"
  }
复制代码

当然这样就需要为持续集成新增一个命令。

还有种方式是重新生成node_modules/.bin下的文件。

看了下npm的相关文档,发现npm build会在npm install之后执行,做一些link相关的工作,刚好解决上门的问题,当时实际在背后做这事的是bin-links

npm build node_modules/egg-scripts
npm run stop
npm run start
复制代码

问题3

在部署阶段执行的脚本,是不会影响CodePipeline作业的构建状态,也就是说部署阶段的脚本出错了,CodePipeline作业的构建状态还是成功的。

这个显然是不符合常理的,我也特意提工单,问了下工作人员。工作人员回复说是异步执行的技术原因,需要进一步的排期。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值