用ideploy部署平台10分钟搞定持续交付环境,让部署不再麻烦!!
用ideploy部署平台10分钟搞定持续交付环境,让部署不再麻烦!!
卢勇福 发表于1年前
用ideploy部署平台10分钟搞定持续交付环境,让部署不再麻烦!!
  • 发表于 1年前
  • 阅读 621
  • 收藏 34
  • 点赞 1
  • 评论 8

移动开发云端新模式探索实践 >>>   

ideploy是一个用thinkjs+msyql+react+antdesign开发的构建部署平台。

如果觉得ideploy项目对您有用,请到github: https://github.com/wdfe/ideploy   码云:https://git.oschina.net/luyongfugx/ideploy 哈哈:)给我们star,多谢!!

以前端项目开发为例子,在项目迭代过程中,我们经常面临的问题是如何把构建后的静态资源包和页面包(html)部署到测试,预发布,正式环境的2个目录下(通常正式环境需要静态包和页面包在不同机器)。随着人员越来越多,项目越来越复杂,构建部署逐渐成为一个繁重的体力劳动,每次部署都要本地构建,scp到堡垒机,然后scp到目标机器。

ideploy部署平台正是为了解决这一问题而开发设计的。

在部署方面ideploy还提供了部署前diff文件,整理项目成员的修改提交次数等等非常实用的功能。下面我们就来看看如何搭建ideploy部署平台

首先需要说明的是本平台只能在linux下使用

  1. git clone https://github.com/wdfe/ideploy.git 代码到本地(顺便做下广告:https://github.com/wdfe/ideploy.git   是ideploy的git地址,欢迎大家star)

  2. 安装nodejs 依赖:在根目录下运行npm install

  3. 安装ansible (依赖ansible做部署前后的命令行执行)

  4. 安装mysql 数据库,这里就不展开讲了,具体请参考:mysql文档

  5. 新建一个数据库(名字自己取一个就行,比如fe_build),并且开放足够的访问权限,具体可以参考mysql文档

  6. 配置数据库:

     

    打开src/common/config/db.js,分别填写数据库ip地址,数据库名称,用户名和密码,如下所示

    
     export default {
     type: 'mysql',
     log_sql: true,
     log_connect: true,
     adapter: {
         mysql: {
             host: '127.0.0.1',
             port: '',
             database: 'wdfe_publish',
             user: 'root',
             password: '',
             prefix: '',
             encoding: 'utf8'
         },
     }
     }
     

     

  7. 代码,通知邮件等访问权限配置:

    由于构建部署系统需要从代码仓库(svn,git)拉取代码,所以需要首先配置svn仓库用户名和密码

    打开src/common/config/config.js,分别填写各项配置,具体如下:

    
    export default {
    cvsUser: 'myuser',//svn用户名
    cvsPass: 'mypass',//svn密码
    emailHost: 'smtp.qq.com',//通知邮箱地址,这里用qq邮箱作为参考
    emailport: 465,//端口
    emailUser: '3333@qq.com',//邮箱账号
    emailPass: 'xxxxx',//邮箱授权码(具体可以登录mail.qq.com->设置->账户->POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务->生成授权码获取)
    cvsDir: '/temp',//svn代码临时保存目录
    port: 80 //服务器端口,就是部署平台的web服务端口,
    }
    

     

    如果是git项目请保证部署机器能直接有访问git的权限

     

  8. 代码编译,启动

    输入命令以下命令进行编译:

    
      npm run build 
      

    编译完成,运行以下名命令启动:

    
      npm run start
      

    也可以用forever或者pm2来管理服务,以forever为例:

    
      npm install -g forever
      
    项目内置了forever的启动和停止脚本:
    
      ./start.sh
      ./stop.sh
      

     

    服务器起来以后,我们直接访问

    http://localhost

    页面自动跳到登录注册页面,说明启动成功:

  1. 导入数据库脚本,生成数据库基础表结构 这一步主要是为系统运行创建需要的数据库表,为了方便大家使用,项目提供了一个web程序来建立表结构,直接输入:

    http://localhost/install

