项目由来
最近联调工作中常需要人员支持,排查环境中遇到的问题,所以使用python+django定时爬取git获取git配置文件信息的接口,优先确保想要环境的配置信息正确,方便定位配置信息是否有误
前期gitlab接口调研
获取所有项目以及项目id
获取项目下的仓库以及仓库路径
通过获取的仓库以及路径再获取仓库下的配置文件信息
通过获取到配置文件信息,拿到content内容,content内容为base64加密,直接解密保存为byte文件,再转化为json
前期定时任务调研
通过linux定时去执行(还没有实践)
通过django_apscheduler,直接在 views.py中添加以下代码
from django_apscheduler.jobstores import DjangoJobStore,register_events,register_job
#创建一个调度器
scheduler=BackgroundScheduler()
#添加一个作业
scheduler.add_jobstore(DjangoJobStore(),"default")
try:
@register_job(scheduler, "interval", seconds=1)#用interval方式 每1秒执行一次
# @register_job(scheduler, 'cron', day_of_week='mon-sun', hour='8', minute='30', second='10', id='delete_stale_data') # 定时执行:这里定时为周一到周日每天早上8:30执行一次
def time_task():
"""定时的任务逻辑"""
gitlab_db()
print("读取gitlab配置信息")
register_events(scheduler)
scheduler.start()
except Exception as e:
print(e)
scheduler.shutdown()
gitlab配置信息
由于定时任务,需要把gitlab的配置信息抽离,目前存放在config.xml文件中
前期django库以及的设计
project、projectId、commitId、message(配置文件内容)
存库api:
def gitlab_db():
flag=0
gt=gtUtil()
project = gt.projectname
projectId =gt.get_projectsId()
commitId = gt.get_commit()
message = gt.get_message()
print(message)
if commitId:
gitObject=Gitl.objects.filter(commitId=commitId)
print(gitObject)
if not gitObject.exists():
gitObject.create(project=project,projectId=projectId,commitId=commitId,message=message)
flag=1
return JsonResponse({"flag":flag})
对外提供的接口:直接views写一个查库的接口,还有一个封装好gitlab的接口