gradle是个构建工具,dsl特性,向前还兼容已有的java/maven生态的技术,已经发展的比较庞大了。
之前只是做java的项目构建,最多在部署到服务器的时候用他的ssh插件做个file upload和服务器重启。
这几天公司里有了好多台新购置的机器,分了虚拟机,准备运行环境——这就需要每一个机器安装一些软件和做一些配置,体力活,我在网上找了下,貌似自动化运维工具类似puppet的开源软件比较适合做这个,但还要每一个都安装agent。
我就尝试用gradle做了下,发现还不错,也算是20台虚拟机的java/tomcat/nginx一键安装,就分享下。
gradle和ssh插件的官网地址如下:
https://gradle.org/
http://gradle-ssh-plugin.github.io/
代码和注释如下:
// 初始化软件环境 buildscript { repositories { jcenter() } dependencies { classpath 'org.hidetake:gradle-ssh-plugin:1.1.3' } } apply plugin: 'org.hidetake.ssh' String targetPre = 'dev' // TODO List deployTargets = [1, 2, 3, 4, 5, 6] // 定义你的目标机器的ssh信息,这里可以用编程的方式进行批量定义,就不用一个个输入了,感谢groovy的动态语法 remotes { for(one in deployTargets){ int suf = 40 + one - 1 "${targetPre}${one}" { host = '111.111.111.' + suf port = 22 user = 'root' password = '123!@#' } } } ssh.settings { knownHosts = allowAnyHosts } // 接受运行命令行的参数,指定要操作的目标机器名称 // use -Pargs=1,2,3 List targets = deployTargets if(project.hasProperty('args')){ targets = args.split(',') } // 开关变量 // 替换163的源 boolean update163 = true // 安装nginx boolean installNginx = true // 安装tomcat boolean installTomcat = true // 安装java boolean installJava = true // 用文件上传的方式安装jdk,因为用源下载太慢 String jdkFile = 'jdk-7u79-linux-x64.tar.gz' String jdkFilePath = 'D:/BaiduYunDownload/' + jdkFile String confDir = 'server-config/' def c = {String suf -> confDir + suf } // 默认ubuntu14.04没有开启root账号,这里可以批量修改root密码 // 用bash也可以做到修改sshd_config配置文件的配置项(但这个命令我不会写。。) task changeRootPwd << { // need to change /etc/sshd_config PermitRootLogin yes, sudo service ssh restart ssh.run { for(target in targets){ String key = targetPre + target session(remotes[key]) { println 'login done as ' + remotes[key].user String pwd = remotes[key].password execute('sudo passwd root', pty: true, interaction: { // old user is tjapp when(partial: ~/.+tjapp.+/) { standardInput << pwd << '\n' when(line: _) {line -> standardInput << pwd << '\n' when(line: _) {line2 -> standardInput << pwd << '\n' } } } when(line: _) { line -> throw new IllegalStateException("passwd command returned error: $line") } }) } } } } // 初始化软件环境 task init << { ssh.run { for(target in targets){ String key = targetPre + target session(remotes[key]) { println 'login done as ' + remotes[key].user String cmd //apt-get install software-properties-common //add-apt-repository ppa:webupd8team/java if(update163){ put from: c('sources.list'), into: '/etc/apt/' cmd = ''' apt-get update ''' cmd.readLines().collect{it.trim()}.grep{it}.each{ execute it } println 'done update sources' } if(installNginx){ // install nginx execute('apt-get install nginx', pty: true, interaction: { when(line: _, from: standardOutput) { line -> println line } standardInput << 'y' << '\n' }) println 'done install nginx' put from: c('nginx/nginx.conf'), into: '/etc/nginx/' put from: c('nginx/default'), into: '/etc/nginx/sites-enabled/' println 'done config nginx' } if(installTomcat){ // install tomcat cmd = ''' mkdir /home/myuser mkdir /home/myuser/soft wget -P /home/myuser/soft http://apache.fayea.com/tomcat/tomcat-8/v8.0.33/bin/apache-tomcat-8.0.33.tar.gz tar zxvf /home/myuser/soft/apache-tomcat-8.0.33.tar.gz -C /home/myuser/soft mv /home/myuser/soft/apache-tomcat-8.0.33 /home/myuser/soft/tomcat8 ''' cmd.readLines().collect{it.trim()}.grep{it}.each{ execute it } put from: c('tomcat/catalina.sh'), into: '/home/myuser/soft/tomcat8/bin' put from: c('tomcat/server.xml'), into: '/home/myuser/soft/tomcat8/conf' println 'done config tomcat' } // install java if(installJava){ // tcl interaction // apt-get install oracle-java7-installer put from: jdkFilePath, into: '/home/myuser/soft' println 'done copy jdk' cmd = """ tar zxvf /home/myuser/soft/${jdkFile} -C /home/myuser/soft mv /home/myuser/soft/jdk1.7.0_79 /home/myuser/soft/jdk7 """ cmd.readLines().collect{it.trim()}.grep{it}.each{ execute it } put from: c('profile.bak'), into: '/root/.profile' execute 'source /root/.profile' println 'done config java' } } } } }
相关推荐
= JMH Gradle Plugin :jmh-version: 1.21 :plugin-version: 0.4.8 image:http://img.shields.io/travis/melix/jmh-gradle-plugin/master.svg["Build Status (travis)", link=...
Gradle-Plugin-User-Guide-Chinese-Verision, Gradle Plugin User Guide 中文翻译
gradle-ssh-plugin:Gradle SSH插件
license-gradle-plugin, 管理你的许可证 许可证Gradle插件 这个插件会扫描和修改你的源文件,以包含一个提供的标题,比如 一个许可文件。 默认情况下,它将扫描每个源集并报告警告。 它还将创建格式任务,这些任务将...
offline-android-gradle-plugin-preview.zip文件126M,2020/06/22日官网下载的。离线编译工程用
Dexcount Gradle Plugin A Gradle plugin to report the number of method references in your APK or AAR on every build. This helps you keep tabs on the growth of your app, with an eye to staying ...
公司不能安装gradle elcipse plugin,自己制作一个.
GreenDao以及GreenDao-gradle的jar包,使用GreenDao数据库
sdk-manager-plugin.zip,下载和管理你的android sdk的gradle插件。不推荐下载和管理你的android sdk的gradle插件。
DexCount Gradle插件
gradle任务类型和插件,用于从gradle运行gojuno/composer。
一年前我就停止了Android的开发,Gradle对他们的构建系统进行了不断的修改,这使得我很难支持这个插件。
japicmp-gradle-plugin:JApicmp的Gradle插件
gatling-gradle-plugin:Gradle的Gatling插件
从v0.11.0开始, license-gradle-plugin将发布到并且可以通过。 这意味着下面列出了几种不同的使用方案。 Gradle 2.1及更高版本 在您的build.gradle文件中添加: plugins { id " ...
dexcount-gradle-plugin
官方版本,亲测可用
官方版本,亲测可用
使用简单的渐变规则修改每个应用程序变体的启动程序图标。添加任何颜色的色带,覆盖您自己的图像,更改图标的颜色,…