精华内容
下载资源
问答
  • 接收github钩子,通知代理,接收任务结果,通知github(非官方) 目的 创建一个异步CI不可知论机制,以便为github提取请求运行自定义测试阶段门。 允许团队领导者在不离开github的情况下配置任务序列 允许开发人员...
  • Octoks 是 Github Hooks 接收器。 灵感来自GitHub::Hooks::Receiver 安装 将此行添加到应用程序的 Gemfile 中: gem 'octoks' 然后执行: $ bundle 或者自己安装: $ gem install octoks 用法 # this file ...
  • Sinatra Framework 的 Github hook 代理服务器。 您可以在 Ruby DSL 中编写请求目的地 安装 将此行添加到应用程序的 Gemfile 中: gem 'octogate' 然后执行: $ bundle 或者自己安装: $ gem install ...
  • 八爪钩 使用C#可以轻松实现GitHub挂钩。 包裹 统计资料 八爪钩 OctoHook.AutoClose OctoHook.AutoLabel OctoHook.AutoAssign OctoHook。自动链接 OctoHook.AutoTask
  • GitHub钩子同步项目代码到网站目录

    千次阅读 2018-03-22 12:54:24
    对于个人项目而言,有的人项目托管在github... github有个webhook,可以在push之后触发,这样我们就可以利用钩子出发服务器脚本,执行pull命令拉取最新代码了。 但配置这个钩子,有几点坑需要提一下 1.我们服务器...

       对于个人项目而言,有的人项目托管在github上,线上访问地址放在自有服务器上。

        平时自己开发的话,要先push到github,在到自己服务器上pull下来(服务器上装了git),特别麻烦。

        github有个webhook,可以在push之后触发,这样我们就可以利用钩子出发服务器脚本,执行pull命令拉取最新代码了。

    blob.png

        

    但配置这个钩子,有几点坑需要提一下

        1.我们服务器上的web文件,大多是用户和用户组都是www(我用的一键lnmp脚本配置的lnmp环境),

        所以平时运行那些PHP文件,也都是www用户运行的。那么我们就必须以www用户来吧代码仓库clone下来

        然后以www的身份去生成ssh密钥 

    ssh-keygen -t rsa -C "your_email@youremail.com"

            生成之后记得把公钥放在github里的项目配置里。

        2.github的钩子,是在操作成功后header里带着密钥以POST方式请求一个你的URL,所以密钥算法需要你在代码里自己写

    blob.png

        这里需要注意下,github里有两种请求方式可供选择,一种是表单式post,我们可以正常用$_POST接收,还有一种是json式post,PHP只能用

    php://input去接收了,每次调取url都是带着密钥的,你需要判断密钥对,在pull,否则任何人都可以pull了,下面是github密钥的算法PHP版本

    $github_signa = $_SERVER['HTTP_X_HUB_SIGNATURE'];
    list($hash_type, $hash_value) = explode('=', $github_signa, 2);
    $payload = file_get_contents("php://input");$secret = '你在github配置的secret';$hash = hash_hmac($hash_type,$payload,$secret);if($hash && $hash === $hash_value)
    {
    	echo '认证成功,开始更新';
        echo exec("./github_pull.sh");
    
    	echo date("Y-m-d H:i:s");
    }

        3.由于执行shell命令涉及到 php的exec方法,默认是不开启这个方法的,需要你去php.ini开启它

    下图是钩子访问url的时候的返回数据

    blob.png


    最后 小贴士:为什么我的提交记录不被github记录呢,为什么无法点亮小绿点?

    git config --global user.name "your name" //配置用户名和github名称一致 否则不计入提交次数
    git config --global user.email "your email" //配置email
    展开全文
  • 当然,今天的主题并不是博客搭建,而是如何利用Github钩子,将博客代码部署到服务器上。 毕竟Github钩子已经历史悠久了,网上有很多开源项目可以拿来用,所以我并没有造轮子,而是去找了5K star的...

    最近机缘巧合的购置了域名和服务器,不用实在是浪费,再加上一直没有属于自己的个人网站,所以打算用hexo在服务器上玩一下,这样也就不用再纠结用Github pages还是Gitee pages了。当然,今天的主题并不是博客搭建,而是如何利用Github的钩子,将博客代码部署到服务器上。

    毕竟Github的钩子已经历史悠久了,网上有很多开源项目可以拿来用,所以我并没有造轮子,而是去找了5K star的开源Go项目webhook,这个工具的作用是接收Github仓库的变动通知,然后调用你配置好的shell脚本,脚本可以写上代码拉取的命令或是编译的操作等,具体根据个人需求而定。简而言之,它只起着拉通Github与你服务器的作用。

    file

    webhook工具安装

    因为webhook是Go语言开发的,所以要先安装Go语言。

    yum install -y golang

    然后就可以用go命令安装webhook了。

    go get github.com/adnanh/webhook

    命令安装位置可以通过go env查看,GOPATH就是命令安装路径,比如我的命令就安装在/root/go/bin/webhook。

    go env
    ...
    GOOS="linux"
    GOPATH="/root/go"
    ...

    生成ssh key

    在编写脚本之前确保服务器有权限拉取github代码,如果已经做了配置可跳过本节去看部署脚本编写。ssh key是代码托管平台(github、gitee、coding、gitlab等)鉴别你是否有权拉取代码的身份标识,生成只需一行命令和一路回车就行了。

    ssh-keygen
    
    Generating public/private rsa key pair.
    Enter file in which to save the key (/root/.ssh/id_rsa): 
    Enter passphrase (empty for no passphrase): 
    Enter same passphrase again: 
    Your identification has been saved in /root/.ssh/id_rsa.
    Your public key has been saved in /root/.ssh/id_rsa.pub.
    The key fingerprint is:
    SHA256:M6sCf/J/hOu3zLxMkFUVmv3iWIa30CfbxiWqmWCt1YE root@iZwz96y36tk2ecnykzituxZ
    The key's randomart image is:
    +---[RSA 2048]----+
    |            ..o. |
    |           . o   |
    |          . o    |
    |       . o .     |
    |      E S.  .    |
    |  .  . ..Oo ..   |
    |   oo o ==Boo .  |
    |   .++.+o#== .   |
    |    .=*+=+@o     |
    +----[SHA256]-----+

    生成后可通过cat ~/.ssh/id_rsa.pub命令查看,最后将key加入github即可,加法不再赘述,请自行谷歌。

    cat ~/.ssh/id_rsa.pub
    
    ssh-rsa AAAAB3NzaC1yc2EAAAADAQHBAAABAQCv7LGVJUFdcLL+HZyRFTQIQCdre61Gch76lDVpmWSX9BGGRU3iQS7EU5qApFn1VSvt+yf4rMt2LEkuxGCm1wIyBKZ6LYDViZBeTAfx4BcM1mcpxOX6I/+r07mQ4llTz+poQB1Zp9Y60uk0tbGOVWlCoDBEvf9qeEnQ0qEczEkv7wcawV6pVhlXjFKZgq0EOQbCYoWMvPUl+dwDbTcl/h+7At1nlgfF7IuRHlKf18qvgnTRT2wpiuz4pWdoAi8LcY1JiR1z5OB0oCJ2euhyDND39G2NxZRS1FIVdgCEvioHtdoHOSoWBlcSj0fLFSnscBfRBrCd7yhOP7fFKfrowHMj root@iZwz96y36tk2ecnykzituxZ

    部署脚本编写

    该shell脚本的主要目的是从github拉取代码,脚本内容很简单,只做了目录的简要判断,代码目录存在则更新,不存在则克隆仓库,工作目录和仓库名称、地址请换成自己的。

    #!/bin/bash
    
    cd /home/www/website
    
    if [ ! -d "go-home" ]; then
      git clone https://github.com/pingyeaa/go-home.git
    fi
    
    cd go-home
    git pull

    webhook配置与启动

    编写配置文件hooks.json,格式如下。

    [
      {
        "id": "deploy-webhook",
        "execute-command": "deploy.sh",
        "command-working-directory": "/home"
      }
    ]
    • id:钩子的id,可自定义
    • execute-command:要执行的脚本名,就是刚才编写的部署脚本
    • command-working-directory:脚本所在目录

    完成后通过webhook命令启动,可以看到id为deploy-webhook的配置已经加载了,我们需要注意的是监听的端口和路径,等下要用到。

    /root/go/bin/webhook -hooks hooks.json -verbose
    
    [webhook] 2020/04/22 15:18:22 version 2.6.11 starting
    [webhook] 2020/04/22 15:18:22 setting up os signal watcher
    [webhook] 2020/04/22 15:18:22 attempting to load hooks from hooks.json
    [webhook] 2020/04/22 15:18:22 found 1 hook(s) in file
    [webhook] 2020/04/22 15:18:22   loaded: deploy-webhook
    [webhook] 2020/04/22 15:18:22 serving hooks on http://0.0.0.0:9000/hooks/{id}
    [webhook] 2020/04/22 15:18:22 os signal watcher ready
    http://0.0.0.0:9000/hooks/{id}

    Github Webhooks配置

    现在服务器已经启动了webhook程序监听9000端口,接下来仅需要告诉Github这个地址和端口就好了。

    打开仓库设置页,添加webhook。

    配置webhooks,Payload URL就是要通知的地址,把刚才打印出的端口和路径填上即可,其他默认。

    file

    现在可以提交代码测试了,如果推送失败Github中会有错误提示,同样的,成功不仅在Github中能看到,服务器的打印日志也有记录。

    file

    file


    我是平也,这有一个专注Gopher技术成长的开源项目「go home」


    感谢大家的观看,如果觉得文章对你有所帮助,欢迎关注公众号「平也」,聚焦Go语言与技术原理。 关注我

    展开全文
  • 钩子添加到您的github项目中。 安装 npm install -g travisify 用法 导航到您在github上为其设置了远程travisify的git项目,然后运行travisify 。 第一次运行travisify ,将提示您输入github帐户和travis api...
  • 添加网络钩子 这个怎么运作 当您将代码推送到您的主分支时,Github-CleanPR 会扫描当前的拉取请求以查看需要更新的内容。 如果 PR 不能自动合并,Github-CLeanPR 会评论这个问题让你知道。 免责声明 这段代码与 ...
  • 网络钩子 Github Webhook 网络接收器 安装 配置您的存储库 克隆仓库 安装 配置你的 config.js 配置github webhook 发射 节点索引 常问问题 每个 repo 都可以通过这个 repo 自动拉取,只需要配置你的 config.js
  • lita-github-web-hooks lita-github-web-hooks将GitHub 与集成在一起。 它允许Lita在聊天中宣布各种GitHub活动。 安装 将lita-github-web-hooks添加到您的Lita实例的Gemfile中: gem "lita-github-web-hooks" 组态...
  • 钩子 使用 GitHub 的和进行演示的简单 Ruby 脚本。 您需要创建一个并将其存储在名为GH_AUTH_TOKEN的环境变量中才能正常工作
  • GitHub 的网络钩子(webhook)功能,可以很方便的实现自动化部署。本文记录了使用 Node.js 的开发部署过程,当项目的 master 分支被推时,将在服务器进行自动部署

    GitHub 的网络钩子(webhook)功能,可以很方便的实现自动化部署。本文记录了使用 Node.js 的开发部署过程,当项目的 master 分支被推时,将在服务器进行自动部署,完整代码见 GitHub

    添加网络钩子

    1. 在 GitHub 的相应项目首页,点击右上角菜单 Setting, 点击左侧菜单 Webhooks,点击右上角按钮 Add webhook

    2. 设置 Payload URL 为接收事件的地址,Content type 建议选择 applicaiton/jsonSecret 可选填任意字符串,Which events would you like to trigger this webhook? 设为 Just the push event.,勾选 Active,点击下方的 Add webhook 按钮

    开发处理请求

    接收请求

    使用 Node.js 建立一个 http 服务器,接收 POST 请求并处理其提交数据

    const { createServer } = require('http');
    const port = process.env.GITHUB_WEBHOOK_PORT || '3000';
    
    const server = createServer((req, res) => {
      if('POST' === req.method){
        let body = '';
        req.on('data', chunk => {
          body += chunk.toString();
        });
        req.on('end', () => {
        });
      }
    })
    
    server.listen(port, () => {
      console.log(`Listening on ${port}`);
    });
    

    如果需要更改默认端口 3000,可以先运行以下命令添加环境变量(NUMBER 为任意端口)

    export GITHUB_WEBHOOK_PORT=NUMBER

    解析 Body

    在 req 的 end 事件处理器中,把字符串 body 解析成对象

        req.on('end', () => {
          try{
            body = JSON.parse(decodeURIComponent(body).replace(/^payload=/, ''));
          }catch(e){
            console.log(e)
          }
    

    如果 Content type 设置为 applicaiton/json,只需要 body = JSON.parse(body) 即可,以上代码兼容了 Content type 设置为 application/x-www-form-urlencoded 的情况

    拉取更新

    根据 body 的 push 负载,提取项目和分支信息,如果是 master 分支,则执行进入对应项目,拉取分支的命令

          if('object' === typeof body){
            if('refs/heads/master' === body.ref){
              const { exec } = require('child_process');
              const command = `cd ../${body.repository.name} && git pull origin master`;
              exec(command, (error, stdout, stderr) => {
              });
    

    注意这里的项目所在的目录,与此应用所在的目录,是在同一个父目录下的,如果不是可以相应调整命令的进入路径

    验证密钥

    以上步骤已经实现了自动拉取更新,不过存在安全性的问题,因为不仅仅 GitHub 可以发送这样的请求,所以最好设置 Secret 以进行安全验证

    const secret = process.env.GITHUB_WEBHOOK_SECRET || '';
    ...
        req.on('end', () => {
          if('' !== secret){
            const { createHmac } = require('crypto');
            let signature = createHmac('sha1', secret).update(body).digest('hex');
            if(req.headers['x-hub-signature'] !== `sha1=${signature}`){
              console.log('Signature Error');
              res.statusCode = 403;
              res.end();
              return;
            }
          }
    

    运行应用前,先运行以下命令增加密钥变量(STRING 为任意字符串)

    export GITHUB_WEBHOOK_SECRET=STRING

    • 设置了 Secret 后,GitHub 在发送请求时,会在请求头增加 x-hub-signature 为 sha1=SIGNATURE, 其中 SIGNATURE 为 body 的 密钥为 Secret,算法为 sha1 的 HMAC 16 进制值
    • 通过对 Secret 的检验,可以确保只有知道了 Secret,才能发送正确的带 x-hub-signature 头的请求,否则将拒绝请求
    • 以上代码兼容了不设置 Secret 的情况,即如果没有增加变量 GITHUB_WEBHOOK_SECRET,则按原有逻辑处理,不会进行检验

    本地钩子构建

    如果项目在拉取更新后需要构建,那么可以 command 变量后面加上构建命令,例如 && npm run build,但是不同项目的构建命令有可能是不一样的,而且有的项目的构建命令可能还比较复杂,这些情况下可以通过设置 git 的本地钩子进行处理

    cd /PATH/TO/PROJECT/.git/hooks
    nano post-merge

    #!/bin/sh
    SHELL_SCRIPT
    

    chmod +x post-merge

    • 其中 /PATH/TO/PROJECT/ 为项目的目录位置,SHELL_SCRIPT 可以为任意 Shell 脚本
    • 因为 git pull 是 git fetch 和 git merge 的组合,所以拉取更新会触发 post-merge 钩子
    • 默认新增的文件是没有执行权限的,所以需要通过 chmod 增加 x

    部署应用上线

    应用部署上线需要实现持久化和自动化,即项目应该一直在运行,如果服务器重启,项目应该自动启动

    变量自动创建

    /etc/profile.d/ 里的变量创建脚本会在服务器重启时自动运行,所以添加一个设置脚本进去

    nono /etc/profile.d/github-webhook.sh

    export GITHUB_WEBHOOK_PORT=NUMBER
    export GITHUB_WEBHOOK_SECRET=STRING
    

    运行以下命令可以使变量创建马上生效

    source /etc/profile

    pm2 运行应用

    pm2 可以确保 Node 应用的持续运行,并可通过配置实现监控和热更新等功能

    npm install pm2 -g
    pm2 start app.js --name github-webhook

    重启自动运行

    pm2 还内置支持配置自启动原有应用,通过以下命令实现

    pm2 startup
    pm2 save

    pm2 startup 会创建并开启开机自动运行的服务, pm2 save 会保存当前的 pm2 运行应用,作为重启后的恢复内容

    总结

    在基于 GitHub webhook 的自动化部署中,主要使用了以下技术:

    • Node.js 的 http,child_process 和 crypto 模块
    • Git 的 post-merge Shell 钩子
    • profile 的自动变量设置和 pm2 工具
    展开全文
  • 在Jenkins管道中添加一个GitHub Web钩子

    千次阅读 2018-10-30 17:14:05
    你有没有尝试过在Jenkins中添加GitHub网络钩子?在这个博客中,我将演示在管道中添加web钩子的最简单方法。 首先,什么是网钩?WebHook的概念很简单。web钩子是一个HTTP回调,它是当通过一个简单的事件通知通过...

    你有没有尝试过在Jenkins中添加GitHub网络钩子?在这个博客中,我将演示在管道中添加web钩子的最简单方法。

    首先,什么是网钩?WebHook的概念很简单。web钩子是一个HTTP回调,它是当通过一个简单的事件通知通过HTTPPOST发生的事情时发生的HTTPPOST。

    当开发人员向主分支提交内容时,Jenkins中的GitHub WebHooks用于触发构建。

    让我们看看如何在GitHub中添加一个web钩子,然后在Jenkins中添加这个web钩子。

    1. 转到您的项目存储库。
    2. 转到右角的“设置”。
    3. 点击“webhooks”
    4. 单击“添加webhooks”。
    5. 将有效负载URL写入

    2

    这里有效载荷URL 是我们的Jenkins运行的URL Add GitHub-web钩子,它告诉GitHub它是一个web钩子。

    • 内容类型:我们想要什么样的数据。我选择了JSON数据。
    • 秘密:用来保护我们的网络钩子,我们可以提供一个秘密在我们的网络钩子,并确保只有应用程序拥有这个网络钩子可以使用它。
    • SSL验证:此SSL检查器将帮助您诊断SSL证书安装中的问题。您可以在您的Web服务器上验证SSL证书,以确保它是正确安装的、有效的、可信的,并且不会给您的任何用户带来任何错误。

    您希望触发这个网络钩子的事件是什么?

    1. 只是推送事件:只有当有人推入我的存储库时才发送数据。
    2. 把所有的东西都寄给我:如果我们的存储库中有任何拉或推事件,我们将得到通知。
    3. 让我选择个别事件:我们可以为我们想要的数据配置哪些事件。

    单击Create,就会创建一个web钩子。

    Untitled

    如果您在localhost上运行Jenkins,则需要解决以下问题,然后编写https://localhost:8080/github-webhook/将无法工作,因为WebHook只能在他们暴露在互联网上时才能工作。

    因此,如果您想使您的本地主机:8080暴露在互联网上,那么我们可以使用工具。

    将GitHub-web钩子写入ngrok工具指的是这个链接.

    现在让我们看看如何在Jenkins中使用这个web钩子。

    1. 转到管理Jenkins->配置系统
    2. 向下滚动,您将发现GitHub请求复选框。在.。已发布的Jenkins URL,添加存储库链接
    3. 点击“保存”

    Jenkins pipeline

    现在转到Jenkins管道,并选择“GitHub钩子触发器用于GITScm轮询”。

    Jenkins pipeline

    通过这种方式,我们可以为我们的工作添加一个web钩子,并确保每次开发人员向GitHub提交代码时,我们的构建都会被触发。

    我希望这个博客有助于在Jenkins中添加GitHub网络钩子。

    展开全文
  • 用于 TeamworkPM 的 Github Webhook 要使用,请克隆到 Web 服务器。 然后: 将config.TEMPLATE.php复制到config.php 在config.php ,将用户令牌更改为将代表 Github 发布的用户令牌。 将 URL 更改为您的 ...
  • 6.5 GitHub - 脚本 GitHub

    2016-10-10 16:44:50
    脚本 GitHub 所以现在我们已经介绍了 GitHub 的大部分功能与工作流程,但是任意... 在本节中我们将会介绍如何使用 GitHub 钩子系统与 API 接口,使 GitHub 按照我们的设想来工作。 钩子 GitHub 仓库管理中的钩子与服务
  • jenkins自动构建1:github触发钩子

    千次阅读 2019-09-06 12:53:28
    Payload URL填写: 你的jenkins服务器地址 , (/jenkins/github-webhook/ 是jenkins内置的访问接口) —> 勾选:Active(默认是勾选的) --> 点击Add webhook按钮 3, jenkins 配置github连接 a, 配置jenkins访问...
  • Webhook 接收器接受 Github 拉取请求并将它们发送到 Go-CD 并在 Slack 中通知。 特征 将 Github PR 状态设置为“pending”并触发 config.yml 中指定的 Go Pipeline 重试触发最多 5 分钟,如果不成功,更新 Github ...
  • 对接github的markdown项目钩子,解析markdown为博客
  • Github插件 该插件将Jenkins与项目集成在一起。该插件目前具有三个主要功能: 在您的Jenkins项目和GitHub之间创建超链接 ...GitHub钩子触发GITScm轮询 此功能可之后进行构建。 此触发器仅针对匹配回购协议的
  • 一个 GitHub 网络钩子。 Webhook 触发对一系列 repos 的空提交。 设置 我使用 capistrano 进行部署,因此设置非常简单。 创建以下文件: shared/config/repos.yml shared/config/secrets.yml shared/config/...
  • 数据机器人 你可以告诉机器人发布模块,也许还有其他东西。...创建github钩子 将机器人作为合作者添加到 github 将机器人添加到 npm 自动化? 在 npm 和 github 上添加为协作者,它会自动设置挂钩吗?
  • github-hooks-源码

    2021-04-30 09:40:12
    GitHub钩子 一个侦听Github推送事件并执行脚本的简单服务器 为什么 ??? :face_screaming_in_fear: 刚开始,只需要一些东西就可以将GH回购源不断同步到S3存储桶,但是没有繁重的/非免费的工具 用法 编辑config....
  • 配置 GitHub 钩子 此脚本将快速在组织中的所有存储库(或用户,如果您更改一行)上设置提交后挂钩。 要求 安装脚本的要求: pip install -r requirements.txt 跑步 要运行脚本,您需要定义几个环境变量。 这些都是...
  • 下面的步骤都是直接回车,成功后有生成sshkey的路径,然后根据这个路径找到id_rsa.pub文件,并将文件内的内容,配置到github的公钥中。 4.分别执行以下两条命令配置github: git config --global ...
  • github-notify-mush-用于通知MU *有关Github提交的Sinatra应用程序 蒂姆· Tim Krajcar) 这是一个简单,易于部署的Sinatra应用程序,旨在接收来自的推送通知,并登录到MU *(专为PennMUSH设计,但很容易适应其他...
  • GitHub:https://github.com/kotlindev/PHPWebHook 一、什么是自动部署钩子? 简单地说自动部署钩子就是实现代码同步的一个程序,程序会在特定的情况会被触发,比如开发者将代码推送到git服务器时。本文使用PHP...
  • ...github和svn一样有钩子的功能,而且更加强大...例如我做的是最常见的push操作触发的钩子操作,则每次更新之后的钩子操作记录都会在github的控制板可以看到! 工具/原料 github ...
  • 吉苏克 自动拉取和部署github repos 在 config.json 的数组中包含{"name": "tpopp/githook", "path": "path/to/local/repo", "make... 服务端会监听3420端口,当github钩子被触发时,会cd到路径,pull后运行make命令。
  • Node Github Web-Hooks,一个用于处理 github webhooks 的简单节点服务器。 要启动服务器,请运行 NGHWH_HOST=localhost NGHWH_PORT=3000 NGHWH_SECRET_KEY=123 node server.sh 要公开您的本地主机进行测试,请...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 15,224
精华内容 6,089
关键字:

github钩子