Python 一鍵拉取Git分支源碼自動解析並執行SQL語句


 

基於Python實現自動拉取Git分支源碼自動解析並執行SQL語句

 

by:授客 QQ1033553122

1.代碼用途

開發過程中,研發人員會提交SQL更新腳本到Git源碼庫,然后測試負責去拉取這些SQL腳本,並手動在測試環境或其它環境的數據庫中執行這些腳本,很麻煩,本代碼的用途就是為了替代手工執行的操作

2.測試環境

Win7 64

 

Python 3.3.2

 

git-credential-winstore.exe

下載地址:

https://pan.baidu.com/s/1hsehGjU

 

mysql-connector-python-2.1.4-py3.3-winx64.msi

下載地址:http://pan.baidu.com/s/1cDtP1O

官方下載地址:http://dev.mysql.com/downloads/connector/python/

 

Git-2.13.1.2-64-bit.exe

 

TortoiseGit-1.8.14.0-64bit.msi

 

atlassian-bitbucket-5.1.1-x64.exe

3.設計思路

大致思路如下:

->> 1-1 如果是首次運行程序,創建基線文件和基線變量,遞歸遍歷本地目標目錄下的SQL文件,然后根據待執行SQL文件所屬數據庫(例中為ddtm|ddtmk)和操作類型(例中為更新|回滾),分別記錄到不同的基線文件,同時也記錄到對應的基線變量中

->> 1-2 如果非首次運行程序,從基線文件讀取已執行過的文件到對應的基線變量

 

->> 2 切換到本地目標分支

 

->> 3 PULL Git遠程分支merge到本地目標分支

 

->> 4 遞歸遍歷本地目標目錄下的SQL文件,然后根據待執行SQL文件所屬數據庫和操作類型,分別記錄到不同非基線變量

 

->> 5 對比基線變量和非基線變量,過濾得出待執行的SQL腳本文件,根據所屬數據庫和操作類型,分別存入不同變量

 

->> 6 按操作順序執行這些變量中的SQL腳本(先執行更新,再執行回滾,再執行更新)

 

6.1 針對每個變量,排序好SQL文件(例中為按文件名),接着按排序后的順序,解析每個SQL文件

 

6.1.1 針對每個SQL文件,先解析得到單個文件中所有待執行SQL語句,並按文件中SQL語句編寫順序存儲,然后執行每條SQL語句,根據執行結果分別記錄結果到不同的文件

 

6.1.2 等待單個SQL文件中的SQL都執行完成,更新該文件信息至對應的基線文件

 

4.使用方法

1) 安裝好相關軟件,特別是git-credential-winstore.exe

安裝好該軟件后,手動執行一次Git PULL操作,目的在於存儲憑據,以便后續執行Git相關操作時,免輸入密碼操作

 

2配置程序用數據庫

編輯配置文件conf/dbconfig.conf

[DDTM]

host = 192.168.1.100

port = 3306

user = testacc

passwd = test1234

db = ddtm

charset = utf8

 

[DDTMK]

host = 192.168.1.100

port = 3306

user = testacc

passwd = test1234

db = ddtmk

charset = utf8

 

 

3配置需要遍歷的目標目錄(SQL文件所在目錄)

編輯配置文件conf/dirpath_init.conf

[INITCONF]

dir_path = E:\Git\ddt-core-ws\ddt-db\db\V6.8

 

4git初始化配置

編輯配置文件conf/git_init.conf

[INITCONF]

git_remote_hostname = origin

remote_branchs_to_pull =  ['master']

local_branch = master

path_to_local_branch = E:/Git/ddt-core-ws

 

說明:

git_remote_hostname:  遠程主機名稱

remote_branchs_to_pull: 需要拉取的遠程分支,格式為列表形式,形如['master', 'feature/V1.1']

local_branch:需要切到至的本地目標分支,要求必須已在本地經創建該分支

path_to_local_branch:本地分支源碼所在路徑,依葫蘆畫瓢 ,注意用 /分隔

 

5)執行程序

推薦寫成批處理,然后用windows定時任務跑,如下

cd /d D:\auto_exec_sql

python main.py

start D:\auto_exec_sql\filerecord\file_for_failure.txt

 

說明:

start D:\auto_exec_sql\filerecord\file_for_failure.txt

該命令用於執行完畢后自動打開存放執行SQL失敗的文件,方便查看

 

每條sql語句執行結果包含以下幾個方面

執行的sql

執行時間

所在的文件(全路徑)

操作的數據庫

執行失敗的原因

 

注意:

<1> 每次允許程序,執行成功、失敗的記錄都會分別追加到file_for_failure.txtfile_for_success.txt,為了方便查看執行結果,建議適時清空file_for_failure.txt內容。(為何不以w方式打開呢?如果是定時任務跑,中途某次運行結果忘記查看了,那豈不是會因為覆蓋,無法查詢那次的執行結果?

 

<2> 正常情況下,每次運行完成后,無更新的情況下,每個已執行過的文件都不會在下次運行中被執行,需要人工查看失敗原因,並手工補充執行操作

 

<3> 如果想目標目錄下的文件都被重新執行一次,則程序運行之前,手動放置四個空文件到filerecord目錄下

Python <wbr>一鍵拉取Git分支源碼自動解析並執行SQL語句

 


 

5.源碼下載地址

https://pan.baidu.com/s/1c1ObC9y

6.說明

本程序非通用程序,僅提供思路,針對不同項目,需要做適當的修改,方可用

程序使用限制如下

<1> 固定的目錄組織結構,存放SQL文件的上級目錄,及上級目錄的父目錄結構及名稱,必須和以下一模一樣,否則必須修改程序

 

 

 

<2> 腳本文件命名,必須數字打頭,代表文件新增順序,同時也代表其SQL語句執行順序,如果目標目錄包含了多個帶 <1>結構的文檔目錄,那么要求每個SQL腳本的編號唯一,或者按名稱升序排序能代表文件執行順序

 Python <wbr>一鍵拉取Git分支源碼自動解析並執行SQL語句

 

 


<3> 統一SQL腳本文件編碼,暫時不支持不同編碼的文件同時存在,目前定性為UTF-8-SIG(UTF-8BOM格式編碼)

 

<4> 不支持創建mysql存儲過程,事件等,這類以DELIMITER //開頭,以DELIMITER ;結尾的SQL語句

 

<5> 存儲過程,事件等除外,其它普通SQL,每條SQL語句之間必須以 ; 分號分隔

 

<6> 程序根據文件名稱&文件最后修改時間組合值是否變化來判斷文件是否被更新,是則會被執行

 

源碼下載

程序重構:

自動感知新分支並自動拉去,自動切換到新目錄進行腳本執行,支持不改代碼,動態增加數據庫


[授客]基於Python實現自動拉取Git分支源碼自動解析並執行SQL語句20170821


 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM