当前位置: 首页 > 后端技术 > Node.js

Gradle应用搭建分享(纯干货)

时间:2023-04-03 20:35:59 Node.js

阅读本文需要一些gradle/groovy基础知识。这篇文章的内容都是关于使用各种插件让自己的应用构建和发布更简单,不会涉及基础知识2016年写了一个例子《springboot+gradle+vue+webpack 组合使用》。时隔一年多,发现很多童鞋都需要这方面的资源。我觉得应该和大家分享一下我们平时使用gradle的方式。什么是摇篮?Gradle是一个构建工具。Gradle具有BuildAnything功能,可以构建任何应用程序。AutomateEverything使一切自动化。更快地交付以提供更快的构建。以上三项均为官方解释。第一点毋庸置疑,gradle可以构建任何应用。所以下面我将重点介绍第二点,如何使用gradle轻松实现项目的自动化,让你的项目打包、构建、发布更加简单。本文不会将gradle与任何其他构建工具进行比较,因为它没有意义。每种技术都可能有自己的应用场景。如果不适合自己的场景,再好也是没有意义的。场景一——gradle集成Node构建应用首先需要添加node插件gradle-node-pluginplugins{id"com.moowork.node"version"1.2.0"}配置node任务参数node{version="8.9.4"yarnVersion="1.3.2"download=true}versionnode版本yarnVersionyarn版本,这里强烈建议大家使用yarn而不是npmdownload设置为true本地不需要单独安装node,node对应的版本构建时自动安装,虽然对于开发人员来说,开发过程中肯定会独立安装node,但是这里配置自动下载还是会带来更多的好处。比如在构建多个应用时不需要担心节点版本不一致导致的版本冲突,其次在使用CI(jenkins)之类的时候,不需要在上面单独(手动)安装节点构建任务CI服务器buildAdmin(type:YarnTask,dependsOn:yarn){group="node"args=["run","build"]}taskcopyAdminFiles(type:Copy,dependsOn:buildAdmin){group="node"from"dist/dist"include"**/**"into"${project.buildDir}/resources/main/public-web-resources"}jar.dependsOncopyAdminFiles将copyAdminFiles任务绑定到jar命令,这样当你运行gradlebuild命令打包,会自动构建nodebuild前端的相关资源,并将构建好的资源复制到gradlebuild的resources目录下。命令运行成功后你会在j在ar文件的根目录下找到public-web-resources目录,从而完成前后端一体化搭建这种方式只适用于你的静态资源文件通过java访问,一起部署的场景。如果你的静态资源是独立部署的,这种方式对你来说可能没有任何意义。场景二——gradle集成ssh插件插件依赖添加gradle-ssh-pluginplugins{id'org.hidetake.ssh'version'2.9.0'}serverconfigurationremotes{webServer{host='192.168.1.101'user='webserver'identity=file('id_rsa')}}remotesserver信息配置,更详细的gradle-ssh-plugin配置请参考官方文档部署任务配置taskdeploy{doLast{ssh.run{session(remotes.webServer){putfrom:'example.war',into:'/webapps'execute'sudoservicetomcatrestart'}}}}使用gradlewdeploy命令运行任务,example.war会上传到server/webapps目录,您的服务器tomcat将重新启动。可以根据自己的部署需要编写各种任务,轻松实现一键部署,而且这种方式完全跨平台。不管你的开发环境是windows、mac、linux,都可以使用相同的命令来部署PS:在开发测试环境中我只能说不这样部署非常好用场景三——gradle集成dockerbuildplugindependencies添加gradle-docker-pluginbuildscript{dependencies{classpath"com.bmuschko:gradle-docker-plugin:3.2.1"}}applyplugin:"com.bmuschko.docker-remote-api"编写构建任务taskcopyDockerJar(type:Copy,dependsOn:build){group="docker"fromjar.archivePath.pathinto"${project.buildDir}/docker"rename{StringfileName->fileName.replace("-${project.version}","")}}复制jar文件构建/docker目录已准备好用于以后的映像构建任务jar".toString()destFile=project.file("${project.buildDir}/docker/Dockerfile")来自"openjdk:8u151-jdk-alpine3.7"维护者"KevinZou"copyFile(jarName,"/app/$jarName".toString())workingDir("/app")volume("/app/logs")runCommand("apkadd--no-cachetzdata")environmentVariable("TZ","Asia/Shanghai")//默认时区为东8区HeapDumpOnOutOfMemoryError-XX:HeapDumpPath=logs/-XX:+PrintGCDateStamps-verbose:gc-XX:+PrintGCDetails-XX:+UseGCLogFileRotation-XX:NumberOfGCLogFiles=10-Xloggc:logs/gc.log"])环境变量("DUIC_OPTS","\$JAVA_OPTS-Dreactor.trace.operatorStacktrace=true-Dspring.profiles.active=prod")exposePort(7777)defaultCommand("sh","-c","java\$DUIC_OPTS-jar$jarName")}生成dockerfileFROMopenjdk:8u151-jdk-alpine3.7MAINTAINERKevinZouCOPYduic.jar/app/duic.jarWORKDIR/appVOLUME["/app/logs"]RUNapkadd--no-cachetzdataENVTZAsia/ShanghaiENVJVM_OPTS="-Xms1g-Xmx1g-XX:MetaspaceSize=128m"JAVA_OPTS="-server-XX:+UseG1GC$JVM_OPTS-XX:+HeapDumpOnOutOfMemoryError-XX:HeapDumpPath=logs/-XX:+PrintGCDateStamps-verbose:gc-XX:+PrintGCDetails-XX:+UseGCLogFileRotation-XX:NumberOfGCLogFiles=10-Xloggc:logs/gc.log"ENVDUIC_OPTS$JAVA_OPTS-Dreactor.trace.operatorStacktrace=true-Dspring.profiles.active=prodEXPOSE7777CMD["sh","-c","java$DUIC_OPTS-jarduic.jar"]任务buildImage(类型:com.bmuschko.gradle.docker.tasks.image.DockerBuildImage,dependsOn:createDockerfile){group="docker"inputDir=createDockerfile.destFile.parentFiletags=["zhudyos/${project.name}:${project.version}".toString(),"zhudyos/${project.name}:latest".toString()]}使用gradlewbuildImage构建2个标签图像。gradle-docker-plugin更详细的使用方法可以参考官方文档场景4-gradlereleasepluginapplicationplugindependenciesaddgradle-releaseplugins{id"net.researchgate.release"version"2.6.0"}并运行命令gradlewrelease在master分支自动创建一个标签。这个插件使用起来比较简单,不需要修改,运行带任何参数的命令后,按照流程走就可以了。唯一需要注意的是,如果你有多个项目,记得把操作改成gradlew:release。这是在根项目和标签中运行。下图是使用命令后的git提交记录场景5-travis使用gradle构建.travis.ymlsudo:requiredlanguage:javajdk:openjdk8services:-mongodb-dockerbefore_cache:-rm-f$HOME/.gradle/caches/modules-2/modules-2.lock-rm-fr$HOME/.gradle/caches/*/plugin-resolution/cache:目录:-$HOME/.gradle/caches/-$HOME/.gradle/wrapper/-.gradle/-node_modules/before_install:-chmod+xgradlewscript:-./gradlewcleanbuildImageafter_success:-如果[!-z"$TRAVIS_TAG"];然后dockerlogin-u"$DOCKER_USERNAME"-p"$DOCKER_PASSWORD";dockerpushzhudyos/duic;./gradlewcopyRelease;fideploy:provider:releasesapi_key:secure:yXSciOem61T73TLenFyAGbgYi2CTg5QUoj1AstAAupCYURatOvFBeJGwE04ZIdAgIKO1LRPqrhG0M40pg5uzwAR+qcJ1yQHKE4xqqSsRiksZZKGMPx4G7HxPr43/wOGKGd87WLEKGe7NaDRdlQm53WXpes8aYqN9L8H0rf6Ftf1sTtG2j+W6u8TJu0GDI5rQ4dC1kX6oOVoMqXynFV1X3KJ6hQFJyDZRA3I9DStElvSnAL7UtzGqPZBqXlNcjewe/V/7jP60Z3gcAH83zZU/rGPrLrckhxpDCFt6prDIhv/mBhgvROP1mif0B+jHolfprIHUvtrDSYj8FkmWVmoSyjF8R3PyzVfYqhSuRAvYtmUZtRa4BjOzxMPZRpucJYPv2/yXs7PPhkFxglxBI4CmC1c4ZFbMeTUWZrld/ZhaszQ/30sfVU4sh/cZEcJd8ZS8/W7QHI6jPWh4t9Ip+kMAsaVKy9aXDnNXV5e5Xeoh9BH6vICCT6J827jfp7OJ0m912T56Ui9jPmEBq1qUp3pwYk4tYolsyYr7oykKbjiJ/D9TjsXx39qju8dSI1fb2dnkX+flIqDmDbqlNI8fr2lkoAPQXRB36WWEFEGVHv+ymX5jZQxlrewliuCt1t28m8b3Doycf6kfNw0yvrcTPvOs00s7EpGoH3E8NZluWo5aSyM=file_glob:truefile:build/releases/*skip_cleanup:trueon:repo:zhudyos/duictags:truetravis中主要集成了几个脚本来构建dockerimageafter_success如果tag构建成功,则将镜像推送到dockerhubdeploy如果buildistag会自动将jar包提交到githubreleases。这篇文章主要是给大家分享gradle相关插件的功能。你可以使用这些插件来完成什么样的事情。插件使用方法请参考官方文档。每个插件我都匹配了官方地址项目:https://github.com/zhudyos/duic以上插件几乎都用到了,大家可以参考这个项目了解懒人会进步,懒人不会进步你进步