`
JerryWang_SAP
  • 浏览: 1003460 次
  • 性别: Icon_minigender_1
  • 来自: 成都
文章分类
社区版块
存档分类
最新评论

一个简单的例子学会github repository的webhook

阅读更多

github的webhook是个有用的功能,允许开发人员指定一个服务器的url。当开发者对github仓库施加操作,比如提交代码,创建issue时,github网站会自动向该url指定的服务器推送事件。借助webhook,我们可以实现很多自动化流程。比如部署一个应用在AWS上,本地提交代码后,github网站自动触发webhook,调用AWS上应用的逻辑,在AWS上将本地提交的最新代码用git pull抓取到AWS上并重新部署。

下面我们通过一个具体的例子来学习github webhook的用法。

新建一个github仓库,点击Settings链接:

 

在Payload url里指定一个应用的url,该url对应的应用监听github网站推送的事件。

Content Type指定成application/json便于我们在nodejs应用里解析payload。

 

 

创建后点Add webhook保存,github会发送一个json paload到这个url指定的应用上。

 

 

在Recent Deliveries里查看负载明细:

 

 

负载明细如下:

 
 

我们现在来做个实验,把webhook指定的url对应的应用设置一个断点,然后在github仓库里新建一个issue:

 

断点立即触发了。

 

从调试器里能观察到这个create issue事件的所有负载。

 

我部署在AWS上监听github webhook框架推送github repository发生变化的事件的应用源代码,可以从我的github上获取:
https://github.com/i042416/webhookstudy

代码很短,我的同事Haytham写的:


var http = require('http')
var createHandler = require('github-webhook-handler')
var handler = createHandler({ path: '/push', secret: 'dis-koi' })
 
function run_cmd(cmd, args, callback) {
    var spawn = require('child_process').spawn;
    var child = spawn(cmd, args);
    var resp = "";

    child.stdout.on('data', function(buffer) { resp += buffer.toString(); });
    child.stdout.on('end', function() { callback (resp) });
}

http.createServer(function (req, res) {
    handler(req, res, function (err) {
        res.statusCode = 404
        res.end('no such location')
    })
}).listen(8083)
 
handler.on('error', function (err) {
    console.error('Error:', err.message);
})
 
handler.on('push', function (event) {
    switch(event.payload.repository.name)
    {
        case 'githubHook':
            //this push event is from my persional github account, as SAP github.tool's github hook do not work, so I use this one to test push event
            console.log("reveive a push event from githubHook");
            run_cmd('sh', ['./webshop.sh'], function(text){ console.log(text) });
            break;
        case 'frontend-web':
            //push event from frontend-web
            console.log("reveive a push event from frontend-web");
            run_cmd('sh', ['./webshop.sh'], function(text){ console.log(text) });
            break;
        case 'backend-ms':
            //push event from backenf-ms
            console.log("reveive a push event from backend-ms");
            run_cmd('sh', ['./backend_ms.sh'], function(text){ console.log(text) });
            break;
    }
})
 
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);
})

要获取更多Jerry的原创文章,请关注公众号"汪子熙":

 

 
0
0
分享到:
评论

相关推荐

    github-webhook:Github Webhook 拆分主仓库

    在软件开发过程中,特别是在使用Git进行版本控制时,GitHub Webhook是一个非常关键的工具。它允许开发者配置仓库,以便在特定事件发生时(如提交、合并请求等)自动触发某些操作。在大型项目中,可能需要将一个庞大...

    repository-dispatch:创建存储库分配事件的GitHub动作

    github.repository (当前存储库) event-type (必需)自定义的Webhook事件名称。 client-payload JSON有效负载,其中包含有关您的操作或工作流可能使用的webhook事件的额外信息。 {} token 此操作将创建...

    github漫游指南,详细的介绍github的使用

    - **注册与设置**:首先,你需要创建一个GitHub账号,设置个人资料,并熟悉GitHub的工作界面,包括仓库(Repository)、关注(Watch)、星标(Star)和 fork 等基本元素。 - **Git与GitHub的关系**:Git是一款...

    simpledeploy:用于简单部署的GitHub webhook:ship:

    一个简单的flask应用程序,它在github上注册了一个Webhook,因此每次推送内容时我都可以更新我的网站。 我目前在运行我的程序。 样本config.json文件: [ { " repository " : " rashiq.me " , " steps " : [ ...

    github中一些操作指南

    在IT行业中,GitHub是一个至关重要的平台,它是一个用于版本控制和协作的分布式版本控制系统,尤其在软件开发领域中被广泛使用。本指南将详细介绍GitHub的一些关键操作,帮助你更好地理解和运用这个工具。 一、创建...

    GitHub 使用手册 - 基础篇

    1. **创建仓库 (Repository)**: 在 GitHub 上新建一个仓库,设定仓库名称、描述,选择是否公开,以及是否初始化 README 文件。 2. **克隆仓库**: 使用 `git clone` 命令将仓库克隆到本地,这样可以在本地编辑代码。 ...

    :rat:一个github的机器人工具包,支持OAuth,事件,API,自定义命令和检查运行。- Clivern /仓鼠

    First Create a dist config file.$ cp config.json config.dist.jsonThen add your app_mode, app_port, app_log_level, github_token, github_webhook_secret, repository_author and repository_name{ "app_mode...

    对接github的markdown项目钩子解析markdown为博客

    总的来说,这个项目结合了Markdown语法、JavaScript编程、GitHub API的使用以及webhook的概念,旨在创建一个便捷的Markdown博客发布系统。开发者可以通过学习和理解这个项目,提升在Web开发、Markdown处理和GitHub...

    Laravel开发-github

    而 GitHub 是一个面向开源及私有软件项目的托管平台,通过版本控制和协作工具,帮助开发者管理和分享代码。 **1. Git 和 Laravel 的基础** 在开始集成前,了解 Git 的基本操作至关重要。Git 是一个分布式版本控制...

    generic-webhook-trigger-plugin:可以接收任何HTTP请求,从JSON或XML中提取任何值,并使用这些值作为变量来触发作业。 与GitHub,GitLab,Bitbucket,Jira等一起使用

    这是一个Jenkins插件,可以: 接收任何HTTP请求, JENKINS_URL/generic-webhook-trigger/invoke 提取值 从带有或POST内容 从query参数 从headers 使用这些值作为变量触发构建 仅当提供的正则表达式与提取的变量...

    s4-security-scan:每次触发Webhook事件时使用s4运行扫描的操作

    生成了一个链接以查看详细结果,如下所示: 输出还包括安全门检查的结果以及是否创建了拉取请求(由S4中的用户配置) 从有效负载和可配置的秘密令牌派生的每个请求都传递一个哈希签名。 哈希签名与常规Github ...

    discord-webhook:Java Discord Webhook

    不和谐网钩Maven< dependency> < groupId>com.github.DarthPresident</ groupId> < artifactId>discord-webhook</ artifactId> < version>LATEST</ version></ dependency>< repositories> < repository>...

    travis-webhook:Travis CI Webhook验证请求并运行命令

    Travis CI是一个持续集成服务,它与GitHub紧密集成,用于自动化构建、测试和部署软件项目。Webhook是Travis CI中的一个重要概念,它允许你设置一个URL,当Travis CI的构建状态发生变化时,Travis CI会向这个URL发送...

    OpsBot:无服务器机器人可以管理您的GitHub存储库的问题,并通过用户发送的评论内容来拉取请求

    OpsBot :robot: 基于GitHub sdk和机器人。 它的行为就像。 机器人会管理您的GitHub存储库的问题,并通过用户发送的评论内容拉动请求。 这个项目才刚刚开始,现在是一个玩具工具。... 添加一个新的WebHook

    vscode-github-actions:简单,非正式的扩展,以查看GitHub Actions工作流并在VS Code中运行

    自动完成动作参数自动完成和验证你在引用的每一个动作uses :自动完成的流道标签智能自动完成和表达式评估自动完成并验证github事件表达式该扩展了解所有Webhook负载,并建议并自动完成事件负载字段查看当前打开的...

    github-collab-pres:关于 Github 协作的介绍

    你可以创建一个新的仓库,或者将本地项目上传到 GitHub。仓库设置中可以配置访问权限,如公开或私有,还可以添加协作者,让他们有权对项目进行编辑。此外,仓库还支持 Issues 功能,用于记录和追踪项目中的问题、...

    action-slack::rocket:发送Slack通知的GitHub Action

    该GitHub操作是另一个存储库中的操作列表的一部分。 随时检查一下: : 。 用法 - name : Slack notification env : SLACK_WEBHOOK : ${{ secrets.SLACK_WEBHOOK }} SLACK_USERNAME : ThisIsMyUsername # ...

    githubr:从R到GitHub的接口

    `githubr` 是一个R语言的包,它为用户提供了与GitHub API交互的便利工具。这个包的主要目的是让R程序员能够轻松地访问和利用GitHub的各种功能,包括创建、读取、更新和删除(CRUD)仓库、问题、拉取请求、标签、分支...

    GitHubApi567

    6. **PyGithub库**:如果项目使用了PyGithub,这是Python的一个GitHub API的全面封装库,提供了一种面向对象的方式来操作GitHub资源,比如Repository、Issue、User等。 7. **版本控制**:GitHub与Git紧密相关,了解...

    k8s-jenkins-django-jasper-shop:使用Kubernetes和Jenkins部署我的碧玉店

    [K8s + Jenkins] Jasper Shop这是一个将 Dockerize以及用k8s + Jenkins来部署的专案详细过程可以在我的部落格看我是怎么一步一步做出来的:影片Demo影片展示了无需停机即可透过Git Push来完成自动化部署,一开始可以...

Global site tag (gtag.js) - Google Analytics