需要准备
- 一个熟悉的 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 hereGradle 与 Jenkins 的结合非常的简单,到此我们就完成了 Jenkins 调用 Gradle 来构建 login 工程了。大家可以试着完成 Jenkins 调用 Gradle 从 git 仓库中获取代码,并建构工程.
小结
在本章中我们完成了 Gradle 与 Git 的结合使用、以及 Jenkins 调用 Gradle 来完成 login 工程的构建。
网友评论