想給自己工作寫款工具刁赖,因各種原因delay...
1:在選定python后逛钻,買了三本以上的python來看贬蛙,跟著書做練習(xí)雨女。
2:認(rèn)為自己不會(huì)寫前臺(tái)代碼,于是花了近1個(gè)月的業(yè)余時(shí)間在freecodecamp上練習(xí)闖關(guān)301關(guān)阳准。
這兩項(xiàng)花了近2個(gè)月的業(yè)余時(shí)間
即使花了這么多的時(shí)間氛堕,發(fā)現(xiàn)自己還是不知道從什么地方開始,于是去找python語(yǔ)言開發(fā)的項(xiàng)目野蝇,選中jumpserver讼稚,在它的基礎(chǔ)之上自己增加了一個(gè)應(yīng)用管理功能,實(shí)現(xiàn)應(yīng)用增加绕沈、修改锐想、刪除、檢查應(yīng)用狀態(tài)乍狐、啟動(dòng)應(yīng)用赠摇、停止應(yīng)用、導(dǎo)入和導(dǎo)出等,總共消耗時(shí)間不超過3天蝉稳。
在這個(gè)過程中抒蚜,才察覺之前那些都不是最佳學(xué)習(xí)路徑,旁枝末節(jié)可以給自己增加無謂的信心耘戚,但對(duì)主要做的事情影響并不大嗡髓,最快速的學(xué)習(xí)方式模仿,參考已有案例開始實(shí)踐收津,在需要用到具體技能時(shí)才開始學(xué)習(xí)饿这,而不是一開始捧著本厚厚的書,學(xué)會(huì)了N多細(xì)小的點(diǎn)撞秋,卻不知如何串聯(lián)使用长捧,慢慢消耗激情。
jumpserver選中的是Django框架吻贿,首要學(xué)習(xí)Django框架是如何運(yùn)行起來的串结,可參考前面python(02)--(04),知道這些后就可以開始正式開發(fā)工作啦舅列。
需求:監(jiān)控jenkins中項(xiàng)目的構(gòu)建肌割,對(duì)已打標(biāo)記的構(gòu)建,做版本發(fā)布帐要,并提交給實(shí)施部門把敞,實(shí)施部門根據(jù)接收到的發(fā)布版本進(jìn)行升級(jí)工作。
現(xiàn)狀:
1)發(fā)布包沒地方管榨惠,當(dāng)前在各個(gè)測(cè)試人員的電腦上
2)已發(fā)布版本找不到SVN/Git上的對(duì)應(yīng)的地址
3)不知道現(xiàn)網(wǎng)是哪個(gè)版本
4)不知道已發(fā)布的包情況(有沒有升級(jí)奋早,升級(jí)包質(zhì)量好還是壞)
設(shè)計(jì):
PCI:在管理中和jenkins關(guān)聯(lián)的項(xiàng)目
PCI_BUILD: jenkins中項(xiàng)目的構(gòu)建信息
PCI_RELEASE: 出包
ONLINE_VERSION: 現(xiàn)網(wǎng)版本管理
在modle階段
-
字段下拉列表選擇數(shù)據(jù)
UPGRADE_RESULT =( ('SUCCESS', u"SUCCESS"), ('FAIL', u"FAIL"), ) upgrade_result = models.CharField(choices=UPGRADE_RESULT,max_length=512, blank=True) #升級(jí)結(jié)果:升級(jí)成功、升級(jí)失敗
-
用到屬性CharField赠橙、IntegerField耽装、DateTimeField、TextField期揪、FileField
release_url = models.FileField(upload_to='./releaseStorage/%Y/%m/%d',blank=True,null=True) #發(fā)布包的文件上傳文件存儲(chǔ)目錄和按年月日目錄進(jìn)行存儲(chǔ)
用到外鍵pro = models.ForeignKey(Project)
-
用到組合主鍵
class Meta: unique_together = ("pci_build", "pro")
-
外鍵引用時(shí)顯示該對(duì)象想要顯示的名字 而不是Object
def __unicode__(self): return self.build_name __str__ = __unicode__
-
字段值唯一unique=True
job_name = models.CharField(max_length=50,blank=True,unique=True)
-
默認(rèn)值
feedback_info = models.CharField(max_length=512,default= 'Not upgraded') #跟著發(fā)布包的后續(xù)(升級(jí)成功剂邮、升級(jí)失敗及原因、未升級(jí))
全類如下:
# coding: utf-8
from django.db import models
from projects.models import Project
__all__ = ['PCI','PCI_BUILDS','PCI_RELEASE','ONLINE_VERSION']
UPGRADE_RESULT =(
('SUCCESS', u"SUCCESS"),
('FAIL', u"FAIL"),
)
class PCI(models.Model) :
pro = models.ForeignKey(Project)
job_name = models.CharField(max_length=50,blank=True,unique=True) #在jenkins中名字 ,持續(xù)集成名稱--同項(xiàng)目名
last_build_number = models.IntegerField(blank=True, null=True) #在jenkins中最新的一次構(gòu)建號(hào)
last_build_result = models.CharField(max_length=1024,blank=True) #在jenkins中最新的一次構(gòu)建結(jié)果
last_build_url = models.CharField(max_length=1024,blank=True) #在jenkins中最新的一次構(gòu)建URL
last_update_time = models.DateTimeField(blank=True, null=True) #更新時(shí)間
pro_scm = models.CharField(max_length=20,blank=True) #項(xiàng)目是SVN横侦,還是GIT
def __unicode__(self):
return self.job_name
__str__ = __unicode__
class PCI_BUILDS(models.Model) :
pci = models.ForeignKey(PCI)
pro = models.ForeignKey(Project)
build_name = models.CharField(max_length=512,blank=True, null=True)
build_number = models.IntegerField(blank=True, null=True,verbose_name=u"構(gòu)建號(hào)") #在jenkins中最新的一次構(gòu)建號(hào)
build_result = models.CharField(max_length=1024,blank=True) #在jenkins中最新的一次構(gòu)建結(jié)果
build_url = models.CharField(max_length=1024,blank=True) #在jenkins中最新的一次構(gòu)建URL
update_time = models.DateTimeField(blank=True, null=True) #更新時(shí)間
build_tags = models.CharField(max_length=1024,null=True) #在jenkins中tags
def __unicode__(self):
return self.build_name
__str__ = __unicode__
class PCI_RELEASE(models.Model):
pro = models.ForeignKey(Project)
pci_build = models.ForeignKey(PCI_BUILDS)
build_name = models.CharField(max_length=512, blank=True, null=True)
release_name = models.CharField(max_length=512,null=True, blank=True) #發(fā)布包名
release_date = models.DateTimeField(null=True, blank=True) #發(fā)布時(shí)間
release_info = models.TextField(blank=True,null=True) #發(fā)包信息
release_url = models.FileField(upload_to='./releaseStorage/%Y/%m/%d',blank=True,null=True) #發(fā)布包的文件
release_user = models.CharField(max_length=20, blank=True,null=True,) # 出包人
feedback_info = models.CharField(max_length=512,default= 'Not upgraded') #跟著發(fā)布包的后續(xù)(升級(jí)成功、升級(jí)失敗及原因绰姻、未升級(jí))
class Meta:
unique_together = ("pci_build", "pro") #這是重點(diǎn)
def __unicode__(self):
return self.build_name
__str__ = __unicode__
class ONLINE_VERSION(models.Model):
pro = models.ForeignKey(Project)
pci_release = models.ForeignKey(PCI_RELEASE)
release_name = models.CharField(max_length=512, blank=True) # 發(fā)布包名
IM_plan = models.TextField(blank=True) #實(shí)施方案
upgrade_date = models.DateField(null=True, blank=True) #升級(jí)時(shí)間
upgrade_result = models.CharField(choices=UPGRADE_RESULT, max_length=512, blank=True) #升級(jí)結(jié)果:升級(jí)成功枉侧、升級(jí)失敗
upgrade_fail_desc = models.CharField(max_length=1024, blank=True) #升級(jí)失敗的描述
upgrade_user = models.CharField(max_length=20, blank=True) # 升級(jí)的操作者
def __unicode__(self):
return self.release_name
__str__ = __unicode__