python(08)實(shí)踐Django-異步任務(wù)celery

本項(xiàng)目使用celery 異步去同步項(xiàng)目在jenkins中的構(gòu)建信息植袍。

最終結(jié)果展示:

  1. 在項(xiàng)目的構(gòu)建列表中點(diǎn)擊同步按鈕缝其,調(diào)用celery去jenkins同步所有構(gòu)建信息


    Paste_Image.png
  2. 每隔12小時(shí)蓄诽,調(diào)用celery的定時(shí)任務(wù)去jenkins同步最新build信息


    Paste_Image.png

前提:已有redis服務(wù)并啟動(dòng)

  1. 安裝celery
      pip install celery
      pip install redis
    
  2. settings.py 配置
     BROKER_URL = 'redis://ip:6379/6'
     CELERY_RESULT_BACKEND = BROKER_URL
     CELERY_TIMEZONE = 'Asia/Shanghai'
     #時(shí)區(qū)不一致時(shí)會(huì)導(dǎo)致任務(wù)監(jiān)控不到
    
  3. init.py
    from .celery import app as celery_app
    
  4. celery.py 配置
     # ~*~ coding: utf-8 ~*~
     from __future__ import absolute_import, unicode_literals
     import os
     from celery import Celery
     from celery.schedules import crontab
     from django.conf import settings
    
     # set the default Django settings module for the 'celery' program.
     os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'Testmanager.settings')
     app = Celery('Testmanager')
    
     # Using a string here means the worker will not have to
     # pickle the object when using Windows.
     app.config_from_object('django.conf:settings')
     app.autodiscover_tasks(lambda: [app_config.split('.')[0]
                                 for app_config in settings.INSTALLED_APPS])
      #定時(shí)任務(wù)配置
      app.conf.update(
     CELERYBEAT_SCHEDULE={
        'refresh-pci-last-build-info': {
             'task': 'devops.tasks.update_all_pcis_by_jenkins',
            'schedule': crontab(hour='*/12'),
             'args': (),
             }
         }
     )
    
  5. task任務(wù)
    @shared_task
    def update_all_pcis_by_jenkins():
     jen = jenkins.Jenkins(jenkins_url, username=jenkins_user, password=jenkins_passwd)
     pcis = PCI.objects.all()
     for pci in pcis :
         job_name = pci.job_name
         lastBuild_Number = jen.get_job_info(job_name)['lastBuild']['number']
         if pci.last_build_number != lastBuild_Number :
             lastBuild_url = jen.get_build_info(job_name, lastBuild_Number)['url']  # 最后一次build號(hào)
             times = jen.get_build_info(job_name, lastBuild_Number)['timestamp']  # build的日期
             result = jen.get_build_info(job_name, lastBuild_Number)['result']
             pci.last_build_number = lastBuild_Number
             pci.last_build_result = result
             pci.last_build_url = lastBuild_url
             pci.last_update_time = timestamp2datetime(times)
             pci.save()
         print(job_name)
         print('已是最新版本')
    @shared_task
    def update_pcis_by_jenkins(job_name,pid):
      jen = jenkins.Jenkins(jenkins_url, username=jenkins_user, password=jenkins_passwd)
      print (job_name)
      pci = PCI.objects.get(id=pid)
      job_info_scm = jen.get_job_info(job_name)['scm']['_class']
     #{'_class': 'hudson.plugins.git.GitSCM'}
      print('job_info_scm')
      print(job_info_scm)
      if job_info_scm.find('git') != -1:
          pci.pro_scm = 'git'
     else:
         pci.pro_scm = 'svn'
      lastBuild_Number = jen.get_job_info(job_name)['lastBuild']['number']
      lastBuild_url = jen.get_build_info(job_name, lastBuild_Number)['url']# 最后一次build號(hào)
      times = jen.get_build_info(job_name, lastBuild_Number)['timestamp']# build的日期
      result = jen.get_build_info(job_name, lastBuild_Number)['result']
      pci.last_build_number = lastBuild_Number
      pci.last_build_result = result
      pci.last_build_url = lastBuild_url
      pci.last_update_time = timestamp2datetime(times)
      pci.save()
    
  6. 啟動(dòng)celery 進(jìn)程
    celery -A Testmanager worker --loglevel=info
    #定時(shí)任務(wù)
    celery -A Testmanager beat --loglevel=info
    
