Jenkins奇技淫巧Android开发经验谈Android开发

Jenkins奇技淫巧 — Python发送邮件和上传蒲公英(A

2019-05-04  本文已影响10人  拔萝卜占坑
\color{blue}{Jenkins系列文章还在更新和完善中,有什么疑问欢迎留言}

\color{blue}{目录}

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()
上一篇下一篇

猜你喜欢

热点阅读