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‘ } } } } }
?
原文:http://key232323.iteye.com/blog/2299033