Jenkins奇技淫巧 — Python发送邮件和上传蒲公英(A
2019-05-04 本文已影响10人
拔萝卜占坑
Jenkins奇技淫巧 — 安装篇(mac)
Jenkins奇技淫巧 — 配置篇
Jenkins奇技淫巧 — 安全篇
Jenkins奇技淫巧 — 发送邮件篇
Jenkins奇技淫巧 — 全局变量篇
Jenkins奇技淫巧 — 新建任务篇
Jenkins奇技淫巧 — 插件篇
Jenkins奇技淫巧 — 问题篇
Jenkins奇技淫巧 — 命令篇
Jenkins奇技淫巧 — 环境配置篇(Android自动化构建)
Jenkins奇技淫巧 — 参数化构建篇(Android自动化构建)
Jenkins奇技淫巧 — 第一次实战篇(Android自动化构建)
Jenkins奇技淫巧 — Python打包篇(Android自动化构建)
Jenkins奇技淫巧 — Python发送邮件和上传蒲公英(Android自动化构建)
Jenkins奇技淫巧 — 乐固,多渠道打包篇(Android自动化构建)
Jenkins奇技淫巧 — 节点管理篇
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()