热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Github托管项目完成自动化布置

当我们运用github来托管项目时,每次布置项目都要走一样的流程,敲击一样的敕令行,特别的我们的node项目更是无法忍受这类反复事情。那究竟有无一种能够解放我们双手,当我们提交代码

当我们运用github来托管项目时,每次布置项目都要走一样的流程,敲击一样的敕令行,特别的我们的node项目更是无法忍受这类反复事情。

那究竟有无一种能够解放我们双手,当我们提交代码后,服务器自动实行我们已制定好的敕令行,答案是我们能够运用Github自有的Webhooks

Webhooks

Webhooks是来监测你在github上的种种事宜,我们能够经由过程定制它来监测一个push事宜,每当我们提交代码时Webhooks会被触发,这是我们能够经由过程设置一个HOST POST要求到你所须要的地点。

怎样设置

找到你在Github上的项目地点上的SettingWebhooks,如下图设置:

《Github托管项目完成自动化布置》

项目设置

  • 编写实行shell敕令

在项目根目次下新建deployed.sh文件,输入你想在服务器上实行的敕令行,如:

cd /front/docs/
git pull origin master

  • 编写实行剧本

在项目根目次下新建deployed.js文件

var http = require('http')
var spawn = require('child_process').spawn
var createHandler = require('github-webhook-handler')
var handler = createHandler({
path: '/pushCode',
secret: '12345678'
})
http.createServer(function (req, res) {
handler(req, res, function (err) {
res.statusCode = 404;
res.end('no such location')
})
}).listen(3000)
handler.on('error', function (err) {
console.error('Error:', err.message)
})
handler.on('push', function (event) {
console.log('Received a push event for %s to %s',
event.payload.repository.name,
event.payload.ref)
rumCommand('sh', ['./deployed.sh'], function (txt) {
console.log(txt)
})
})
function rumCommand(cmd, args, callback) {
var child = spawn(cmd, args)
var respOnse= ''
child.stdout.on('data', function (buffer) {
response += buffer.toString()
})
child.stdout.on('end', function () {
callback(response)
})
}

nginx设置

实行剧本跑在了3000端口,我们服务器对应启用到 3000 端口

upstream test {
server 127.0.0.1:3000;
}
server {
location /pushCode {
proxy_pass http://test;
proxy_redirect off;
}
}

布置项目

初次布置到服务器时,仍然是须要我们手动实行敕令git pull项目,当我们在服务器上clone下我们的项目后,在当地尝试修正下代码,然后再次提交,可看到背景的日记

《Github托管项目完成自动化布置》

再次检察Webhooks

《Github托管项目完成自动化布置》

示意已自动触发了接口,项目自动化布置胜利。

治理运用

在服务器上实行node敕令后,当我们脱离服务器后,实际上顺序历程封闭了,所以我们运用pm2来治理我们的node历程。

在项目根目次下新建pm2.json

[{
"name": "test",
"script": "deployed.js",
"env_dev": {
"NODE_ENV": "development"
},
"env_production": {
"NODE_ENV": "production"
}
}]

把一切的代码推奉上服务器,进入服务器项目目次,实行

// 启动敕令
pm2 start pm2.json
// 检察是不是启动
pm2 list
// 检察日记
pm2 logs

本文谢谢SkyCai供应的思绪。原文地点


推荐阅读
author-avatar
mobiledu2502930413
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有