精华内容
下载资源
问答
  • secret在github上设置的,path为访问路径:如在github上设置Payload Url :xxxx/webhook 监控 首先下载cnpm i github-webhook-handler包 var http = require('http') var createHandler = require('github-webhook...

    服务端nodejs监控

    secret在github上设置的,path为访问路径:如在github上设置Payload Url :xxxx/webhook

    监控

    首先下载cnpm i github-webhook-handler

    var http = require('http')
    var createHandler = require('github-webhook-handler')
    var handler = createHandler({ path: '/webhook', secret: '123456' })
    
    function RunCmd (cmd, args, cb) {
      var spawn = require('child_process').spawn;
      var child = spawn(cmd, args);
      var result = '';
      child.stdout.on('data', function (data) {
        result += data.toString();
      });
      child.stdout.on('end', function () {
        cb(result)
      });
    }
    
    http.createServer(function (req, res) {
      handler(req, res, function (err) {
        res.statusCode = 404;
        res.end('no such location');
      })
    }).listen(8098)
    
    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);
    //监听来自deploy分支,然后部署
      if (event.payload.ref.includes('deploy')) {
        var shpath = './deploy.sh';//下方代码
        RunCmd('sh', [shpath], function (result) {
          console.log(result);
        })
      }
    })
    
    handler.on('issues', function (event) {
      console.log('Received an issue event for %s action=%s: #%d %s',
        event.payload.repository.name,
        event.payload.action,
        event.payload.issue.number,
        event.payload.issue.title);
    })
    

    拉取代码deploy.sh

    拉取之前,在github=>settings=>Deploy key设置好秘钥

    提示:最好使用ssh拉取代码,否则会出现其他问题

    #! /bin/bash
    echo '开始执行'
    cd Airport-Management-System
    # git init
    # git remote add origin 仓库地址
    git fetch
    echo '切换分支'
    git checkout deploy
    ## 拉取最新代码
    echo '开始拉去最新代码'
    git pull origin deploy
    cp -rf /usr/local/auto-build/Airport-Management-System/dist/* /usr/local/nginx/airport
    echo '拷贝完成'
    
    
    展开全文
  • 一个使用 Python Flask + SQLAchemy + Celery + Redis + React 开发的用于迅速搭建并使用 WebHook 进行自动化部署和运维系统,支持:Github / GitLab / GitOsc。 技术栈简单,部署容易; 代码简洁易懂,二次开发毫无...

    Git WebHook

    一个使用 Python Flask + SQLAchemy + Celery + Redis + React 开发的用于迅速搭建并使用 WebHook 进行自动化部署和运维系统,支持:Github / GitLab / GitOsc。

    • 技术栈简单,部署容易;
    • 代码简洁易懂,二次开发毫无压力;
    • 支持 Github / GitLab / GitOsc;
    • 使用 SSH 方式,支持多服务配置;

    Online DEMO Website: http://webhook.hust.cc/,使用 gunicorn + gevent + ngxin 部署。

    一、如何使用 ?

    1.下载本项目代码:

    
    
    1. git clone git@github.com:NetEaseGame/git-webhook.git 

    2.安装 Python 依赖

    
    
    1. pip install -r requirements.txt 

    3.配置 config.py 拷贝一份 config_example.py 到同目录 config.py, 然后对应修改配置内容。主要需要配置三点:

    • DATABASE_URI: 数据库地址,理论上可以使用任何关系数据库;推荐使用 sqlite 和 mysql (经过测试);
    • CELERY REDIS: Redis URI 配置,主要用于 Celery 后台任务;
    • GITHUB: GitHub 登陆配置,可以到 OAuth applications 自行申请,登陆 Callback 地址为: your_domain/github/callback.

    4.初始化数据库结构

    
    
    1. python scripts.py build_db 

    5.运行应用

    
    
    1. python run_webhook.py 

    运行之后,打开 http://127.0.0.1:18340 即可访问。使用 GitHub 账号登陆。

    添加WebHook 在工具中添加 Git 项目,获得 WebHook URL,并填写到 Github / GitLab / OscGit 的 WebHook 配置中。

    三、效果预览

    • 首页

    • WebHook列表

    • 服务器列表

    • WebHook 历史记录

    四、部署

    代码使用 Flask 框架开发,线上部署使用 gunicorn + gevent + nginx 已经是比较成熟的方案了,本应用当然也可以使用这种方式部署。

    主要的服务器依赖环境:

    • 数据库环境(自行选择,推荐 mysql 和 sqlite);
    • Redis,利用 Celery 做后台任务;

    五、贡献

    项目使用 SSH 私钥的方式,直接登陆 Linux 服务器,执行部署或者运维的 Shell 命令,安全可靠,当然因为涉及到私钥,所以为了安全起见,建议在内网搭建使用(这些是我们的使用情景)。

    后端开发使用:Python Flask + SQLAchemy + Celery + Redis,常规的技术栈;

    前端开发使用 React + Webpack,并没有使用其他消息通信框架。

    所以整体项目代码非常简单,大部分都能够修改和更新代码,并提交 Pull Request,目前系统 TODO 包括,我个人也将注意完善:

    • Celery 进程情况显示(当 Celery 进程没有执行的时候,在页面上提示,类似于 Sentry);
    • 系统状态和统计(任务队列实时情况,WebHook 执行的统计图表);
    • 发布为 pip 包,使得安装部署更加容易;
    • Document 使用文档 & 帮助文档;




    本文作者:佚名
    来源:51CTO

    展开全文
  • 之前断断续续在重构一个项目,然后发现功能一开始设计太多了,可能需要花大量时间来增加,但是核心功能基本完成,于是想着能不能半上线状态,然后通过更新提交git,让服务器部署自动更新。这之前接触过git hook是...
        

    前言

    之前断断续续在重构一个项目,然后发现功能一开始设计太多了,可能需要花大量时间来增加,但是核心功能基本完成,于是想着能不能半上线状态,然后通过更新提交git,让服务器部署自动更新。这之前接触过git hook是可以实现的,因此这里记录一篇文章边捣鼓边写。

    正文

    准备

    首先确定需要完成的内容,明确需求:

    
    1.监听指定 git 提交
    2.执行指定多个脚本
    

    而且因为我这边是需要分别对clientserver 目录分别执行部署命令。所以需要特别处理。

    首先去域名管理那边增加一条A记录指向新的项目名称.因为Webhooks是需要外网域名的,因此先提前加一条。new.xxx.com

    然后就是需要对服务器上Nginx做转发配置。

    我的nginx是很久之前配置的

    etc/nginx/conf/vhost里增加一个文件,里面写入如下内容:

    
    server
            {
                    listen 80;
                    server_name new.xxx.com;
                    index index.html index.htm index.php default.html default.htm default.php;
    
                    location / {
    
                            proxy_pass http://127.0.0.1:8801;
                    }
                    access_log off;
    
            }
    

    将本地的8801转发出去。

    然后重启一下Nginx nginx -s reload

    然后git clone 仓库

    因为项目用了mongodb数据库:
    需要创建一个对应的数据库并添加权限。

    
    1. 切换数据库到 abc
    2. 指定了数据库 abc ,拥有权限: userAdmin
     db.createUser(
       {
         user: "123",
         pwd: "123",
         roles: [ { role: "userAdmin", db: "abc" } ]
       }
     )
     3. 验证下上面创建的账号 123
    
     db.auth('123','123')
     => 1
    
    

    配置webhook

    这个其实是最简单的,只要在你的github对应的项目仓库右侧选择settings

    然后选择webhooks

    imgn

    选择add webhook

    然后按照如下配置即可:

    imgn

    这里需要记住你自己设置的secret 以及你定义的推送动作,我这里是pushCode

    开始写脚本

    写之前先来看下最终的目录结构:

    
    ├── README.md
    ├── clean.sh // 清理缓存,并且执行git命令
    ├── client
    │   ├── autoClient.sh // client端自动监听
    │   ├── build
    │   ├── config
    │   ├── package.json
    │   ├── public
    │   ├── scripts
    │   ├── src
    │   ├── tsconfig.json
    │   ├── tsconfig.test.json
    │   ├── tslint.json
    │   ├── www
    │   ├── yarn.lock
    ├── deploy
    │   └── index.js // 监听webhook事件然后依次执行 clean.sh autoClient.sh autoServer.sh
    ├── package.json
    ├── server
    │   ├── autoServer.sh // server端自动监听
    │   ├── dist
    │   ├── package.json
    │   ├── src
    │   ├── tsconfig.json
    │   ├── tslint.json
    │   └── yarn.lock
    

    因为项目原因,脚本还需要做一些定制。
    首先是client端,因为前端是用了typescript + React全家桶 所以打包起来特别慢,当在服务器build的时候,因为阿里云内存给的不够,所以会很卡。基于这个考虑,是打算本地bulid完之后,推送到git上,服务器去git pull

    而且前端还有个考虑是用什么跑前端代码。因为服务器没装类似服务,因此打算用node框架koa起一个HTTP服务来跑。

    代码如下:

    www目录中

    app.js
    
    const Koa = require('koa')
    const morgan = require('koa-morgan')
    const path = require('path');
    const static = require('koa-static')
    const fs = require('fs')
    const app = new Koa();
    // logger
    app.use(morgan(':remote-addr - :remote-user [:date[clf]] ":method :url HTTP/:http-version" :status :res[content-length] :response-time ms'));
    // static assets
    app.use(static(path.join(__dirname,'../build')));
    //异步读取文件的形式
    // app.use(async (ctx,next) =>{
    //     ctx.type = 'html';
    //     ctx.body = await fs.createReadStream(path.resolve(__dirname, '..', './build', 'index.html'));
    // })
    module.exports = app;
    
    
    index.js
    
    'use strict';
    const app = require('./app');
    const PORT = process.env.PORT || 8801;
    console.log('client start')
    app.listen(PORT, () => {
      console.log(`App listening on port ${PORT}!`);
    });
    
    

    这样通过命令node ./www/index.js能够监听同级build目录。

    当然这比较粗暴,还需要慢慢改进。

    我们需要在client目录下建立autoClient.sh

    
    #! /bin/bash
    cd ./
    echo 'client build'
    kill -9 $(lsof -i:8801 |awk '{print $2}' | tail -n 2) 
    node ./www/index.js
    

    用来自动执行监听动作。

    因为多次推送监听的前端端口一致,如果不处理会报错。需要先根据端口号8801结束进程然后重新开启服务。

    然后是server端,因为整个后端是用koa完成的,项目比较小,在服务端即时编译花费不了多少时间,因此直接执行yarn start( "start": "yarn run build && yarn run watch",)用来编译和监听。

    server目录里建立autoServer.sh

    
    #! /bin/bash
    cd ./
    echo 'server start'
    kill -9 $(lsof -i:8866 |awk '{print $2}' | tail -n 2) 
    yarn run start
    

    同样我们需要在执行监听之前结束上一个端口的进程。

    然后我们来看clean.sh 这个shell脚本是用来清理client目录下build文件夹。

    
    #! /bin/bash
    rm rf ./client/build
    git reset --hard origin/master
    git clean -f
    git pull
    

    可以看到 先清理了缓存然后再向服务器拉取代码.

    最后我们来看部署的脚本deploy/index.js

    
    var spawn = require('child_process').spawn
    var http = require('http')
    var spawn = require('child_process').spawn
    var createHandler = require('github-webhook-handler')
    var handler = createHandler({ path: '/pushCode', secret: 'xxx' }) // 根据git上webhook的配置填写
    http.createServer(function (req, res) {
      handler(req, res, function (err) {
        res.statusCode = 404;
        res.end('no such location')
      })
    }).listen(7777)
    
    handler.on('error', function (err) {
      console.error('Error:', err.message)
    })
    
    // 监听 push 事件
    handler.on('push', function (event) {
      console.log('Received a push event for %s to %s',
        event.payload.repository.name,
        event.payload.ref)
        init() // 每次拉取都重新监听
    }
    )
    function rumCommand( cmd, args, cwd, callback ) {
      var child = spawn( cmd, args, {cwd: cwd} )
      var response = ''
      child.stdout.on('data', function( buffer ){ response += buffer.toString(); })
      child.stdout.on('end', function(){ callback( response ) })
    }
    
    function init() {
      rumCommand('sh', ['../clean.sh'], './' ,function( result ) { // 清理缓存
        console.log(result)
      })
    
      rumCommand('sh', ['../server/autoServer.sh'], '../server' ,function( result ) { // cLient端更新
        console.log(result)
      })
      
      rumCommand('sh', ['../client/autoClient.sh'], '../client' ,function( result ) { // server端更新
        console.log(result)
      })
    
    }
    
    init() // 脚本运行第一次默认指向一次
    

    这里需要声明的是因为多目录下执行脚本需要对应的环境。因此才把脚本都分开放。

    部署

    部署我们只需要对pm2 start deploy/index.js

    然后就可以在本地开发完之后推送,服务器就能自动拉取代码并且部署。

    展开全文
  • 一、背景我个人是在线这边的测试开发,主要工作是开发一些工具,辅助测试和开发,规范流程等等,这些内网的工具,一般不存在什么并发,性能瓶颈,上线部署其实非常简单,在需要更新上线的时候,提交最新代码到 ...

    一、背景

    我个人是在线这边的测试开发,主要工作是开发一些工具,辅助测试和开发,规范流程等等,这些内网的工具,一般不存在什么并发,性能瓶颈,上线部署其实非常简单,在需要更新上线的时候,提交最新代码到 release 分支,然后 ssh 登陆服务器,去执行一个 shell 脚本,拉取最新代码,restart 一下即可,其实并不是很复杂,然后还是存在一些问题:

    一些没有 ssh 权限的同学更新代码之后,都会找你来帮忙重启一下;

    周末节假日,加班的同学跟你打电话:服务挂了需要重启怎么办?

    每次 push 都要去 restart 一下,其实挺烦躁的;

    一次 git push 的代码,需要更新到很多台服务器,你就更加烦躁了;

    所以我做了这样一个小工具,利用 git 的 webhook 来简化部署工作。

    二、git-webhook

    Git WebHook 是一个使用 Python Flask + SQLAchemy + Celery + Redis + React 开发的用于迅速搭建并使用 WebHook 进行自动化部署和运维系统,支持:Github / GitLab / Gogs / GitOsc。

    技术栈简单,部署容易;

    代码简洁易懂,二次开发毫无压力;

    支持 Github / GitLab / Gogs / GitOsc;

    使用 SSH 方式,支持多服务配置;

    三、如何安装?

    1. 安装应用

    pip install git-webhook

    备注:项目中某一个依赖库需要安装 python-dev。

    2. 创建配置

    gitwebhook config

    命令执行之后,会在对应用户目录(~)生成新的配置文件,然后对应修改配置文件内容。主要需要配置三点:

    DATABASE_URI: 数据库地址,理论上可以使用任何关系数据库;推荐使用 sqlite 和 mysql (经过测试);

    CELERY REDIS: Redis URI 配置,主要用于 Celery 后台任务;

    GITHUB: GitHub 登陆配置,可以到 OAuth applications 自行申请,登陆 Callback 地址为: your_domain/github/callback.

    3. 初始化数据库结构

    gitwebhook createdb

    4. 运行应用

    # 1. run python webserver

    gitwebhook runserver

    # 2. run celery async task

    gitwebhook celery

    运行之后,打开 http://127.0.0.1:18340 (一巴扇死你)即可访问。使用 GitHub 账号登陆。

    在工具中添加 WebHook 项目,获得 WebHook URL,并填写到 Github / GitLab / OscGit 的 WebHook 配置中。

    四、截图

    MIT @hustcc

    展开全文
  • 浏览器打开服务器,复制WEBHOOK url 填入到github 的webhook中 反复调试配置文件指定的sh脚本文件 以下脚本仅供参考 #!/bin/bash #重要 否则在webhookit执行会出现npm command not found的错误导致...
  • 扩展: 在部署github ,在nginx 的www 用户下,运行git pull 无效,应该在root 用户下授予权限: chown -R www 你的文件目录 github 私有仓库linux下免输入账号密码 cd ~/ touch .git-credentials vim .git-...
  • 本文将介绍git+php部署webhook自动化脚本 实现代码同步
  • 初始git-webhook数据库gitwebhook createdb OK: database is initialed. 7.启动gitwebhook runserver & wsgi starting up on http://172.31.23.92:18340 gitwebhook celery & 这个是用于异步执行任务...
  • 一个使用 Python Flask 开发的用于迅速搭建并使用 WebHook 进行自动化部署和运维,支持:Github / GitLab / GitOsc。
  • function doLog($code, $content){// 记录日志} doLog就是上报日志函数,这个自行看吧,我是习惯所有的都搞个日志 第四步: 在github配置webhook 详情参看官方文档:https://developer.github.com/webhooks/ 可以在...
  • 希望这个过程能完成自动化,只要有人往release上推代码,就自动跑部署release分支并测试 解决办法及步骤: 1.在jenkins里需要自动触发的job里的“源码管理”部分添加设置,如下图。填好git仓库url和需要检测的...
  • git 可以使用webhook实现自动部署webhook是仓库平台的一个钩子事件,通过hook 钩子监听代码,回调通知(通知地址就是你在各个git仓库平台中填写的webhook地址,一般在你的某个项目仓库如myproject.git里面的设置中...
  • ,,:/home/www:/bin/bash 3:在项目目录使用git pull 输入 yes,接着在使用webhook测试成功 下面贴上简单的使用案例,验证签名密码自行拓展, $cmd = 'cd /www/wwwroot/xxx && git pull origin master 2>&1';...
  • 需求说明在项目开发过程中,我们有时会频繁的更新代码, 流程大概为:(1) 本地git push提交代码至git托管平台(2) 登陆到部署有网站源码的线上服务器(3) cd到项目根目录, 执行git pull指令拉取最新代码整个流程纯手动...
  • 这个教程的编写主要是目前关于webhook的node版本的视频教程和文字教程都没有,而学会这个技能还是能大大提高效率的。做法是我自己瞎搞的做法,可能不是很符合规范,但是自己的项目使用起来还...
  • 1、先在Jenkins安装插件Gitlab Hook Plugin和Build Authorization Token Root Plugin;2.插件安装完成后在任务里添加token3、在gitlab上添加钩子4、点击测试钩子或push代码再看Jenkins已经在构建了就说明成功了(也...
  • 前言 2018年第一篇文章,没啥技术含量,权当笔记 ...今天就说说如何通过webhook的形式来让服务器自动拉取我们push的代码 原理 现在的Git服务器一般都会有个webhook服务 什么意思呢? 就是我们在执行...
  • 需求说明在项目开发过程中,我们有时会频繁的更新代码, 流程大概为:(1) 本地git push提交代码至git托管平台(2) 登陆到部署有网站源码的线上服务器(3) cd到项目根目录, 执行git pull 指令拉取最新代码整个流程纯手动...
  • 使用WebHook自动部署项目今天在laravist.com看到了这个Webhook 自动部署Git项目这个教学视频,以前自己也想做这样做一个利用Git WebHook的自动化部署,但总是不成功,今天看到视频就想着再次尝试一下,虽然有视频参考但...
  • 目录 软件准备 安装Docker 添加容器加速 安装jenkins容器 准备jdk环境和maven环境 下载并安装容器 配置插件下载加速 访问jenkins服务 配置自动化构建 安装相关插件 设置gitlab提交触发远程jenkins编译 软件准备 备用...
  • file_put_contents('./webhook.log', $output);// 输出内容保存到日志,需要注意日志文件要有足够的权限 print $output; ?> 4、配置码云webhook,url为 http://yourdomain/webhook.php 5、碰到问题了:git ...

空空如也

空空如也

1 2 3 4 5 ... 11
收藏数 215
精华内容 86
关键字:

webhook自动化部署