您好,登錄后才能下訂單哦!
這篇文章主要講解了如何通過Python掃描代碼關鍵字并進行預警,內容清晰明了,對此有興趣的小伙伴可以學習一下,相信大家閱讀完之后會有幫助。
近期線上出現一個bug,研發的小伙伴把測試環境的地址寫死到代碼中,在上線前忘記修改,導致線上發布的代碼中使用了測試環境地址。
開發過程中雖然有各種規范制度,但是難免有粗心,與其責備不如通過技術手段將問題進行避免。
為了達到上述需求,初步想通過以下步驟來實現代碼關鍵字自動掃描告警。
#安裝python的依賴包 yum -y install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel libffi-devel gcc #下載Python安裝包,版本號:Python-3.7.1.tgz(在/opt下創建目錄Python3) wget https://www.python.org/ftp/python/3.7.1/Python-3.7.1.tgz #解壓安裝包 tar -zxvf Python-3.8.1.tgz #指定python3安裝目錄 ./configure --prefix=/usr/local/python3 #編譯&安裝 make && make install #創建軟連接,將自定目錄管理到指定目錄 ln -s /usr/local/python3/bin/python3 /usr/bin/python3 ln -s /usr/local/python3/bin/pip3 /usr/bin/pip3 #添加環境變量 vi /etc/profile export PATH=/usr/local/python3/bin:$PATH source /etc/profile #至此Python3安裝完畢,通過命令驗證
Git安裝 #下載git安裝包,版本號:2.21.0 wget https://github.com/git/git/archive/v2.21.0.tar.gz #解壓 tar -zxvf v2.21.0.tar.gz #安裝 make prefix=/usr/local/git install #添加環境變量 vi /etc/profile export PATH=/usr/local/git/bin:$PATH source /etc/profile #至此Python3安裝完畢,通過命令驗證
GitPython3安裝 #可以采用在線安裝 pip3 install GitPython #但是我這里由于網絡限制無法在線安裝,只能采用手動安裝 #下載依賴包,下載地址https://pypi.org/,可以根據關鍵字smmap、gitdb進行檢索下載 smmap-3.0.4.tar.gz gitdb-4.0.5.tar.gz #安裝 tar -zxvf smmap-3.0.4.tar.gz cd smmap-3.0.4 python3 setup.py install tar -zxvf gitdb-4.0.5.tar.gz cd gitdb-4.0.5 python3 setup.py install tar -zxvf GitPython-3.1.2 cd GitPython-3.1.2 python3 setup.py install #安裝完畢后,可以寫一個demo.py進行驗證 復制代碼 from git.repo import Repo import os demo_git_path = '/opt/workspace/demo' #定義本地目錄 Repo.clone_from('http://git.***.com/demo/demo_git.git',to_path=demo_git_path, branch='master') 復制代碼 #最終代碼庫將克隆到本地目錄(執行前將demo.py賦權) python3 demo.py
linux下配置定時任務 #定時任務采用linux的crontab來實現 #編輯定時任務 crontab -e * * * * * python3 /opt/python3-workspace/demo.py >> /opt/python3-workspace/logs/demo.log #前五個是時間指令,分鐘(0-59)小時(0-28)日期(1-31)月份(1-12)星期幾(0-6,其中0代表星期日) #python3 是具體執行的指令 后面跟的是執行的腳本 在后面跟的是日志 #編輯保存后會立即執行 #查看當前正在運行的任務,本案例中已臨時注釋# crontab -l
原計劃使用linux的crontab進行任務調度,但是在執行GitPython命令時遇到兩個問題,即
問題一:在crontab中無法調用GitPython命令,解決方案,在crontab中增加GitPython的路徑
主要內容是在crontab中增加如下代碼,至此第問題一可以解決
SHELL=/bin/bash PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin:/usr/local/git/bin:/root/bin MAILTO=root HOME=/
問題二:在crontab中執行GitPython命令時,無法讀取linux記錄的賬號密碼,導致自動任務始終無法檢出代碼,由于該問題一直未解決,因此決定采用python的定時任務調度解決該問題,具體見下文
APScheduler安裝 #這里由于網絡限制無法在線安裝,只能采用手動安裝 #下載依賴包,下載地址https://pypi.org/,可以根據關鍵字pytz、six、tzlocal進行檢索下載 pytz-2020.1.tar.gz six-1.14.0.tar.gz tzlocal-2.1.tar.gz APScheduler-3.6.3.tar.gz #安裝tzlocal tar -zxvf tzlocal-2.1.tar.gz cd tzlocal-2.1 python3 setup.py install #安裝six tar -zxvf six-1.14.0.tar.gz cd six-1.14.0 python3 setup.py install #安裝pytz tar -zxvf pytz-2020.1.tar.gz cd pytz-2020.1 python3 setup.py install #安裝APScheduler tar -zxvf APScheduler-3.6.3.tar.gz cd APScheduler-3.6.3 python3 setup.py install 至次APScheduler安裝完畢,寫個demo驗證下:
git代碼獲取 通過Repo.clone_from獲取遠程代碼倉庫,指定master分支,將遠程代碼庫clone到本地/opt/workspace/demo目錄下, 如果當前目錄不為空,則通過shutil.rmtree()進行級聯刪除
關鍵詞掃描 利用os組件,實現對指定目錄進行遞歸掃描,將符合要求的文件擴展名.css .js .ftl .properties等文件進行逐行掃描 關鍵詞掃描其實就是利用正則表達式,對要掃描的關鍵詞進行匹配,如果匹配成功則將目標文件名稱放入到異常文件列表 詳細代碼如下: import os import re project_git_path = '/opt/workspace/demo' cssnum = 0 jsnum = 0 ftlnum = 0 fileList = [] pattern = re.compile(r'.test.com') def analysiFile(pathFilename): #print('文件名:', filename) fo = open(pathFilename, 'r', encoding='UTF-8') for line in fo.readlines(): match = pattern.search(line) if match: if(fileList.count(filename) == 0): fileList.append(filename); #循環打印目錄下的所有文件 for parentdir, dirname, filenames in os.walk(project_git_path): for filename in filenames: if os.path.splitext(filename)[1] == '.css': #分析具體文件 analysiFile(parentdir + '\\' + filename) if os.path.splitext(filename)[1] == '.js': #分析具體文件 analysiFile(parentdir + '\\' + filename) if os.path.splitext(filename)[1] == '.ftl': #分析具體文件 analysiFile(parentdir + '\\' + filename) if os.path.splitext(filename)[1] == '.properties': #分析具體文件 analysiFile(parentdir + '\\' + filename) for item in fileList: print('命中文件:', item) print('共計:', len(fileList))
郵件告警 郵件告警即通過smtp服務將上述匹配出來的異常文件列表,發送給對應系統負責人 詳細代碼如下: import smtplib from email.mime.text import MIMEText from email.header import Header # 第三方 SMTP 服務 mail_host = "smtp.****.com" # 設置服務器 mail_user = "*****@****.com" # 用戶名 mail_pass = "*****" # 口令 sender = '*****@****.com' receivers = ['***@***.com'] # 接收郵件,可設置為你的QQ郵箱或者其他郵箱 message = MIMEText('Python 郵件發送測試...', 'plain', 'utf-8') message['From'] = Header("Python自動化檢查", 'utf-8') message['To'] = Header("系統負責人", 'utf-8') subject = '某系統近2個月版本內網域名檢查結果' message['Subject'] = Header(subject, 'utf-8') try: smtpObj = smtplib.SMTP() smtpObj.connect(mail_host, 25) # 25 為 SMTP 端口號 smtpObj.login(mail_user, mail_pass) smtpObj.sendmail(sender, receivers, message.as_string()) print "郵件發送成功" except smtplib.SMTPException: print "Error: 無法發送郵件"
至此,該項目所需要的所有模塊均已開發完畢,最后只需要根據自己的實際需求將上述各個模塊組合在一起運行即可
由于本人是python初學者,代碼基本是按照順序執行的方式進行設計的,以能實現最終目的為主,為對代碼結構、性能等合理性做出特別考慮
最后利用nohup命令,實現最終腳本的后臺運行
看完上述內容,是不是對如何通過Python掃描代碼關鍵字并進行預警有進一步的了解,如果還想學習更多內容,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。