精华内容
下载资源
问答
  • Git WebHook一个使用 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.下载本项目代码:

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

    2.安装 Python 依赖

    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.初始化数据库结构

    python scripts.py build_db

    5.运行应用

    python run_webhook.py

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

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

    三、效果预览

    首页

    wKiom1gSoPrwXq5fAACyekRkPwg372.jpg-wh_651x-s_94996357.jpg

    WebHook列表

    wKiom1gSoRmSGbcDAADd90hlbck793.jpg

    服务器列表

    wKiom1gSoTviV-wzAAC9FGAqnyc081.jpg

    WebHook 历史记录

    wKiom1gSoViClmDuAAE6xTrnpgk147.jpg

    四、部署

    代码使用 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 使用文档 & 帮助文档;

    【编辑推荐】

    【责任编辑:武晓燕 TEL:(010)68476606】

    点赞 0

    展开全文
  • Github 自动项目更新工具 Usage (单一用作Github自动更新工具) 则运行 npm install webhook-server --save-dev screen cd node_modules/webhook-server npm start 然后关掉ssh远程命令行。 如果是想在Linux上长期挂...
  • 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

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

    展开全文
  • 浏览器打开服务器,复制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自动化脚本 实现代码同步
  • 主要介绍了GO 使用Webhook 实现github 自动化部署的方法,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
  • 一个使用 Python Flask 开发的用于迅速搭建并使用 WebHook 进行自动化部署和运维,支持:Github / GitLab / GitOsc。
  • ,,:/home/www:/bin/bash 3:在项目目录使用git pull 输入 yes,接着在使用webhook测试成功 下面贴上简单的使用案例,验证签名密码自行拓展, $cmd = 'cd /www/wwwroot/xxx && git pull origin master 2>&1';...
  • 希望这个过程能完成自动化,只要有人往release上推代码,就自动跑部署release分支并测试 解决办法及步骤: 1.在jenkins里需要自动触发的job里的“源码管理”部分添加设置,如下图。填好git仓库url和需要检测的分支...
  • 1、先在Jenkins安装插件Gitlab Hook Plugin和Build Authorization Token Root Plugin;2.插件安装完成后在任务里添加token3、在gitlab上添加钩子4、点击测试钩子或push代码再看Jenkins已经在构建了就说明成功了(也...
  • 这个教程的编写主要是目前关于webhook的node版本的视频教程和文字教程都没有,而学会这个技能还是能大大提高效率的。做法是我自己瞎搞的做法,可能不是很符合规范,但是自己的项目使用起来还...
  • git 可以使用webhook实现自动部署webhook是仓库平台的一个钩子事件,通过hook 钩子监听代码,回调通知(通知地址就是你在各个git仓库平台中填写的webhook地址,一般在你的某个项目仓库如myproject.git里面的设置中)...
  • 前言 2018年第一篇文章,没啥技术含量,权当笔记 ...今天就说说如何通过webhook的形式来让服务器自动拉取我们push的代码 原理 现在的Git服务器一般都会有个webhook服务 什么意思呢? 就是我们在执行...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 4,218
精华内容 1,687
关键字:

webhook自动化部署