CNode

如何一键部署项目、代码自动更新

分享
Kkelvv发布于10 年前最后回复10 年前7 回复9593 浏览0 收藏

my-deploy : 由nodejs写的一个自动更新工具,理论支持所有语言(php、java、c#)的项目,支持所有git仓库(bitbucket、github等)。

视频演示

github

效果如何?

  • 如果你的后端项目放在github、bitbucket等git仓库中管理 , 在你的服务器中配置好mydeploy,它会根据你的配置,自动检查是否需要拉取最新代码 , 并且自动帮助你更新。

支持方式

  1. webhook : 你需要在你的仓库的webhook中设置你的服务器地址+端口,my-deploy接收到仓库的请求,会监测commit和tag,看是否需要拉取代码,如果需要,获取最新代码,此时借助pm2等可以达到自动更新重启的效果。

    配置文件:

    {
         "mode": "webhook",
         "url": "your project url of git use http",
         "localdir": "/path/of/your/local/project",
         "branch": "master",
         "port":"3100"
         "rules": [
      	   {
      		   "type": "tag",
      		  "value": "[vV]\\d+"
      	  },
      	  {
      		  "type": "commit",
      		  "value": "#[\\s\\S]*?deploy\\s*[\\s\\S]*?77"
      	  }
        ]
    }
    
  2. pullwatch : 设置好my-deploy的拉取间隔时间,它会定期获取项目是否需要更新,并作出相关更新工作。

    配置文件:

    {
        "mode": "pullwatch",
        "url": "your url of git use http",
        "localdir": "/path/of/your/local/project",
        "interval": 3000,
        "branch": "master",
        "rules": [
       	 {
       		 "type": "tag",
       		"value": "[vV]\\d+"
       	},
       	{
       		"type": "commit",
       		"value": "#[\\s\\S]*?deploy\\s*[\\s\\S]*?77"
       	}
       ]
    }
    

总结

简单、方便的部署,让你解放服务器的代码更新,专心写代码,直接push,服务端自动更新。可以由commit的信息中区分该提交是否需要更新的,灵活控制。

该工具结合docker和集群效果更佳,更好玩。欢迎star , fork!谢谢

查看回复

回复 (7)

F
flamingtop#1·10 年前

部署可以简单到

while true; do git pull && gulp build; sleep 5; endwhile &

T
tomoya92#2·10 年前

K
kelvv#3·10 年前

@flamingtop 你这样不觉得很粗暴,无任何控制吗?

S
Smallpath#4·10 年前

前段时间自己搭webhook+pm2时踩了坑, 用pm2托管的项目无法使用子进程调用pm2命令, 坑了我整整5个小时排错才排到pm2身上来,提了issue到现在3周了还没修复

K
kelvv#5·10 年前
引用 Smallpath前段时间自己搭webhook+pm2时踩了坑, 用pm2托管的项目无法使用子进程调用pm2命令, 坑了我整整5个小时排错才排到pm2身上来,提了issue到现在3周了还没修复

@Smallpath pm2的 deploy 也差不多原理,但是使用起来就不方便(配置ssh key等) , 如果结合docker的话就更不方便了。。

为了组件化、docker化 , 我就做了这么个my-deploy出来 , 把webhook,自动拉取更新这块抽离出来,就可以用在所有项目中了。

F
flamingtop#7·10 年前
引用 kelvv@flamingtop 你这样不觉得很粗暴,无任何控制吗?

@kelvv 粗暴的标准是什么?是不是不用酷酷的东西比如webhook就不粗暴,webhook需要你部署单独的hook入口,对一个生产网站应该尽量减少非生产入口;没有控制?shell是自包含的,可调可见,就像linux 的service命令,apt-get,一行命令可以窜起来很多部署动作,写日志等等,也可以交给cron系统,在shell里你甚至可以做linux container(就像docker),部署是系统操作,有比shell更贴近系统也更灵活易用的吗?

参与回复
登录后即可参与回复。登录