{"id":13671544,"url":"https://github.com/HuangXiZhou/auto-build","last_synced_at":"2025-04-27T18:31:21.949Z","repository":{"id":143833650,"uuid":"107175120","full_name":"HuangXiZhou/auto-build","owner":"HuangXiZhou","description":"🤖 Node.js auto deploy demo based on GitHub Webhook","archived":false,"fork":false,"pushed_at":"2017-10-23T05:49:47.000Z","size":604,"stargazers_count":30,"open_issues_count":1,"forks_count":3,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-04-04T14:11:26.151Z","etag":null,"topics":["nginx","nodejs","shell","webhook"],"latest_commit_sha":null,"homepage":"","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/HuangXiZhou.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null}},"created_at":"2017-10-16T19:43:54.000Z","updated_at":"2025-02-28T15:24:13.000Z","dependencies_parsed_at":null,"dependency_job_id":"753283d6-12de-4fd7-ae98-6074c0d46145","html_url":"https://github.com/HuangXiZhou/auto-build","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/HuangXiZhou%2Fauto-build","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/HuangXiZhou%2Fauto-build/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/HuangXiZhou%2Fauto-build/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/HuangXiZhou%2Fauto-build/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/HuangXiZhou","download_url":"https://codeload.github.com/HuangXiZhou/auto-build/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":251187158,"owners_count":21549596,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["nginx","nodejs","shell","webhook"],"created_at":"2024-08-02T09:01:12.571Z","updated_at":"2025-04-27T18:31:21.638Z","avatar_url":"https://github.com/HuangXiZhou.png","language":"JavaScript","funding_links":[],"categories":["JavaScript"],"sub_categories":[],"readme":"# auto-build\nNode自动化部署\n\n# Node 自动化部署\n当我们在更新迭代 Node 项目的时候，我们需要做以下几步：\n\n1. `git push` 将代码提交至代码仓库\n\n2. 在服务器中执行 `git pull` 拉取最新代码\n\n3. `pm2 start` 运行你的代码\n\n这样做固然没错，但是一旦项目更新迭代过快，就需要不断的重复着上面的步骤，在各种 bash 面板中来回切换，很是麻烦。\n\n这时候，Webhooks 闪亮登场！\n\n对于 Webhooks， Github 给出的解释是：\n\u003eWebhooks allow you to build or set up integrations which subscribe to certain events on GitHub.com.\n\n简单来说，利用 Webhooks，我们就可以实现网站的自动部署，现在就来看看具体该怎么做\n\n## **配置脚本**\n这段脚本内容是我们需要服务器自动执行的\n\n```bash\n# autoBuild.sh\n\n#! /bin/bash\ngit reset --hard origin/master\ngit clean -f\ngit pull\nnpm start\n```\n注：这段脚本将会自动在服务器中执行\n\n## **编写 js 文件执行脚本**\n由于我使用的是 Github 作为代码仓库，所以在这里，我们使用 [github-Webhooks-handler](https://github.com/rvagg/github-Webhooks-handler) 这个库来实现我们的脚本自动执行工作\n\n按照文档，我们按照以下方式来编写 js 文件：\n\n```javascript\n// autoBuild.js\nvar http = require('http')\nvar spawn = require('child_process').spawn\nvar createHandler = require('github-Webhooks-handler')\nvar handler = createHandler({ path: '/pushCode', secret: '' }) // 在代码仓库的 Webhooks 选项处配置\nhttp.createServer(function (req, res) {\n  handler(req, res, function (err) {\n    res.statusCode = 404;\n    res.end('no such location')\n  })\n}).listen(7777)\n\nhandler.on('error', function (err) {\n  console.error('Error:', err.message)\n})\n\n// 监听 push 事件\nhandler.on('push', function (event) {\n  console.log('Received a push event for %s to %s',\n    event.payload.repository.name,\n    event.payload.ref)\n  rumCommand('sh', ['./autoBuild.sh'], function( txt ) { // 执行 autoBuild.sh 脚本文件\n    console.log(txt)\n  })\n})\n\nfunction rumCommand( cmd, args, callback ) {\n    var child = spawn( cmd, args )\n    var response = ''\n    child.stdout.on('data', function( buffer ){ response += buffer.toString(); })\n    child.stdout.on('end', function(){ callback( response ) })\n}\n```\n在 app.js 中，我们将端口设置为 3001，在这里代码就不放出来了，可以在文末的 Github 链接里找到本教程的全部示例代码\n\n## **Nginx 配置**\n由于我们的示例代码是跑在 3001 端口的，执行自动化部署的 js 文件则跑在 7777 端口，所以我们需要配置一下 Nginx 来启用这两个端口：\n\n```bash\n# 启用 7777 端口\nserver {\n    listen 7777;\n    listen [::]:7777\n    server_name huangxizhou.com; #在这里填上你自己的服务器 ip 地址或者域名\n    \n    root /var/www/html/auto-build;\n}\n\n# 启用 3001 端口\nserver {\n    listen 3001;\n    listen [::]:3001\n    server_name huangxizhou.com; #在这里填上你自己的服务器 ip 地址或者域名\n    \n    root /var/www/html/auto-build;\n}\n```\n这样一来，Nginx 就配置完毕了，接下来就是代码仓库的 Webhooks 配置\n\n## **Webhooks 配置**\n首先，我们进入你想实现自动化部署的仓库，点击 settings -\u003e Webhooks 来配置\n\n![Webhooks](http://ojiq40lzd.bkt.clouddn.com/%E5%B1%8F%E5%B9%95%E5%BF%AB%E7%85%A7%202017-10-16%20%E4%B8%8B%E5%8D%884.02.33.png)\n\n在右侧，就是配置你的接口地址以及 Secret，对应之前的 js 文件里面的 Secret，选择 Content type 为 `application/json`\n\n## **初始化项目**\n第一次部署项目，还是需要我们自己手动操作的。\n首先提交代码至代码仓库（这里是Github），然后进入服务器执行 `git pull`\n\n这样，我们就成功部署了我们 Node 实现自动部署的代码了\n\n让我们修改代码来试试效果怎么样\n`git push` 之后转到服务器内一看，完美，成功运行\n![](http://ojiq40lzd.bkt.clouddn.com/WechatIMG36.jpeg)\n\n再看看 Github\n\n![](http://ojiq40lzd.bkt.clouddn.com/%E5%B1%8F%E5%B9%95%E5%BF%AB%E7%85%A7%202017-10-16%20%E4%B8%8B%E5%8D%884.22.32.png)\n\n已经自动触发了接口，Node 自动化部署成功\n\n## **最后**\n此技术不仅仅局限于 Node\n\n局限性也是有的，只能单项目自动化部署，且必须依赖代码仓库\n\n最后的最后...  各位大佬有要2019年毕业的前端开发实习生的嘛，[我的简历](https://huangxizhou.com/resume)请大佬收下 T T\n\n本项目的源码地址：[https://github.com/HuangXiZhou/auto-build](https://github.com/HuangXiZhou/auto-build)\n\n感谢阅读 ; )\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FHuangXiZhou%2Fauto-build","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FHuangXiZhou%2Fauto-build","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FHuangXiZhou%2Fauto-build/lists"}