美文网首页
Gradle第16课:与 Git 和 Jenkins 的结合使用

Gradle第16课:与 Git 和 Jenkins 的结合使用

作者: 米饭超人 | 来源:发表于2018-08-28 11:09 被阅读53次

    需要准备

    • 一个熟悉的 IDE 开发工具
    • JDK 7及以上
    • Gradle 3.2以上
    • Docker 17
    • Git 2.13
    • Jenkins

    与 Git 的结合使用

    Git 是一个开源的分布式版本控制系统,可以有效、高速的处理从很小到非常大的项目版本管理。所以现在基本上很多的公司都在使用 Git 进行项目的代码管理,而 Git 的代码 clone 可以通过命令行现实现,不过今天我在这里介绍的是一种通过 Gradle 代码实现的,它不仅能进行代码的 clone,还能显示出最后提交的日志信息,方便我们构建工程的时候知道最近代码仓库中有哪些改动。其具体的代码实现如下:

    import org.ajoberstar.grgit.*
    
    // gradle-git插件
    buildscript {
      repositories {
        mavenCentral()
      }
      dependencies {
        classpath 'org.ajoberstar:gradle-git:1.1.0'
      }
    }
    
    // 克隆代码
    def cloneToDir = System.properties['cloneToDir'];
    def destination = file(cloneToDir)
    if(destination.exists()){
        destination.deleteDir();
    }
    
    def gitBranch = System.properties['gitBranch'];
    def logNums = System.properties['logNums'];
    
    ext.grgit = Grgit.clone(dir: destination, uri: 'ssh://builder@192.168.3.181:29418/login.git', refToCheckout:'remotes/origin/'+gitBranch)
    task cloneGitRepo << {
        if(!gitBranch.equals("master")){
            // checkout出指定的分支
            grgit.checkout(branch:gitBranch,orphan: true)
        }
    
        grgit.pull()
    
        //输出近100条提交日志
        def history = grgit.log(maxCommits: logNums.toInteger())
        history.each{commit->
            println "============"+commit.committer.name+"======="+new Date(1000L*commit.time).format('yyyy-MM-dd HH:mm:ss')+"================"
            println commit.fullMessage
        }
    }
    

    我们在代码中使用的是ssh方式进行git代码仓库的clone,所以需要先在gitlab后台添加生成的密钥,并且保证在命令下能直接使用git命令进行clone成功。

    代码中会接受三个参数:cloneToDir、gitBranch 和 logNums。它们具体的说明如下:

    • cloneToDir 指定代码需要被clone到的目录
    • gitBranch 指定需要checkout的分支
    • logNums 显示多少条最近的提交日志信息

    当然我们可以通过命令行传递参数(参数用-D方式传递)的方式来执行,命令如下:

    gradle -DcloneToDir=/Users/bill/Documents/gitdir -DgitBranch=develop -DlogNums=10 cloneGitRepo -b ./build.gradle
    

    也可以通过 Jenkins 可视化的操作执行,接下来我们详细介绍 Gradle 如何与 Jenkins 结合使用的。

    与 Jenkins 的结合使用

    Jenkins 是一个用 Java 编写的开源的持续集成工具,它提供了软件开发的持续集成服务,支持软件配置管理( SCM )工具(如 Subversion、Git 等),可以执行基于 Apache Ant、Apache Maven 和 Gradle 的项目,以及任意的 Shell 脚本和 Windows 批处理命令。Jenkins 的更多学习请参照官网,本章不过多介绍它的使用。接下来我们一步一步使用 Jenkins 来调用 Gradle 完成之前项目的构建。

    首先打开 jenkins,新建一个任务,如下图:

    enter image description here

    输入任务名称,比如“ login 构建”,然后我们选择“构建一个自由风格的软件项目”,如下图:

    enter image description here

    接着我们添加一个参数,名称叫“ release_dir ”,用来指定发布到的目录地址,如下图:

    enter image description here

    然后我们选择“增加构建步聚”,在其中选择“ Invoke Gradle script ”项,如下图:

    enter image description here

    在这一步中,指定我们需要执行的任务( Tasks ),并在系统属性( System properties )一栏指定我们的参数,最后指定我们的工程根目录地址( Root Build script ),如下图:

    enter image description here

    在执行 login 构建任务之前,我们需要修改下根工程下的 build.gradle 文件,在最上面添加一行代码来接收 Jenkins 传递过来的参数,并修改 uploadArchives 任务中的发布地址为release_dir + "/release_dir",代码如下:

    def release_dir = System.properties['release_dir'];
    
    ...省略...
    
    subprojects{
        uploadArchives {
            repositories {
                flatDir {
                    dirs release_dir + "/release_dir"
                }
            }
        }
    }
    

    点击构建按钮执行任务,如下图:

    enter image description here

    观察 Jenkins 调用 Gradle 构建的过程,其中我们可以看到 Jenkins 实际上是使用 Gradle 命令来完成构建的,具体命令如下:

    gradle -Drelease_dir=/Users/wangqiuying/Documents/release_dir uploadArchives
    
    enter image description here

    构建完成后,工程的 jar 包就发布到我们指定的 release_dir 目录下了,如下图:

    enter image description here

    Gradle 与 Jenkins 的结合非常的简单,到此我们就完成了 Jenkins 调用 Gradle 来构建 login 工程了。大家可以试着完成 Jenkins 调用 Gradle 从 git 仓库中获取代码,并建构工程.

    小结

    在本章中我们完成了 Gradle 与 Git 的结合使用、以及 Jenkins 调用 Gradle 来完成 login 工程的构建。

    相关文章

      网友评论

          本文标题:Gradle第16课:与 Git 和 Jenkins 的结合使用

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