热门标签 | 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供应的思绪。原文地点


推荐阅读
  • 本文详细介绍了如何使用 Yii2 的 GridView 组件在列表页面实现数据的直接编辑功能。通过具体的代码示例和步骤,帮助开发者快速掌握这一实用技巧。 ... [详细]
  • 本文介绍了如何使用JQuery实现省市二级联动和表单验证。首先,通过change事件监听用户选择的省份,并动态加载对应的城市列表。其次,详细讲解了使用Validation插件进行表单验证的方法,包括内置规则、自定义规则及实时验证功能。 ... [详细]
  • 本文详细介绍了如何解决Uploadify插件在Internet Explorer(IE)9和10版本中遇到的点击失效及JQuery运行时错误问题。通过修改相关JavaScript代码,确保上传功能在不同浏览器环境中的一致性和稳定性。 ... [详细]
  • 1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ... [详细]
  • PHP 5.2.5 安装与配置指南
    本文详细介绍了 PHP 5.2.5 的安装和配置步骤,帮助开发者解决常见的环境配置问题,特别是上传图片时遇到的错误。通过本教程,您可以顺利搭建并优化 PHP 运行环境。 ... [详细]
  • 本文详细解析了Python中的os和sys模块,介绍了它们的功能、常用方法及其在实际编程中的应用。 ... [详细]
  • RecyclerView初步学习(一)
    RecyclerView初步学习(一)ReCyclerView提供了一种插件式的编程模式,除了提供ViewHolder缓存模式,还可以自定义动画,分割符,布局样式,相比于传统的ListVi ... [详细]
  • 网络运维工程师负责确保企业IT基础设施的稳定运行,保障业务连续性和数据安全。他们需要具备多种技能,包括搭建和维护网络环境、监控系统性能、处理突发事件等。本文将探讨网络运维工程师的职业前景及其平均薪酬水平。 ... [详细]
  • 本文将介绍如何编写一些有趣的VBScript脚本,这些脚本可以在朋友之间进行无害的恶作剧。通过简单的代码示例,帮助您了解VBScript的基本语法和功能。 ... [详细]
  • Explore a common issue encountered when implementing an OAuth 1.0a API, specifically the inability to encode null objects and how to resolve it. ... [详细]
  • Linux 系统启动故障排除指南:MBR 和 GRUB 问题
    本文详细介绍了 Linux 系统启动过程中常见的 MBR 扇区和 GRUB 引导程序故障及其解决方案,涵盖从备份、模拟故障到恢复的具体步骤。 ... [详细]
  • 深入理解Tornado模板系统
    本文详细介绍了Tornado框架中模板系统的使用方法。Tornado自带的轻量级、高效且灵活的模板语言位于tornado.template模块,支持嵌入Python代码片段,帮助开发者快速构建动态网页。 ... [详细]
  • 360SRC安全应急响应:从漏洞提交到修复的全过程
    本文详细介绍了360SRC平台处理一起关键安全事件的过程,涵盖从漏洞提交、验证、排查到最终修复的各个环节。通过这一案例,展示了360在安全应急响应方面的专业能力和严谨态度。 ... [详细]
  • 掌握远程执行Linux脚本和命令的技巧
    本文将详细介绍如何利用Python的Paramiko库实现远程执行Linux脚本和命令,帮助读者快速掌握这一实用技能。通过具体的示例和详尽的解释,让初学者也能轻松上手。 ... [详细]
  • 本文介绍了如何使用PHP代码实现微信平台的媒体素材上传功能,详细解释了API接口的使用方法和注意事项,确保文件路径正确以避免常见的错误。 ... [详细]
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社区 版权所有