美文网首页
Gradle(groovy)中执行Git命令,Jenkins构建

Gradle(groovy)中执行Git命令,Jenkins构建

作者: 炸山哥 | 来源:发表于2020-07-23 16:39 被阅读0次

    首先来说一下为什么会有这个操作,也就是应用的场景。
    我们项目里面有用AndResGuard做资源压缩,为了保证每个版本压缩后的资源能保持不变(如果你用了热修复资源变了打补丁包就直接崩了),每次混淆前都要传入上一版本的resource_mapping,但我们的项目每次都是在Jenkins上面完成打包的,这就导致resource_mapping文件是在Jenkins上面生成的,我们需要在Jenkins打包完成后执行Git命令把resuource_mapping文件提交到我们的Git仓库,那每次构建完成就可以直接自动更新resource_mapping文件了。
    这里可能有点坑如果你也是用的AndResGuard可以看下我另外的文章
    AndResGuard keepmapping 的一个坑
    1.你的Jenkins上面一定要安装了GitPlugin
    2.在app目录现在创建一个resource_mapping.txt,然后提交到仓库。
    3.然后在app/build.gradle里面加上gitTadk,代码如下:

    task gitTask() {
        doLast {
            println "git start"
            ext.env = System.getenv()
            def curBranchName = env.GIT_LOCAL_BRANCH
            def originBranchName = env.GIT_BRANCH
            def originUrl = env.GIT_URL
            println "curBranchName:" + curBranchName
            println "originBranchName:" + originBranchName
            println "originUrl:" + originUrl
            //这个是app目录下
            def mappingFile = file("./resource_mapping.txt")
            println "path:${mappingFile}"
    
            if (mappingFile.exists()) {
                println "mappingFile isEmpty:" + mappingFile.text.isEmpty()
            } else {
                println "mappingFile not exists"
            }
            
            //定义Git语句
            def statusPro = "git status".execute()
            //打印Git命令的结果,一开始就是不知道有这个,执行不成功也没有日志输出,走了很多弯路
            println "git status:\n" + statusPro.inputStream.text
            statusPro.waitFor()
    
            def pullPro = "git pull".execute()
            println "git pull:\n" + pullPro.inputStream.text
            pullPro.waitFor()
    
            def addPro = "git add ${mappingFile.getAbsolutePath()}".execute()
            println "git add:\n" + addPro.inputStream.text
            addPro.waitFor()
    
            def commitPro = 'git commit -m resource_mapping'.execute()
            println "git commit:\n" + commitPro.inputStream.text
            commitPro.waitFor()
    
            def pushPro = "git push origin ${curBranchName}".execute()
            println "git push:\n" + pushPro.inputStream.text
            pushPro.waitFor()
    
    
            def statusPro2 = "git status".execute()
            println "git status:" + statusPro2.inputStream.text
            statusPro2.waitFor()
    
            println "git end"
        }
    }
    

    4.最后记得执行这个Task

        task ->
            if (task.name == 'assembleRelease') {
                task.finalizedBy apkResGuard
                //可能你还有其它task,总之把gitTask放到最后就行了。
                apkResGuard.finalizedBy gitTask
            }
    }
    

    这样就大功告成了,最主要的还是打日志那几句,有日志都好说,至少知道是什么原因,然后对着改就行了。不然真的无从下手。

    相关文章

      网友评论

          本文标题:Gradle(groovy)中执行Git命令,Jenkins构建

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