会出现如下界面,点击‘确定导入数据库表’生成数据库。

当然,也可以通过mysql 直接倒入数据库表结构文件,数据库表文件是db/db.sql

 

构建部署第一个项目

  1. 注册系统用户 第一次进入系统会直接跳到登录页,如果没有注册过则点击底部注册链接进行填写用户名密码进行注册,如果注册过则登录即可

  2. 填写项目信息 登录进入主界面,我们点击左边菜单的新建工程填写工程基本信息,如下所示:

    分别填写项目名称,代码仓库类型,项目语言,代码仓库地址,后面的构建hook,部署hook,hook参数可以先不填(这部分会在高级功能里面详细描述)

  3. 填写部署目标机器,填写完项目信息,点击左边工程列表菜单进入,工程列表页,点击刚才新建的项目进入项目主页:

点击机器列表页进入机器列,点击右上角新建机器,进入新建机器页面,页面如下:   

机器名称:随便取一个机器名称就可以,比如test1

环境类型:分为测试,预发布,正式,直接选择就好。

构建项目任务:构建时候执行的命令,比如 npm run build test1,这个是在项目跟目录下执行(部署这台机器的时候的构建命令,也可以在部署的时候选用自定义构建命令)

机器ip:填写目标部署机器,就是本项目要部署的机器ip

发布源目录:需要部署的目录,即执行构建完构建后需要部署到目标机器的目录,多个可以用';'隔开,对应发布目标目录项数据

发布目标目录:需要将‘发布源目录’里的目录部署到目标机器的对应目录,多个用';'隔开,对应发布目标项。

部署hook:(自定义hook,具体会在高级使用里有描述)

hook参数:(自定义hook参数,具体会在高级使用里有描述)

部署命令执行目录:如果部署时需要在目标机器执行命令,则需要填写命令执行目录

部署前执行命令:如果部署前需要在目标机器执行命令,则需要填写命令,该命令会在开始部署之前在目标机器的‘部署命令执行目录’上执行

部署完成执行命令:如果部署后需要在目标机器执行命令,则需要填写命令,该命令会在完成部署之后在目标机器的‘部署命令执行目录’上执行

ssh用户:最终的部署是用rsync命令部署的,需要填写ssh用户名

ssh密码:如果需要ssh密码则填写上

  1. 构建部署

    填写完机器就可以进行部署了,点击工程列表菜单进入工程列表页,点击项目进入项目主页。 首先点击‘开始检出’将代码从代码仓库拉取到部署平台机器,这里部署平台做了几件事情: 1.将本次要部署代码从代码仓库部署到部署机器 2.判断是否有过上线部署如果有则,则拉取上次部署代码tag,进行比较,列出本次部署跟上次线上部署的新增文件,修改文件未修改文件,并根据提交人显示从上次上线正式环境到本次部署的提交历史,如下图所示:

黄色用户名按钮显示的是从上次部署上线到现在,都有谁提交了多少次commit(按钮内容是提交者id,右上角数字是提交次数),点击按钮弹出该成员从上次上线到本次上线间的提交历史,如下图所示:

点击某个文件右边的蓝色‘查看’按钮,会显示出该文件在本次提交的具体修改(绿色表示提交后版本,红色表示提交前版本),如下图所示:

除了列出每个成员的commit历史,并提供查看每次修改的记录以外,系统还提供了从上次正式上线到本次上线间文件的变化总览和明细,提供了新增,修改,未修改3个tab来显示文件变化情况(tab右上角的数字表示新增,修改,未修改的数字)。底部的文件列表列出了具体文件,对于修改的文件,点击‘查看差异’按钮可以显示具体修改了文件的那些地方,如下图所示:

 

检查检出步骤的各种输出,都没问题后就可以进行构建打包了。由于部署系统支持部分文件上线的功能。如果需要部分文件上线,需要从检查结果列表里面点击选择要上线的文件,并选择是通过只上线选择文件还是上线除被选择文件以外的文件的方式来实现部署上线,如下图所示:

