【DevOps】代码托管与自动化同步变更

方案介绍


目的

通过 git + gitee + flask + webhook 完成 如下两个目的:

1、本地代码上传 与 托管

2、代码发生变更时,自动同步到服务器

流程

为便于识别,绘制流程图的习惯做法是:
圆角矩形表示“开始”与“结束”;
矩形表示行动方案、普通工作环节用;
菱形表示问题判断或判定(审核/审批/评审)环节;
用平行四边形表示输入输出;
箭头代表工作流方向。

图床链接:http://ezrealer.gitee.io/image-bed/CSDN/代码托管与自动化同步变更.png
在这里插入图片描述

环境

本地环境:windows10

服务器环境:Centos 7.9

实现流程


个人PC 安装与配置 Git

1、到 Git 的淘宝镜像下载与安装最新版本的 Git,目前最新版本是 v2.31.0;

Git 淘宝镜像: https://npm.taobao.org/mirrors/git-for-windows

2、打开 cmd ,配置个人信息,以便日后提交新版本的时候可以追踪到是谁提交的,怎么联系提交者;

git config --global user.name "Ezrealer"

git config --global user.email Ezrealer@qq.com

git config --list

3、创建公钥

ssh-keygen -t rsa -C "Ezrealer@qq.com"

enter > enter > enter

# Your identification has been saved in C:\Users\Ezreal/.ssh/id_rsa.
# Your public key has been saved in C:\Users\Ezreal/.ssh/id_rsa.pub.

4、打开 C:\Users\Ezreal/.ssh/ 文件夹下的 id_rsa.pub 文件,可以看到刚刚生成的公钥

Gitee 创建账户与新建代码仓库

1、注册一个 Gitee 账号建立仓库,并加入个人PC的 ssh_key;

2、新建项目仓库,名称设置位 MyProgram;

个人 PC 上的代码上传到 Gitee 的 Myprogram 仓库

1、创建 E:\EzrealerGitRepo ,把某个项目 Myprogram 放到该目录下;

2、E:\EzrealerGitRepo\MyProgram 下创建 .gitignore,过滤不上传的文件:

*.log
*.pyc
Temp/
.idea/
.idea
venv/
__pycache__/

3、在 E:\EzrealerGitRepo\MyProgram 路径下执行 git init,将该目录变为 git 仓库目录;

4、上传到本地仓库,并推到远程仓库;

如果项目中有空文件夹,是不会上传到 Gitee 上的,建议在空文件夹下建一个空文件 .gitkeep 占位;

git commit -m "first commit"git remote add origin git@gitee.com:Ezrealer/MyProgram.git;

git push -u origin master
# 也可以通过 -f 参数强行覆盖远程代码
git push -u origin master -f

Centos 7.9 安装与设置 git

1、安装与设置 git

whereis git

sudo yum install -y wget
sudo yum install -y gcc-c++
sudo yum install -y zlib-devel perl-ExtUtils-MakeMaker
sudo yum install curl-devel expat-devel gettext-devel openssl-devel zlib-develperl-devel

yum remove git

cd /usr/software
wget https://mirrors.edge.kernel.org/pub/software/scm/git/git-2.30.1.tar.gz

tar -zxvf cd git-2.30.1.tar.gz 

cd git-2.30.1

yum install install autoconf automake libtool

make configure

sudo make prefix=/usr/local/git install

echo 'export PATH=/usr/local/git/bin:$PATH' >> /etc/profile
source  /etc/profile

git --version

2、配置 git

git config --global user.name "Ezrealer"

git config --global user.email Ezrealer@qq.com

git config --list

3、 生成公钥,并添加到 Gitee

ssh-keygen -t rsa -C "Ezrealer@qq.com"

Enter > Enter > Enter 

# 输出
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): 
Created directory '/root/.ssh'.

# 查看公钥
cat /root/.ssh/id_rsa.pub

将公钥添加到我的 Gitee 账户

4、克隆 Gitee 的项目到服务器

mkdir -p /usr/EzrealerGitRepo

cd /usr/EzrealerGitRepo

git clone git@gitee.com:Ezrealer/MyProgram.git

编写 flask 接口,实现 webhook 调用后的同步操作

在项目中新建个 webhook_server.py,并push到 Gitee,然后在服务器手动 git push 拉取更新,并启动 webhook_server;

from flask import Flask,request
import json
from git import Repo
import datetime

app = Flask(__name__)


def gitee_pull():

    repo = Repo("../../")  # git文件的路径
    git = repo.git

    print("当前未跟踪文件:", repo.untracked_files)
    print("当前本地git仓库状态:", git.status())
    print("当前本地git仓库是否有文件更新:", repo.is_dirty())
    print("当前本地分支:", git.branch())
    print("当前远程仓库:", git.remote())

    remote_name = "origin"
    print("正在 git pull {0} master".format(remote_name))
    git.pull(remote_name,"master")
    print("拉取修改 {0} 成功!".format(remote_name))

@app.route('/gitee/webhook',methods=["POST"])
def get_tasks():
    if request.method=='POST':
        print("请求地址:",request.url)
        print("=" * 50)
        print("请求方法:",request.method)
        print("=" * 50)
        print("请求内容:")
        request_dict = json.loads(str(request.data, encoding = "utf-8"))
        print(request_dict)
        print(type(request_dict))
        print("=" * 50)
        if request_dict.get("password") == "123":
            print("密码验证通过,开始拉取...")
            gitee_pull()
            print("拉取成功!",str(datetime.datetime.now())[:19])
            return "success"
        else:
            print("密码验证失败...",request_dict.get("password"))
            return "password is error"

app.run(host="0.0.0.0", port=8000, debug=False)

# # python requests库模拟发送数据
# import requests
# post_data={
#     "name":"hahaha",
#     "pass":"pass",
# }
# res=requests.post(url="http://127.0.0.1:8000/user/test",data=post_data)
# print(res.text)

在 Gitee 的项目仓库中配置 WebHook

在 Gitee 的 项目仓库 => 管理中,配置 WebHooks,添加端口地址,并设置密码,选择事件 PUSH;

通过这个设置,可以在每次 PC push 代码到 Gitee 时,调用 WebHook 配置的接口,从而在服务器上自动执行 git pull 操作,拉取更新;

当然,也可以借助其他 DevOps 工具 完成更复杂的同步操作,比如 jekins,gitee 自带的 gitee go 等;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值