博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
hudson+gradle+git+maven(非必选)持续集成 (二)
阅读量:5838 次
发布时间:2019-06-18

本文共 6340 字,大约阅读时间需要 21 分钟。

第二集 hudson+gradle+git+maven(非必选)持续集成编译,打包,部署到线上环境集成

前言

在持续集成中,讲解了关于如果编译,打包,发布jar包到maven私服。在下面一集中,也就是第二集中,开始讲解

如何持续集成可运行的服务包到测试和正式环境。

实战

第一步 准备工作

进入hudson Jobs Status 主页,如图所示:

图片描述

这里我以用户登陆服务作为例子进行操作讲解,如图所示:

图片描述

点击Console -> 再点击左侧菜单的Configure Job 进入Job Configurations主页

图1

图片描述

图2

图片描述

图3

图片描述

接下来也就是重点了,结合脚本一一讲解整个服务包(tar包)如何生成并且上传线上服务器

第二步 具体参数配置

[特别注意:下面配置的参数前面4个需要结合最后贴出的gradle脚本一起使用,参数是传递给gradle脚本使用的。]

1.配置代码的git分支参数

图片描述

2.配置打包存放的目录参数

图片描述

3.配置当前打包的版本参数

图片描述

4.设置打包时是否要加入第三方jar包

图片描述

5.设置需要打包的类型

图片描述

6.设置需要部署的服务器参数

图片描述

第三步 配置git仓库最新代码的shell脚本

配置bulid的脚本 这里的脚本主要是获取git仓库中的最新代码,操作如下:

图片描述

第四步 配置gradle打包的脚本文件

图片描述

第五步 配置读取打包类型和执行部署shell,python脚本

图片描述

[补充:具体如何调用python以及如何编写python这里就不贴出来了,可以去问Google哦]

最后 gradle 登场

gradle脚本代码,供参考哦