加載已有的tasks

定時(shí)任務(wù)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末趁窃,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子拦盹,更是在濱河造成了極大的恐慌尘执,老刑警劉巖舍哄,帶你破解...
    沈念sama閱讀 221,430評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異誊锭,居然都是意外死亡表悬,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,406評(píng)論 3 398
  • 文/潘曉璐 我一進(jìn)店門丧靡,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)签孔,“玉大人,你說(shuō)我怎么就攤上這事窘行〖⒆罚” “怎么了?”我有些...
    開(kāi)封第一講書人閱讀 167,834評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵罐盔,是天一觀的道長(zhǎng)但绕。 經(jīng)常有香客問(wèn)我,道長(zhǎng),這世上最難降的妖魔是什么捏顺? 我笑而不...
    開(kāi)封第一講書人閱讀 59,543評(píng)論 1 296
  • 正文 為了忘掉前任六孵,我火速辦了婚禮,結(jié)果婚禮上幅骄,老公的妹妹穿的比我還像新娘劫窒。我一直安慰自己,他們只是感情好拆座,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,547評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布主巍。 她就那樣靜靜地躺著,像睡著了一般挪凑。 火紅的嫁衣襯著肌膚如雪孕索。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書人閱讀 52,196評(píng)論 1 308
  • 那天躏碳,我揣著相機(jī)與錄音搞旭,去河邊找鬼。 笑死菇绵,一個(gè)胖子當(dāng)著我的面吹牛肄渗,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播咬最,決...
    沈念sama閱讀 40,776評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼恳啥,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了丹诀?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書人閱讀 39,671評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤翁垂,失蹤者是張志新(化名)和其女友劉穎铆遭,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體沿猜,經(jīng)...
    沈念sama閱讀 46,221評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡枚荣,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,303評(píng)論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了啼肩。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片橄妆。...
    茶點(diǎn)故事閱讀 40,444評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖祈坠,靈堂內(nèi)的尸體忽然破棺而出害碾,到底是詐尸還是另有隱情,我是刑警寧澤赦拘,帶...
    沈念sama閱讀 36,134評(píng)論 5 350
  • 正文 年R本政府宣布慌随,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏阁猜。R本人自食惡果不足惜丸逸,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,810評(píng)論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望剃袍。 院中可真熱鬧黄刚,春花似錦、人聲如沸民效。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 32,285評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)研铆。三九已至埋同,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間棵红,已是汗流浹背凶赁。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 33,399評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留逆甜,地道東北人虱肄。 一個(gè)月前我還...
    沈念sama閱讀 48,837評(píng)論 3 376
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像交煞,于是被迫代替她去往敵國(guó)和親咏窿。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,455評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容

  • 在工作中遇到的開(kāi)發(fā)對(duì)logging的使用是分兩個(gè)極端的素征,有些人喜歡把什么信息都打印出來(lái)集嵌,一不小心日志就刷屏,另一些...
    灼灼2015閱讀 700評(píng)論 0 1
  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理御毅,服務(wù)發(fā)現(xiàn)根欧,斷路器,智...
    卡卡羅2017閱讀 134,696評(píng)論 18 139
  • 目的:通過(guò)訪問(wèn)Jenkins得到各個(gè)項(xiàng)目的構(gòu)建狀態(tài)端蛆。 jenkins是一款持續(xù)集成的工具凤粗,插件眾多,配置簡(jiǎn)單今豆,跨平...
    灼灼2015閱讀 2,298評(píng)論 0 2
  • =========================================================...
    lavor閱讀 3,492評(píng)論 0 5
  • 去電影院看了《滾蛋吧呆躲,腫瘤君》异逐,果然還是哭了,淚流滿面插掂,狼狽不堪应役。 小伙伴為了給熊頓打氣一起剃了光頭齊齊出現(xiàn)在她面...
    季夏習(xí)習(xí)閱讀 885評(píng)論 2 3