zoukankan      html  css  js  c++  java
  • 使用Jenkins+Blue Ocean 持续构建自动化部署之安卓源码打包、测试、邮件通知

    什么是BlueOcean?

    BlueOcean重新考虑了Jenkins的用户体验。BlueOcean由Jenkins Pipeline设计,但仍然兼容自由式工作,减少了团队成员的混乱,增加了清晰度。

    • 连续交付(CD)Pipeline的复杂可视化,允许快速和直观地了解Pipeline的状态。
    • Pipeline编辑器通过引导用户直观和可视化的过程创建Pipeline,使创建Pipeline平易近人。
    • 个性化,以适应团队每个成员的角色需求。
    • 需要干预和/或出现问题时确定精度。BlueOcean显示了Pipeline需要注意的地方,便于异常处理和提高生产率。
    • 用于分支和拉取请求的本地集成可以在GitHub和Bitbucket中与其他人进行代码协作时最大限度提高开发人员的生产力。

    BlueOceans使用

    依赖插件

    该插件安装完成后,在所要构建的任务中就会出现BlueOcean选择,该项目是基于上篇博客Pipeline项目,传送门:https://www.cnblogs.com/feng0815/p/14287056.html


    点击打开 Blue Ocean

    运行

    实时展示进度

    并行运行

    以上的运行都是串行的,必须上个流程结束才能运行下个流程,这样就会造成执行效率较低。
    对于没相互依赖的流程,我们可以进行并行运行
    修改执行脚本

    pipeline{
        agent {
            label 'master'
        }
    
        stages{
            stage('获取源码') {
                parallel {
                    stage('安卓程序源码') {
                        steps {
                            sh 'mkdir -p AndroidSampleApp'
                            dir("AndroidSampleApp"){
                                git branch:'master', url:'https://gitee.com/sfboy/AndroidSampleApp.git'
                            }
                        }
                    }
    
                    stage('自动测试程序源码') {
                        steps {
                            sh 'mkdir -p iAppBVT_Python'
                            dir("iAppBVT_Python"){
                                git branch:'master', url:'https://gitee.com/sfboy/iAppBVT_Python.git'
                            }
                        }
                    }
                }
            }
    
            stage('安卓编译打包') {
                steps {
                    sh '''
                        . ~/.bash_profile
                        cd AndroidSampleApp
                        sh gradlew clean assembleDebug
                    '''
                }
            }
    
            stage('测试与发布') {
                parallel {
                    stage('发布测试包') {
                        steps {
                            archiveArtifacts artifacts: 'AndroidSampleApp/app/build/outputs/apk/debug/app-debug.apk'
                        }
                    }
    
                    stage('自动化'){
                        stages{
                            stage('部署') {
                                steps {
                                    sh '''
                                        . ~/.bash_profile
                                        cd AndroidSampleApp
                                        apk=app/build/outputs/apk/debug/app-debug.apk
                                        {
                                            #try: 卸载现有的安卓app
                                            adb uninstall com.appsflyer.androidsampleapp
                                        } || {
                                            #catch
                                            echo 'no com.appsflyer.androidsampleapp package'
                                        }
                                        sleep 5
    
                                        #安装安卓app
                                        adb install $apk
                                    '''
                                }
                            }
    
                            stage('自动测试') {
                                steps {
                                    sh '''
                                        . ~/.bash_profile
    
                                        cd iAppBVT_Python
    
                                        #更新python依赖库
                                        pip3 install -r requirements.txt
    
                                        #运行自动化测试
                                        pytest -sv test/bvt_test.py --tc-file iAppBVT_Python.json --tc-format json
                                    '''
                                }
                            }
                        }
                    }
                }
            }
    
            stage('通知邮件') {
                steps {
                    emailext body: '$DEFAULT_CONTENT', recipientProviders: [[$class: 'RequesterRecipientProvider']], subject: '$DEFAULT_SUBJECT'
                }
            }
        }
    }
    

    如果您觉得本篇文章还不错,欢迎点赞,转发分享(转发请注明出处),感谢~~
  • 相关阅读:
    [转载]注解
    Spring可扩展的XML Schema机制 NamespaceHandlerSupport
    jvm中的年轻代 老年代 持久代 gc ----------转载
    反射原理
    舍入误差
    mysql突然宕机后事务如何处理?
    redis为什么设计成单线程并且还这么快?
    mysql架构学习
    用户级线程和内核级线程的区别
    G1垃圾收集器
  • 原文地址:https://www.cnblogs.com/feng0815/p/14287949.html
Copyright © 2011-2022 走看看