.tags{ font-size:13px; line-height:30px; color:#979797; margin-top:30px;padding-bottom:25px;} .tags a{ display:inline-block; background-color:#F4F5F6; color:#67798a; margin-right:5px; padding:0 20px; background-color:#F4F5F6; margin-bottom:5px;} .tags a:hover{background-color:#eef0f1;}

2分pk拾

始创团队一连整合的落地与完成(gitlab+python)

2分pk拾宣布于2019-07-07 06:50:39

导读: 一连整合看法一连整合是一种软件开发明实,即团队开发成员经常整合他们的使命,经由历程每个成员天天至少整合一次,也就意味着天天能够会发生一再再三整合。每次整合都通?/div>

一连整合看法

一连整合是一种软件开发明实,即团队开发成员经常整合他们的使命,经由历程每个成员天天至少整合一次,也就意味着天天能够会发生一再再三整合。每次整合都经由历程自动化的构建(网罗编译,释出,自动化测试)来验证,从而尽早地发现整合弱点。 --马丁福勒

git使命分支

一连整合的条件必须要有一个结实且清晰的版本工具,毫无疑问我们这里应用git作为版本工具

这里只质朴说一下各个分支的作用,想明确更多关于git使命流知识,请点选http://www.cnblogs.com/xirongliu/p/4584653.html

2分pk拾feature/* 功效分支,用于一个新的功效的开发

2分pk拾hotfix/* 热修复分支,用于对线下情形的bug热修复

2分pk拾develop/* 测试分支,测试情形对应的分支

master分支,预上线情形分支

关于hotfix和feature分支允许开发者push,关于develop和master分支只允许开发者merge。

本文原理剖析图示

首先开发者完成程式码后git push到gitlab服务器,经由历程gitlab上事前设定好的系统钩子来触发一个post请求到后端的webserver服务器。后端webserver服务器收到请求后经由历程gitlabCI.py剖析泉源分支与专案组,然后交给不合的shell指令码处置赏罚赏罚。经由历程shell指令码来更新不合情形的专案程式码,假定是开发分支的话还须要装备nginx并推送会见url至钉钉。ELK服务器监控php的专案报错日志,开发者经由历程检视然后实时阻拦debug。

webserver对git请求的详细处置赏罚赏罚图示

开发情形(dev_branch)处置赏罚赏罚流程

关于hotfix/* 或许 feature/*

2分pk拾git push事宜 触发gitlab钩子,然后gitlabCI指令码经由历程条件检测,推行开发分支的shell指令码shell指令码拉去对应的功效分支或许热修复分支,然后拷贝一份nginx模板装备档案,修改对应的域名和目录。过载nginx装备档案并将会见连线推送至钉钉群。

gitlab服务器装备

装备服务器秘钥

新增系统钩子,并选择在甚么时间触发钩子

webserver装备

装备gitlab处置赏罚赏罚指令码

2分pk拾这里只贴出部门程式码只供参考,由于详细需求能够不合,这里就抛砖引玉。

gitlabCI.py 用于处置赏罚赏罚gitlab的事宜请求#!/usr/bin/env python3

# -*- coding: utf-8 -*-

2分pk拾# @Time : 2018-12-18 17:41

# @Author : opsonly

# @Site :

# @File : gitlabCi.py

# @Software: PyCharm

from flask import Flask,request,render_template,make_response,Response

2分pk拾import json,os,re,requests

2分pk拾import subprocess

import re

2分pk拾app = Flask(__name__)

null = ""

2分pk拾cmd = "/var/www/html/"

@app.route('/test',methods=['POST'])

def hello():

json_dict = json.loads(request.data)

2分pk拾name = json_dict['event_name']

#字串撷取分支名

2分pk拾ref = json_dict['ref'][11:]

ssl = json_dict['project']['url']

#gitlab专案名

project = json_dict['project']['name']

#gitlab分组名

namespace = json_dict['project']['namespace']

hostfix = re.compile(r'hostfix/*')

feature = re.compile(r'feature/*')

if name == 'push':

if namespace == 'it':

#预上线分支

if ref == 'master':

cmd = './itmaster.sh ' + project + ref + ' ' + namespace

s = subprocess.getoutput(cmd)

2分pk拾return Response(s)

# 测试分支

elif ref == 'develop':

cmd = './itdevelop.sh ' + project + ref + ' ' + namespace

2分pk拾s = subprocess.getoutput(cmd)

2分pk拾return Response(s)

#开发分支

2分pk拾elif hostfix.match(ref) and feature.match(ref):

2分pk拾cmd = './itOwn.sh' + project + ref + ' ' + namespace + '' + ssl

s = subprocess.getoutput(cmd)

return Response(s)

2分pk拾elif namespace == 'web':

if ref == 'master':

cmd = './webMaster.sh ' + project + ref + ' ' + namespace

2分pk拾s = subprocess.getoutput(cmd)

2分pk拾return Response(s)

elif ref == 'develop':

2分pk拾cmd = './webDevelop.sh ' + project + ref + ' ' + namespace

2分pk拾s = subprocess.getoutput(cmd)

2分pk拾return Response(s)

# 开发分支

2分pk拾elif hostfix.match(ref) and feature.match(ref):

2分pk拾cmd = './webOwn.sh' + project + ref + ' ' + namespace

s = subprocess.getoutput(cmd)

2分pk拾return Response(s)

2分pk拾elif name =='merge_request':

2分pk拾#可以界说一个钉钉推送,每次直接点开贯串毗连便可以中转gitlab合并界面

pass

else:

2分pk拾return Response('未触发事宜')

2分pk拾if __name__ == '__main__':

app.run()**将不合的请求分发至不合shell指令码来处置赏罚赏罚**

测试服务器指令码

#!/bin/bash

2分pk拾Dir="/var/www/html"

function ERROR_NOTICE() {

2分pk拾url="http://oapi.dingtalk.com/robot/send?access_token=xxxxxxxxxxx"

2分pk拾header="'Content-Type: application/json'"

msg="'{"msgtype": "text","text": {"content":"$1 $2 $3"}}'"

a='curl '$url' -H '$header' -d '$msg

eval $a

}

2分pk拾function IF_TRUE() {

if [ $? -ne 0 ];then

ERROR_NOTICE $1 $2 $3

fi

}

2分pk拾function master() {

if [ -d $Dir/$1 ];then

cd $Dir/$1

2分pk拾#startTime=$(ls -l composer.lock|awk '{print $6,$7,$8}')

git fetch

git checkout $2

2分pk拾git pull origin $2

cp .env.develop .env

composer install

IF_TRUE $1 $2 $3

#fi

/usr/local/php7/bin/php artisan queue:restart

2分pk拾IF_TRUE $1 $2 $3

echo $1 " Success"

else

cd $Dir

git clone [email protected]:${3}/${1}.git

cd ${1}

git checkout $2

cp .env.develop .env

composer install

2分pk拾IF_TRUE $1 $2 $3

/usr/local/php7/bin/php artisan queue:restart

IF_TRUE $1 $2 $3

fi

}

master $1 $2 $3

开发分支和预算线分支与下面大致类似,这里就不贴出来了

ELK服务器装备

ELK实时剖析之php的laravel专案日志

效果展示

1.gitlab合并请求推送至钉钉

2.nginx会见url钉钉推送

2分pk拾3.ELK展示php弱点日志

最强干货:基于Jenkins+Docker的自动化程式码释出流程

2分pk拾你所要知道的python运维经常应用指令码

最强干货:一文带你深刻明确Kubernets(K8s)

有用果可以关注一下我的夷易近众号私信我,下面有我的学习资源和一些其他福利:Devops部落

相关文章