美文网首页Jenkins奇技淫巧Android开发经验谈Android开发
Jenkins奇技淫巧 — Python发送邮件和上传蒲公英(A

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

作者: 拔萝卜占坑 | 来源:发表于2019-05-04 19:59 被阅读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()
    

    相关文章

      网友评论

        本文标题:Jenkins奇技淫巧 — Python发送邮件和上传蒲公英(A

        本文链接:https://www.haomeiwen.com/subject/iqdfoqtx.html