YDL Android Jenkins 自動打包上傳蒲公英并推送釘釘

要求

自動化完成Android應(yīng)用打包五督、上傳蒲公英并推送釘釘群通知任務(wù)

準(zhǔn)備

Jenkins

下載插件

Manage Jenkins --> Manage Plugins -->搜索下載

  • Upload to pgyer :蒲公英上傳插件
  • Groovy Postbuild :Groovy后置任務(wù)插件
添加Gradle 版本
image

蒲公英

獲取ApiKey

釘釘

創(chuàng)建群機(jī)器人,選擇自定義

image

復(fù)制webhook地址


image

創(chuàng)建打包任務(wù)

  • 打開Jenkins祭阀,選擇New Item傻工,填入任務(wù)名稱,選擇Freestyle project


    image
  • 點(diǎn)擊Add Parameter咙冗,添加構(gòu)建參數(shù)


    image
  • Name填入:BUILD_TYPE


    image
  • 點(diǎn)擊Git Parameter 沾歪,添加Git 參數(shù)


    image
    • Name填入:VERSION
image
  • 點(diǎn)擊Source Code Management,選擇Git 源碼管理方式雾消,并填入項目地址和用戶名灾搏,Branches to build 填入${VERSION}
image
  • 點(diǎn)擊Add Build Step,添加 Gradle script 打包編譯腳本
image
  • 選擇Gradle Version立润,并填入Gradle腳本
image
```gradle
app:clean
app:assemble${BUILD_TYPE}
```
  • image
  • 點(diǎn)擊add post-build actions狂窑,選擇 upload to pgyer with apiV2


    image
    • 填入蒲公英ApiKey,設(shè)置scandir

      ${WORKSPACE}/VestAppWrapper/app/build/outputs/apk/$BUILD_TYPE
      
    • image
  • 點(diǎn)擊add post-build actions桑腮,選擇Groovy Postbuild

image
  • 填入Groovy腳本【注意替換釘釘WebHook鏈接】

    import java.text.SimpleDateFormat
    
    //構(gòu)建結(jié)果
    def buildResult = manager. getResult()
    //構(gòu)建用戶
    def buildUser= manager.getEnvVariable("BUILD_USER")
    //項目名稱
    def jobName= manager.getEnvVariable("JOB_NAME")
    //構(gòu)建結(jié)果頁面
    def buildUrl= manager.getEnvVariable("BUILD_URL")
    //GIT分支
    def gitBranch= manager.getEnvVariable("GIT_BRANCH")
    
    //構(gòu)建環(huán)境
    def buildEnv= manager.getEnvVariable("BUILD_ENV")
    //構(gòu)建類型
    def buildType= manager.getEnvVariable("BUILD_TYPE")
    //安裝密碼
    def downloadPwd= "123456"
    
    manager.listener.logger.println("項目名稱:"+ jobName)
    manager.listener.logger.println("構(gòu)建用戶:"+buildUser)
    manager.listener.logger.println("構(gòu)建分支:"+gitBranch)
    manager.listener.logger.println("構(gòu)建環(huán)境:"+ buildEnv)
    manager.listener.logger.println("構(gòu)建類型:"+ buildType)
    manager.listener.logger.println("構(gòu)建結(jié)果:"+buildResult)
    
    if(buildResult == "SUCCESS"){
        //解析蒲公英上傳返回數(shù)據(jù)
        //apk下載地址
        apkDownloadUrl = "https://www.pgyer.com/"+ manager.getEnvVariable("buildShortcutUrl")
        //apk二維碼
        apkQrCode = manager.getEnvVariable("appQRCodeURL")
    
        manager.listener.logger.println("apk下載地址"+apkDownloadUrl)
        manager.listener.logger.println("apk二維碼地址:"+apkQrCode)
    
        dingding("標(biāo)題","### 【"+jobName+"】構(gòu)建成功" +
                "\n\n構(gòu)建版本:"+gitBranch+
                "\n\n構(gòu)建環(huán)境:"+buildEnv+
                "\n\n構(gòu)建類型:"+buildType+
                "\n\n下載地址:\n[下載地址]("+apkDownloadUrl+")" +
                "\n\n安裝密碼:"+downloadPwd+
                "\n\n![]("+apkQrCode+")"+
                "\n\n構(gòu)建用戶:"+buildUser+
                "\n\n構(gòu)建時間:"+getNowTime()+
                "\n\n查看詳情:[項目地址]("+buildUrl+")"
        )
    }else if(buildResult == "ABORTED"){
        dingding("標(biāo)題","### 【"+jobName+"】構(gòu)建被終止" +
                "\n\n構(gòu)建版本:"+gitBranch+
                "\n\n構(gòu)建用戶:"+buildUser+
                "\n\n構(gòu)建時間:"+getNowTime()+
                "\n\n查看詳情:[項目地址]("+buildUrl+")"
        )
    }else{
        dingding("標(biāo)題","### 【"+jobName+"】構(gòu)建失敗" +
                "\n\n構(gòu)建版本:"+gitBranch+
                "\n\n構(gòu)建用戶:"+buildUser+
                "\n\n構(gòu)建時間:"+getNowTime()+
                "\n\n查看詳情:[項目地址]("+buildUrl+")"
        )
    }
    
    
    //發(fā)送釘釘消息
    def dingding(p_title,p_text){
        manager.listener.logger.println("--------------------------"+p_title+p_text)
        def json= new groovy.json.JsonBuilder()
        json {
            msgtype "markdown"
            markdown {
                title p_title
                text p_text
            }
            at {
                atMobiles([])
                isAtAll false
            }
        }
    
        manager.listener.logger.println("發(fā)送釘釘數(shù)據(jù):"+json)
    
        def connection = new URL("你的釘釘WebHook鏈接").openConnection()
        connection.setRequestMethod('POST')
        connection.doOutput = true
        connection.setRequestProperty('Content-Type', 'application/json')
    
        def writer = new OutputStreamWriter(connection.outputStream)
        writer.write(json.toString());
        writer.flush()
        writer.close()
        connection.connect()
    
        def respText = connection.content.text
    
        manager.listener.logger.println("釘釘返回結(jié)果:"+respText )
    }
    //獲取當(dāng)前時間
    def getNowTime(){
        def str = "";
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        Calendar lastDate = Calendar.getInstance();
        str = sdf.format(lastDate.getTime());
        return str;
    }
    

