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