资讯专栏INFORMATION COLUMN

Github托管项目实现自动化部署

phodal / 2263人阅读

摘要:当我们利用来托管项目时,每次部署项目都要走同样的流程,敲击同样的命令行,尤其的我们的项目更是无法忍受这种重复工作。

当我们利用github来托管项目时,每次部署项目都要走同样的流程,敲击同样的命令行,尤其的我们的node项目更是无法忍受这种重复工作。

那到底有没有一种可以解放我们双手,当我们提交代码后,服务器自动执行我们已经制定好的命令行,答案是我们可以利用Github自有的Webhooks

Webhooks

Webhooks是来监测你在github上的各种事件,我们可以通过定制它来监测一个push事件,每当我们提交代码时Webhooks会被触发,这是我们可以通过配置一个HOST POST请求到你所需要的地址。

如何配置

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

项目配置

编写执行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下我们的项目后,在本地尝试修改下代码,然后再次提交,可看到后台的日志

再次查看Webhooks

表示已经自动触发了接口,项目自动化部署成功。

管理应用

在服务器上执行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提供的思路。原文地址

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/97129.html

相关文章

  • GitLab [Webhooks] 实现动化服务器部署

    摘要:简介我们在部署我们的应用时我们一般会寻求一些云平台服务器部署当然也可以直接在服务器里拉取远程仓库的代码当然我们也可以实现通过钩子来实现服务器与远程仓库代码的同步这样一来我们在本地提交功能分支到仓库中仓库也会同步到服务器这样我们就无需自己手动 简介 我们在部署我们的web应用时 我们一般会寻求一些云平台服务器部署 当然也可以直接在服务器里拉取远程仓库的代码 当然我们也可以实现通过Webh...

    roadtogeek 评论0 收藏0
  • Python 使用 Tornado 框架实现 WebHook 自动部署 Git 项目

    摘要:使用框架实现自动部署项目为了方便开发测试或项目部署至服务器不那么繁琐,搞一个自动部署的小轮子也是必要的。同时配置项目托管平台的个人私钥或项目公钥,保证能直接拉取。 gohook Python 使用 Tornado 框架实现 WebHook 自动部署 Git 项目 为了方便开发测试或项目部署至服务器不那么繁琐,搞一个自动部署的小轮子也是必要的。 小轮子需要涉及到 Coding 项目托管平...

    notebin 评论0 收藏0
  • 优势+工具+实践=DevOps&Docker的企业级落地

    摘要:的设计模式的设计模式以持续集成持续测试持续交付和持续部署为中心,自动化协作和持续监控是中使用的一些其他设计模式。持续集成持续集成是不断地将源代码集成到一个新的构建或发布的过程,源代码可以在本地存储中,也可以在或中。 showImg(https://segmentfault.com/img/remote/1460000010452455); 识别二维码报名活动 8月19日,来自微软、数人...

    stormjun 评论0 收藏0
  • 使用 TypeScript 编写一个完善包含测试、文档和持续集成的库

    摘要:单元测试一个合格的库应该包含完整的单元测试。是的支持版,和是一样的,它能够直接运行为后缀的单元测试文件。在目录下加入然后执行即可看到单元测试结果。 这篇文章主要是讲述如何使用 TypeScript 编写一个完善,包含测试、文档、持续集成的库,涵盖了编写整个库所需要的技术和工具,主要涵盖: 项目目录骨架 TypeScript 配置 使用 jest 单元测试 使用 vuepress 编写...

    lingdududu 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<