效果

image.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末泉哈,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子破讨,更是在濱河造成了極大的恐慌丛晦,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,718評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件提陶,死亡現(xiàn)場離奇詭異烫沙,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)隙笆,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,683評論 3 385
  • 文/潘曉璐 我一進(jìn)店門锌蓄,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人仲器,你說我怎么就攤上這事煤率。” “怎么了乏冀?”我有些...
    開封第一講書人閱讀 158,207評論 0 348
  • 文/不壞的土叔 我叫張陵蝶糯,是天一觀的道長。 經(jīng)常有香客問我辆沦,道長昼捍,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,755評論 1 284
  • 正文 為了忘掉前任肢扯,我火速辦了婚禮妒茬,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘蔚晨。我一直安慰自己乍钻,他們只是感情好肛循,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,862評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著银择,像睡著了一般多糠。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上浩考,一...
    開封第一講書人閱讀 50,050評論 1 291
  • 那天夹孔,我揣著相機(jī)與錄音,去河邊找鬼析孽。 笑死搭伤,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的袜瞬。 我是一名探鬼主播怜俐,決...
    沈念sama閱讀 39,136評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼吞滞!你這毒婦竟也來了佑菩?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,882評論 0 268
  • 序言:老撾萬榮一對情侶失蹤裁赠,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后赴精,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體佩捞,經(jīng)...
    沈念sama閱讀 44,330評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,651評論 2 327
  • 正文 我和宋清朗相戀三年蕾哟,在試婚紗的時候發(fā)現(xiàn)自己被綠了一忱。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,789評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡谭确,死狀恐怖帘营,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情逐哈,我是刑警寧澤芬迄,帶...
    沈念sama閱讀 34,477評論 4 333
  • 正文 年R本政府宣布,位于F島的核電站昂秃,受9級特大地震影響禀梳,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜肠骆,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,135評論 3 317
  • 文/蒙蒙 一算途、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧蚀腿,春花似錦嘴瓤、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,864評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽筛谚。三九已至,卻和暖如春狞贱,著一層夾襖步出監(jiān)牢的瞬間刻获,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,099評論 1 267
  • 我被黑心中介騙來泰國打工瞎嬉, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留蝎毡,地道東北人。 一個月前我還...
    沈念sama閱讀 46,598評論 2 362
  • 正文 我出身青樓氧枣,卻偏偏與公主長得像沐兵,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子便监,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,697評論 2 351

推薦閱讀更多精彩內(nèi)容