摘要:第二集非必選持續(xù)集成編譯打包部署到線上環(huán)境集成前言在持續(xù)集成第一集中講解了關(guān)于如果編譯,打包,發(fā)布包到私服。在下面一集中,也就是第二集中,開(kāi)始講解如何持續(xù)集成可運(yùn)行的服務(wù)包到測(cè)試和正式環(huán)境。
第二集 hudson+gradle+git+maven(非必選)持續(xù)集成編譯,打包,部署到線上環(huán)境集成
前言在持續(xù)集成第一集中,講解了關(guān)于如果編譯,打包,發(fā)布jar包到maven私服。在下面一集中,也就是第二集中,開(kāi)始講解
如何持續(xù)集成可運(yùn)行的服務(wù)包到測(cè)試和正式環(huán)境。
進(jìn)入hudson Jobs Status 主頁(yè),如圖所示:
這里我以用戶登陸服務(wù)作為例子進(jìn)行操作講解,如圖所示:
點(diǎn)擊Console -> 再點(diǎn)擊左側(cè)菜單的Configure Job 進(jìn)入Job Configurations主頁(yè)
圖1
圖2
圖3
接下來(lái)也就是重點(diǎn)了,結(jié)合腳本一一講解整個(gè)服務(wù)包(tar包)如何生成并且上傳線上服務(wù)器
第二步 具體參數(shù)配置[特別注意:下面配置的參數(shù)前面4個(gè)需要結(jié)合最后貼出的gradle腳本一起使用,參數(shù)是傳遞給gradle腳本使用的。]
1.配置代碼的git分支參數(shù)
2.配置打包存放的目錄參數(shù)
3.配置當(dāng)前打包的版本參數(shù)
4.設(shè)置打包時(shí)是否要加入第三方j(luò)ar包
5.設(shè)置需要打包的類型
6.設(shè)置需要部署的服務(wù)器參數(shù)
第三步 配置git倉(cāng)庫(kù)最新代碼的shell腳本配置bulid的腳本 這里的腳本主要是獲取git倉(cāng)庫(kù)中的最新代碼,操作如下:
第四步 配置gradle打包的腳本文件 第五步 配置讀取打包類型和執(zhí)行部署shell,python腳本[補(bǔ)充:具體如何調(diào)用python以及如何編寫(xiě)python這里就不貼出來(lái)了,可以去問(wèn)Google哦]
最后 gradle 登場(chǎng)gradle腳本代碼,供參考哦
apply plugin: "java" apply plugin: "eclipse" version = "1.0" // 定義發(fā)布包的路徑 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"]; // 設(shè)置 Java 源碼所在目錄 sourceSets.main.resources.srcDirs "config" // 設(shè)置 JDK 版本 sourceCompatibility = 1.8 targetCompatibility = 1.8 // 設(shè)置編譯使用utf-8編碼 tasks.withType(JavaCompile) { options.encoding = "UTF-8" } //maven倉(cāng)庫(kù)地址 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": "魚(yú)說(shuō)應(yīng)用", "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任務(wù) 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" } // 拷貝啟動(dòng)相關(guān)的shell task copyShell(type: Copy) { dependsOn copyAppConfig from project.projectDir into releaseDir include "*.sh" } copyShell << { def destination = file(releaseDir+"logs/") destination.mkdirs(); } // 壓縮任務(wù) task zipApp(type: Tar) {//Zip dependsOn copyShell baseName = "fs-login-"+myZipName from releaseDir } deleteOtherLibs.onlyIf { isCommonLibs.equals("false") }
持續(xù)集成部署就是這樣的一套操作流程,當(dāng)然還有很多的要完善的地方,這里只是講解了如何搭建這套工具平臺(tái)。接下來(lái)會(huì)不斷優(yōu)化并且會(huì)加入服務(wù)端自動(dòng)化單元測(cè)試,敬請(qǐng)期待第三集哈...thx ^_^
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/64850.html
摘要:持續(xù)集成正是針對(duì)這一類問(wèn)題的一種軟件開(kāi)發(fā)實(shí)踐。持續(xù)集成的原則業(yè)界普遍認(rèn)同的持續(xù)集成的原則包括需要版本控制軟件保障團(tuán)隊(duì)成員提交的代碼不會(huì)導(dǎo)致集成失敗。 第一集 hudson+gradle+git+maven(非必選)持續(xù)集成編譯,打包,發(fā)布到倉(cāng)庫(kù)集成 前言 什么是持續(xù)集成 隨著軟件開(kāi)發(fā)復(fù)雜度的不斷提高,團(tuán)隊(duì)開(kāi)發(fā)成員間如何更好地協(xié)同工作以確保軟件開(kāi)發(fā)的質(zhì)量已經(jīng)慢慢成為開(kāi)發(fā)過(guò)程中不可回避的...
摘要:本文將使用這些命令搭建一個(gè)持續(xù)集環(huán)境,解決不能聯(lián)網(wǎng)的問(wèn)題來(lái)安裝各種常用插件。總結(jié)通過(guò)本章學(xué)習(xí),你已經(jīng)知道了基于如何在環(huán)境下搭建環(huán)境,并創(chuàng)建一個(gè)項(xiàng)目。以為基礎(chǔ)框架,為數(shù)據(jù)訪問(wèn)層,為權(quán)限授權(quán)層,對(duì)常用數(shù)據(jù)進(jìn)行緩存,基于構(gòu)建的作為前端框架。 回顧:上一文對(duì)Docker常用的命令以羅列的方式做了一個(gè)詳盡的介紹。本文將使用這些命令搭建一個(gè)jenkins持續(xù)集環(huán)境,解決jenkins不能聯(lián)網(wǎng)的問(wèn)題...
摘要:所以一直沒(méi)能把持續(xù)集成搞起來(lái)。后來(lái)接觸到,所以嘗試了一下把持續(xù)集成搭建在上了,通過(guò)下面這幾步就可以實(shí)現(xiàn)項(xiàng)目有新的提交后自己編譯發(fā)布測(cè)試包到上了。 由于本人精力有限,如果內(nèi)容有更新可能無(wú)法及時(shí)更新其他渠道的內(nèi)容,請(qǐng)移步簡(jiǎn)書(shū) 查看文章 由于之前公司項(xiàng)目一直迭代速度很快,幾乎隔幾天就需要發(fā)布測(cè)試包給同事們進(jìn)行測(cè)試,所以希望把打包Apk這個(gè)工作交給機(jī)器來(lái)做,然后就嘗試了幾種持續(xù)集成的方案,最常...
摘要:軟件架構(gòu)師需要掌握的開(kāi)源工具的是當(dāng)前敏捷開(kāi)發(fā)領(lǐng)域最重要的工具之一。主要用于持續(xù)自動(dòng)地構(gòu)建測(cè)試軟件項(xiàng)目,如與。監(jiān)控一些定時(shí)執(zhí)行的任務(wù)。是應(yīng)用程序最好的軟件測(cè)試框架之一。是一種自由和開(kāi)放源碼的類操作系統(tǒng) Java軟件架構(gòu)師需要掌握的開(kāi)源工具1. JIRAAtlassian的JIRA是當(dāng)前敏捷開(kāi)發(fā)領(lǐng)域最重要的工具之一。它用于錯(cuò)誤...
閱讀 2155·2021-10-08 10:15
閱讀 1185·2019-08-30 15:52
閱讀 514·2019-08-30 12:54
閱讀 1531·2019-08-29 15:10
閱讀 2682·2019-08-29 12:44
閱讀 3008·2019-08-29 12:28
閱讀 3348·2019-08-27 10:57
閱讀 2212·2019-08-26 12:24