到这里我们可以开始对项目进行构建打包了,你可以通过选择指定机器部署构建来执行构建(执行在填写部署机器时填写的构建命令进行构建),也可以通过自定义构建命令来进行构建(填写的命令会在跟目录下直接执行),如果是js项目,为了减少npm install的时间,第一次请选择是否跟新node_modules,后面如果构建依赖没有变化,则可以不选择,界面如下图:

点击‘构建’按钮执行构建,构建命令输出可以在‘后台日志’里看到,查看输出日志,看看是否构建成功,如下图所示:

构建完成,还可以通过构建结果的按钮查看构建后的,如下2图所示: 

 

构建完成后,底部的部署按钮会由灰转量,这时候我们只要填写好部署说明和部署原因,点击部署就可以完成部署了(值得一提的是,可以选择一次部署多台机器),如下图所示:

部署完成后,会弹出一个层,表示部署完成并且询问是否锁定部署机器,如果锁定则这个项目的这台机器不能再部署,只有本次部署的人解锁以后才可以继续部署:

另外从后台日志输出模块也可以实时看到部署过程,如果部署的事正式线上项目,那么系统还会自动给项目打tag留存

到此我们的第一个项目部署完成,需要部署其他项目或者机器的,请按照添加项目的机器的规则进行添加部署即可

 

如果觉得ideploy项目对您有用,请到github: https://github.com/wdfe/ideploy   码云:https://git.oschina.net/luyongfugx/ideploy 哈哈:)给我们star,多谢!!

 

  • 打赏
  • 点赞
  • 收藏
  • 分享
共有 人打赏支持
卢勇福
粉丝 39
博文 19
码字总数 22106
作品 9
评论 (8)
红薯
建议地址更换为 https://git.oschina.net/luyongfugx/ideploy 哈哈:)
卢勇福

引用来自“红薯”的评论

建议地址更换为 https://git.oschina.net/luyongfugx/ideploy 哈哈:)
本来2个都写上的,但是貌似到了内容极限了吗?提交了好几次都失败,就放弃了
红薯

引用来自“红薯”的评论

建议地址更换为 https://git.oschina.net/luyongfugx/ideploy 哈哈:)

引用来自“卢勇福”的评论

本来2个都写上的,但是貌似到了内容极限了吗?提交了好几次都失败,就放弃了
怎么会呢? 提示什么错误?
首推码云呗,毕竟文章是针对国人的,访问码云更快:)
卢勇福

引用来自“红薯”的评论

建议地址更换为 https://git.oschina.net/luyongfugx/ideploy 哈哈:)

引用来自“卢勇福”的评论

本来2个都写上的,但是貌似到了内容极限了吗?提交了好几次都失败,就放弃了

引用来自“红薯”的评论

怎么会呢? 提示什么错误?
首推码云呗,毕竟文章是针对国人的,访问码云更快:)
这会没问题了,都加上了
林林未
如果项目里面 对应各个环境的配置文件都不一样 那要怎么管理 配置文件?
卢勇福

引用来自“林林未”的评论

如果项目里面 对应各个环境的配置文件都不一样 那要怎么管理 配置文件?
平台不关心配置和构建脚本,各个环境的配置可以通过构建命令参数决定当前构建使用哪个配置。不知道这样是不是能回答你的问题
林林未

引用来自“卢勇福”的评论

引用来自“林林未”的评论

如果项目里面 对应各个环境的配置文件都不一样 那要怎么管理 配置文件?
平台不关心配置和构建脚本,各个环境的配置可以通过构建命令参数决定当前构建使用哪个配置。不知道这样是不是能回答你的问题

@卢勇福 比如 你们各个环境的构建命令参数是?
卢勇福

引用来自“林林未”的评论

引用来自“卢勇福”的评论

引用来自“林林未”的评论

如果项目里面 对应各个环境的配置文件都不一样 那要怎么管理 配置文件?
平台不关心配置和构建脚本,各个环境的配置可以通过构建命令参数决定当前构建使用哪个配置。不知道这样是不是能回答你的问题

@卢勇福 比如 你们各个环境的构建命令参数是?
比如 测试环境: npm run build test 正式环境: npm run build product
×
卢勇福
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: