阿里云持续集成实践

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

问题1

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

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压缩文件包加到仓库里。git

问题2

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

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

"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"
  }
复制代码

固然这样就须要为持续集成新增一个命令。npm

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

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

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

问题3

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

这个显然是不符合常理的,我也特地提工单,问了下工做人员。工做人员回复说是异步执行的技术缘由,须要进一步的排期。异步

相关文章
相关标签/搜索