#!/usr/bin/env python3
# coding: utf-8
"""
Created by Liushuai at 2020/3/24
"""
import sys
import datetime
import gitlab
import urllib3
import logging
from multiprocessing.pool import ThreadPool
year = datetime.datetime.now().isocalendar()[0]
weeks = datetime.datetime.now().isocalendar()[1]
gitlab_url = "https://git.example.com"
gitlab_private_token = "xxxxxxxxxxxxxxxxxx"
logging.basicConfig(format="%(asctime)s %(levelname)s %(message)s",
datefmt="%Y-%m-%d %H:%M:%S",
filename=r"E:\liush\Pycharm\gitlab\log.log"
)
projects_info = [{"p_name": "users", "p_id": 45}, {"p_name": "pricing", "p_id": 134},
{"p_name": "data", "p_id": 27}, {"p_name": "marketing", "p_id": 55},
{"p_name": "order", "p_id": 37}, {"p_name": "schedule", "p_id": 20},
{"p_name": "goods", "p_id": 40}, {"p_name": "purchase", "p_id": 36},
]
urllib3.disable_warnings()
class gitlabBranchesManager:
def __init__(self):
self.git_obj = gitlab.Gitlab(url=gitlab_url, private_token=gitlab_private_token, ssl_verify=False, per_page=50)
def create_branches(self, p_name, p_id, version):
p_obj = self.git_obj.projects.get(p_id)
try:
p_obj.branches.create({"branch": "release_%s_%s" % (p_name, version), "ref": "master"})
print("INFO [%s]: Branch release_%s_%s 创建成功。" % (p_name, p_name, version))
except Exception as e:
print("ERROR [%s] release_%s_%s" % (p_name, p_name, version), e)
try:
p_obj.branches.create({"branch": "test_%s_%s" % (p_name, version), "ref": "release_%s_%s" % (p_name, version)})
print("INFO [%s]: Branch test_%s_%s 创建成功。" % (p_name, p_name, version))
except Exception as e:
print("ERROR [%s] test_%s_%s" % (p_name, p_name, version), e)
try:
p_obj.branches.create({"branch": "opt_%s_%s" % (p_name, version), "ref": "test_%s_%s" % (p_name, version)})
print("INFO [%s]: Branch opt_%s_%s 创建成功。" % (p_name, p_name, version))
except Exception as e:
print("ERROR [%s] opt_%s_%s" % (p_name, p_name, version), e)
def delete_branches(self, p_name, p_id, version):
p_obj = self.git_obj.projects.get(p_id)
try:
p_obj.branches.delete("release_%s_%s" % (p_name, version))
print("INFO [%s]: Branch release_%s_%s 删除成功。" % (p_name, p_name, version))
except Exception as e:
print("ERROR [%s] release_%s_%s" % (p_name, p_name, version), e)
try:
p_obj.branches.delete("test_%s_%s" % (p_name, version))
print("INFO [%s]: Branch test_%s_%s 删除成功。" % (p_name, p_name, version))
except Exception as e:
print("ERROR [%s] test_%s_%s" % (p_name, p_name, version), e)
try:
p_obj.branches.delete("opt_%s_%s" % (p_name, version))
print("INFO [%s]: Branch opt_%s_%s 删除成功。" % (p_name, p_name, version))
except Exception as e:
print("ERROR [%s] opt_%s_%s" % (p_name, p_name, version), e)
def create(pt_name, pt_id, ver):
git_branches_manager = gitlabBranchesManager()
git_branches_manager.create_branches(pt_name, pt_id, ver)
def delete(pt_name, pt_id, ver):
git_branches_manager = gitlabBranchesManager()
git_branches_manager.delete_branches(pt_name, pt_id, ver)
if __name__ == "__main__":
for project in projects_info:
p_name = project["p_name"]
p_id = project["p_id"]
if sys.argv[1] == "create":
version = str(year) + "W" + str(weeks)
create(p_name, p_id, version)
elif sys.argv[1] == "delete":
version = str(year) + "W" + str(weeks - 1)
delete(p_name, p_id, version)
# if __name__ == "__main__":
# pool = ThreadPool(processes=40)
# for project in projects_info:
# p_name = project["p_name"]
# p_id = project["p_id"]
# if sys.argv[1] == "create":
# version = str(year) + "W" + str(weeks)
# pool.apply_async(create, (p_name, p_id, version))
# elif sys.argv[1] == "delete":
# version = str(year) + "W" + str(weeks - 1)
# pool.apply_async(delete, (p_name, p_id, version))
# pool.close()
# pool.join()