Jenkins奇技淫巧 — Python傳送郵件和上傳蒲公英(Android自動化構建)
Jenkins奇技淫巧 — 環境配置篇(Android自動化構建)
Jenkins奇技淫巧 — 引數化構建篇(Android自動化構建)
Jenkins奇技淫巧 — 第一次實戰篇(Android自動化構建)
Jenkins奇技淫巧 — 樂固,多渠道打包篇(Android自動化構建)
Jenkins奇技淫巧 — 節點配置篇
Jenkins奇技淫巧 — ftp檔案上傳篇
Jenkins奇技淫巧 — 任務型別篇(比如流水線任務)
簡介
Jenkins奇技淫巧 — 傳送郵件篇 這篇檔案講解了利用Jenkins傳送郵件給開發人員,透過郵件外掛定製我們需要傳送的郵件內容。除了這種方式外,我們可以通過Python在任務構建成功或者失敗的時候傳送郵件給相關人員。
當應用構建好了,可能需要上傳到特定平臺,伺服器等,供相關人員下載使用。這裡我以上傳蒲公英為例,後面會講解其它的上傳方式。
上傳蒲公英
def uploadPgyer(self, path, platform, msg): # ----------------上傳蒲公英--------------- print('-------------start upload pgyer------------') # 蒲公英上傳地址 url = 'https://www.pgyer.com/apiv2/app/upload' # 列印引數 print ('path = %s,platformService = %s,msg = %s'%(path,platform,msg)) # 為真時的結果 if 判斷條件 else 為假時的結果(注意,沒有冒號)類似 ?: platform_des = '測試環境' if(platform == ANDROID_TEST)else '正式環境' # 描述資訊 des = platform_des +','+ msg # 蒲公英上傳引數 pgyer_params = { "uKey": (None, "自己的蒲公英key"), "_api_key": (None, "自己的蒲公英api key"), "file":('app-online-release.apk',open(path,'rb'),'application/x-zip-compressed'), "buildUpdateDescription": (None, des) } # 傳送請求,上傳蒲公英 response = requests.post(url, files=pgyer_params) # 獲取請求返回引數 json_data = response.json() print(json_data) # ----------------開始組裝傳送郵件所需的資料--------------- data_obj = json_data.get('data') url_key =json_data.get('data').get('buildShortcutUrl') shortcut_url = 'https://www.pgyer.com/'+url_key app_code_url = json_data.get('data').get('buildQRCodeURL') build_version = data_obj.get('buildVersion') build_build_version = data_obj.get('buildBuildVersion') print('shortcutUrl = %s,appQRCodeURL = %s'%(shortcut_url,app_code_url)) print('=================upload pgyer success!!! =================') # 最近20條提交日誌 log_20_cmd = 'git log -10 --pretty=format:%h--%s--%an--%cr --no-merges' popen = subprocess.Popen(log_20_cmd, stdout=subprocess.PIPE, shell=True) git_str = popen.stdout.read() git_commit_msg = str(git_str, encoding='utf-8') # 處理便籤 format_git_commit_msg = git_commit_msg.replace('\n','<br/>') print('=================start send emails !!!================') email_content = """ <p>hi all:</p> <p>安卓最新測試包。</p> <p> 蒲公英版本號:%s</p> <p> 版本:%s, platform_des : %s </p> <p><a href=%s>詳情頁</a></p> <p> 二維碼:</p> <p><img src=%s></p> <p>git最近10條提交日誌,<b>格式:簡短hash--commitMsg--anthor--time</b></p> <p>%s</p> """%(build_build_version, build_version, platform_des, shortcut_url, app_code_url, format_git_commit_msg) sender = EmailSender() sender.send(email_content) print('=================complete package work!!!================')
傳送郵件
def __init__(self): self.user = '自己的郵箱帳號' self.passwd = '郵箱密碼(像163郵箱,使用客戶端授權密碼)' self.to_list = ['收件人郵箱1','收件人郵箱2'] # 抄送列表 self.cc_list = [] self.tag = "安卓應用構建郵件(本郵件是程式自動下發的,請勿回覆!)" self.path = None # 傳送郵件 def send(self, content): try: server = smtplib.SMTP_SSL("smtp.163.com",port=465) server.login(self.user,self.passwd) server.sendmail("<%s>"%self.user, self.to_list, self.build_email(content)) server.close() print("============send email successful!!!===========") except Exception as e: print("============send email failed %s!!!============"%e) #構造郵件內容 def build_email(self, content): attach = MIMEMultipart() #新增郵件內容 #txt = MIMEText(self.content, 'plain', 'utf-8') txt = MIMEText(content, 'html', 'utf-8') attach.attach(txt) if self.tag is not None: # 主題,最上面的一行 attach["Subject"] = self.tag if self.user is not None: # 顯示在發件人 attach['From'] = formataddr(["安卓組", self.user]) if self.to_list: # 收件人列表 attach["To"] = ";".join(self.to_list) if self.cc_list: # 抄送列表 attach["Cc"] = ";".join(self.cc_list) if self.doc: # 估計任何檔案都可以用base64,比如rar等 name = os.path.basename(self.doc) f = open(self.doc,'rb') doc = MIMEText(f.read(), "base64", "gb2312") doc["Content-Type"] = 'application/octet-stream' doc["Content-Disposition"] = 'attachment; filename="'+name+'"' attach.attach(doc) f.close() return attach.as_string()