apply plugin: 'java'apply plugin: 'eclipse'version = '1.0'// 定义发布包的路径def releaseDir = System.properties['deployToDir']def gitBranch = System.properties['gitBranch'];def myZipName = gitBranch.replace("/","-") + "-" + new Date().getTime();def bigVer = System.properties['bigVer'];def isCommonLibs = System.properties['commonLibs'];// 设置 Java 源码所在目录sourceSets.main.resources.srcDirs 'config'// 设置 JDK 版本sourceCompatibility = 1.8targetCompatibility = 1.8// 设置编译使用utf-8编码tasks.withType(JavaCompile) {    options.encoding = "UTF-8"}//maven仓库地址repositories {    maven {        url "http://ip:8081/nexus/content/groups/public/"    }}// 依赖jar包dependencies {    compile "commons-logging:commons-logging:1.1.1",             "org.javassist:javassist:3.20.0-GA",              "log4j:log4j:1.2.15",            "org.springframework:spring-core:4.2.1.RELEASE",            "org.springframework:spring-context:4.2.1.RELEASE",            "org.slf4j:slf4j-api:1.7.6",            "org.slf4j:slf4j-log4j12:1.6.1",            "com.fs.fishsaying-service-api:fishsaying-service-api:0.0.2",            "com.google.guava:guava:18.0",            "com.fs.common:fs-common-service:0.0.1",            "commons-io:commons-io:2.4",            "org.jboss.resteasy:resteasy-netty4:3.0.12.Final",            "org.jboss.resteasy:resteasy-guice:3.0.12.Final",            "org.apache.commons:commons-lang3:3.4",            "com.fs.fs-common-db:fs-common-db:0.0.1",            "com.eclipse.java:javax-persistence:2.1.0",            "org.msgpack:msgpack:0.6.12",            "redis.clients:jedis:2.7.3",            "mysql:mysql-connector-java:5.1.36",            "com.eclipse.java:eclipselink:2.6.0",            "org.jboss.resteasy:resteasy-jackson-provider:2.3.5.Final",            "io.netty:netty-all:4.0.31.Final",            "com.fishsaying:common-pool3:0.0.1",            "com.google.code.gson:gson:2.2.2",            "com.fasterxml.jackson.core:jackson-annotations:2.6.3",             "com.fasterxml.jackson.core:jackson-core:2.6.3",            "org.mongodb:mongodb-driver:3.0.4",            "org.elasticsearch:elasticsearch:2.0.0",            "com.fasterxml.jackson.core:jackson-databind:2.5.3",            "com.aliyun.oss:oss:2.0.5",            "sun.misc.BASE64Decoder:BASE64Decoder:1.0",            "org.jboss.resteasy:resteasy-multipart-provider:2.3.1.GA",            "net.sf.oval:oval:1.85",            "com.aliyun.taobao:taobao-sdk:0.0.1",            "com.aliyun.trance:aliyun-sdk:0.0.1",            "com.alibaba:fastjson:1.2.4",            "javax.mail:mail:1.4.7",            "cn.jpush.api:jpush-client:3.2.8",            "org.apache.httpcomponents:httpclient:4.5.1",            "com.fish.saying:fishsaying-log-sdk:2.0.0",            "org.quartz-scheduler:quartz:2.2.1",            "org.quartz-scheduler:quartz-jobs:2.2.1"    compile ("com.alibaba:dubbo:2.8.4") {        exclude group:'org.springframework', module: 'spring-aop'    }      compile ("com.alibaba:dubbo:2.8.4") {        exclude group:'org.springframework', module: 'spring-expression'    }      compile ("com.alibaba:dubbo:2.8.4") {        exclude group:'org.springframework', module: 'spring-web'    }      compile ("com.alibaba:dubbo:2.8.4") {        exclude group:'org.springframework', module: 'spring-beans'    }           compile ("com.alibaba:dubbo:2.8.4") {        exclude group:'org.springframework', module: 'spring-core'    }           compile ("com.alibaba:dubbo:2.8.4") {        exclude group:'org.springframework', module: 'spring-context'    }      compile ("com.alibaba:dubbo:2.8.4") {        exclude group:'org.apache.httpcomponents', module: 'httpcore'    }    compile ("com.alibaba:dubbo:2.5.3") {        exclude group:'org.springframework', module: 'spring'    }     compile ("com.alibaba:dubbo:2.5.3") {        exclude group:'org.jboss.netty', module: 'netty'    }     compile ("org.apache.zookeeper:zookeeper:3.4.5") {        exclude group:'org.jboss.netty', module: 'netty'    }         compile ("com.101tec:zkclient:0.6") {        exclude group:'com.101tec', module: 'netty'    }         testCompile "junit:junit:3.8.1"}jar {    exclude("app.properties","appContext.xml"            ,"deploy.properties","deploy.properties.temp"            ,"log4j.properties","provider.xml")    manifest {        attributes 'Implementation-Title': '鱼说应用', 'Implementation-Version': version        attributes 'Main-Class': 'com.fs.FishApp'    }}uploadArchives {    repositories {        flatDir {            dirs releaseDir+"fs_libs"        }    }}uploadArchives.doFirst {    def destination = file(releaseDir)    if(destination.exists()){        destination.deleteDir();    }}//gradle任务task copyCommonLibs(type: Copy) {    dependsOn uploadArchives    from configurations.compile    into releaseDir+"libs"    exclude 'spring-2.5.6*.jar'}task deleteOtherLibs(type: Copy) {    dependsOn copyCommonLibs    delete fileTree(dir: releaseDir+"libs"    , exclude: ['fs-common-service-0.0.1.jar','fishsaying-service-api-0.0.2.jar','fs-common-db-0.0.1.jar'])}// 拷贝配置文件task copyAppConfig(type: Copy) {    dependsOn deleteOtherLibs    from sourceSets.main.resources.srcDirs    into releaseDir+"config"    exclude 'deploy.properties','META-INF','appContext.xml'}// 拷贝启动相关的shelltask copyShell(type: Copy) {    dependsOn copyAppConfig    from project.projectDir    into releaseDir    include '*.sh'}copyShell << {    def destination = file(releaseDir+"logs/")    destination.mkdirs();}// 压缩任务task zipApp(type: Tar) {//Zip    dependsOn copyShell    baseName = "fs-login-"+myZipName    from releaseDir}deleteOtherLibs.onlyIf {  isCommonLibs.equals("false")}

持续集成部署就是这样的一套操作流程,当然还有很多的要完善的地方,这里只是讲解了如何搭建这套工具平台。接下来会不断优化并且会加入服务端自动化单元测试,敬请期待第三集哈...thx ^_^

转载地址:http://fkncx.baihongyu.com/

你可能感兴趣的文章
java中回调函数以及关于包装类的Demo
查看>>
maven异常:missing artifact jdk.tools:jar:1.6
查看>>
终端安全求生指南(五)-——日志管理
查看>>
Nginx 使用 openssl 的自签名证书
查看>>
创业维艰、守成不易
查看>>
PHP环境安装套件:快速安装LAMP环境
查看>>
CSS3
查看>>
ul下的li浮动,如何是ul有li的高度
查看>>
C++ primer plus
查看>>
python mysqlDB
查看>>
UVALive 3942 Remember the Word Tire+DP
查看>>
从微软的DBML文件中我们能学到什么(它告诉了我们什么是微软的重中之重)~目录...
查看>>
被需求搞的一塌糊涂,怎么办?
查看>>
c_数据结构_队的实现
查看>>
jquery 选择器总结
查看>>
Qt设置背景图片
查看>>
【阿里云文档】常用文档整理
查看>>
java中的Volatile关键字
查看>>
前端自定义图标
查看>>
实验二
查看>>