bitbucket基于commit事件的自动发布

起因

公司有一个频繁迭代的项目,每日的提交量有20个左右。每次想要看到变更后的效果,都要ssh进入服务器,先git pull,再restart服务,颇为麻烦。

思考

手动发布代码既麻烦又存在操作不及时、操作失误等问题。于是我想到了持续集成系统,如Jenkins。不过这套系统对于本项目来说有点杀鸡用牛刀了,而且费资源。
我找到了bitbucket中的Webhooks的介绍:

Webhooks allow you to extend what Bitbucket does when the repository changes (for example, new code is pushed or a pull request is merged).

意思是说对代码进行读写操作的时候可以执行一些自定义动作,如下图:
webhooks

我们只需绑定Push事件即可,URL填入自己搭建的service(稍后介绍),一旦有对应事件产生,则会访问URL,那么此时就可以触发自动更新代码的逻辑了。

实现service

核心实现

Bitbucket提供了对应文档,这里只看Push事件的文档。Show request body按钮提供了请求数据的样本。
下面附上匹配当前分支事件的代码

import jmespath
def match_branch(content, branch):
    data = json.loads(content)
    changes = jmespath.search('push.changes', data)
    for change in changes or []:
        commit_branch = jmespath.search('new.name', change)
        if commit_branch and commit_branch == branch:
            return True
    return False

如果请求体被函数检测通过,那么就执行git pull,restart等行为。
这里附上基于flask web框架的demo

from flask import Flask, request
app = Flask(__name__)
BRANCH = 'master'
@app.route('/autodeploy', methods=['POST'])
def autodeploy():
    if match_branch(request.data, BRANCH):
        # TODO: 执行git pull,restart等行为
        pass
    else:
        return 'ignore', 201

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=8000)

BRANCH全局变量需要修改为自己项目对应的分支名,服务的URL为http://yourdomain.com:8000/autodeploy,将其填入Bitbucket的Webhooks中,那么下次代码从本地Push到服务器时,就自动发布。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值