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

需要准备

  • 一个熟悉的 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,新建一个任务,如下图:

《Gradle第16课:与 Git 和 Jenkins 的结合使用》 enter image description here

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

《Gradle第16课:与 Git 和 Jenkins 的结合使用》 enter image description here

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

《Gradle第16课:与 Git 和 Jenkins 的结合使用》 enter image description here

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

《Gradle第16课:与 Git 和 Jenkins 的结合使用》 enter image description here

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

《Gradle第16课:与 Git 和 Jenkins 的结合使用》 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"
            }
        }
    }
}

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

《Gradle第16课:与 Git 和 Jenkins 的结合使用》 enter image description here

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

gradle -Drelease_dir=/Users/wangqiuying/Documents/release_dir uploadArchives

《Gradle第16课:与 Git 和 Jenkins 的结合使用》 enter image description here

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

《Gradle第16课:与 Git 和 Jenkins 的结合使用》 enter image description here

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

小结

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

    原文作者:米饭超人
    原文地址: https://www.jianshu.com/p/0010abf4ea7b
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