gradle ssh plugin的一些应用

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/

扫描二维码关注公众号,回复: 375485 查看本文章

代码和注释如下:

// 初始化软件环境
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'
				}
			}
		}
	}
}

猜你喜欢

转载自key232323.iteye.com/blog/2299033