`

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/

 

代码和注释如下:

 

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

 

0
1
分享到:
评论

相关推荐

    gradle-ssh-plugin:Gradle SSH插件

    `gradle-ssh-plugin`是这样一个Gradle插件,它扩展了Gradle的功能,允许用户通过SSH协议执行远程操作,如复制文件、运行命令等,极大地简化了跨服务器部署的过程。 **一、Gradle SSH 插件简介** `gradle-ssh-...

    jmeter-gradle-plugin:Gradle插件运行JMeter测试

    2016/4/21 版本1.0.5已发布增加了对minHeapSize 支持在类路径添加了额外的jmeter-plugin和webdriver jar 修复了jmSystemPropertiesFiles的问题重新格式化一些代码文件2016/4/2 版本1.0.4已发布固定的和 。...

    specs2-mock_2.11-2.3.12-scalaz-7.1.0-M7.zip

    【标题】"specs2-mock_2.11-2.3.12-scalaz-7.1.0-M7.zip" 和 【描述】"gradle-ssh-plugin.zip, Gradle ssh插件提供远程执行和文件传输功能Gradle ssh插件" 提供了两个不同的IT知识点,一个是关于Scala测试框架Specs2...

    jenkins常用插件包

    Gradle Plugin Infrastructure plugin for Publish Over X Jackson 2 API Java JSON Web Token (JJWT) Plugin Javadoc Plugin JavaScript GUI Lib: ACE Editor bundle plugin JavaScript GUI Lib: Handlebars bundle...

    JenKins-Android--GIT-Gradle安装配置

    - Android Emulator Plugin 和 Android Lint Plugin:用于Android应用的模拟器和静态代码分析。 ##### 3.4 配置全局工具 - 在“系统管理”-&gt;“全局工具配置”中配置: - **Git路径**:指定Git安装目录。 - **...

    crash.connectors.ssh-1.3.0-beta21.zip

    《SSH连接器与Gradle Protobuf插件:深入解析与应用》 在现代软件开发中,自动化工具和框架的使用已经变得至关重要。本篇文章将详细探讨一个名为"crash.connectors.ssh-1.3.0-beta21.zip"的压缩包,其中包含了对SSH...

    groovy-ssh, 在 Groovy DSL上,基于SSH自动化工具.zip

    groovy-ssh, 在 Groovy DSL上,基于SSH自动化工具 Groovy SSH是基于DSL的自动化工具,提供远程命令执行和...https://gradle-ssh-plugin.github.io捐赠这是一个在Apache许可以版 2.0下许可以的开源软件。 欢迎打开问题或

    ssh jar包

    在整合SSH项目时,除了这三个框架的基本库,还需要一些额外的依赖,例如: - **Servlet API**:因为Struts和Spring都需要在Servlet容器(如Tomcat)中运行,所以需要`servlet-api.jar`。 - **JSTL**:JavaServer ...

    Gradle学习教程之部署上传项目详解

    在这个例子中,`jcenter()`是一个常用的中央仓库,而`org.hidetake:gradle-ssh-plugin:2.7.0`和`co.tomlee.gradle.plugins:gradle-thrift-plugin:0.0.6`是两个特定的Gradle插件,它们分别用于SSH连接和Thrift编译。...

    ssh所需要所有jar包

    开发者可以通过构建工具如Maven或Gradle来管理这些依赖,或者直接将这些JAR包放入WEB-INF/lib目录下,对于非Maven项目来说,"ssh_jar"压缩包提供了一个方便的方式来获取所有必需的库,避免了逐一查找和下载的麻烦。...

    ssh常用Jar包

    SSH(Struts2、Spring、Hibernate)是一种经典的Java Web开发框架组合,用于构建高效、可扩展的企业级应用程序。在这个“ssh常用Jar包”中,包含了S2SH框架的关键组件和其他辅助库,比如视频处理和数据库连接相关的...

    ssh整合 所需的jar包集合

    SSH整合是指将Spring、Struts2和Hibernate这三个流行的开源框架集成在一起,用于构建高效、灵活的企业级Web应用程序。在Java开发中,SSH整合提供了一种强大的模型-视图-控制器(MVC)架构,使开发者能够更有效地管理...

    Jenkins常用的一些插件 scriptler、dynamicparameter、branch-api、gradle

    5. **Android** (虽然标签中提到,但没有直接对应的插件): Jenkins 支持Android应用的构建和测试,通常会配合Gradle插件使用。例如,`android-emulator-plugin` 可以启动和管理Android模拟器,`android-lint-plugin`...

    SSH框架非注解版所需要的jar包

    除了SSH框架本身的jar包,还有一些其他必要的库,如数据库驱动(如`mysql-connector.jar`或`ojdbc.jar`),用于连接不同的数据库;`log4j.jar`日志库用于记录应用运行时的信息;`commons-lang3.jar`、`commons-...

    ssh需要的包

    6. **开发环境与工具**:SSH整合通常在Eclipse或IntelliJ IDEA等集成开发环境中进行,使用Maven或Gradle进行项目管理和依赖管理,可能还需要Tomcat、Jetty等应用服务器进行部署和测试。 7. **最佳实践**: - 使用...

    ssh框架整合项目

    SSH框架整合通常会用到一系列特定的jar包,如Spring的核心库(spring-core、spring-context等)、Struts2的核心库(struts2-core、struts2-convention-plugin等)、Hibernate的主库(hibernate-core、hibernate-...

    SSH三大框架技术的整合应用

    1. **构建WEB项目**:首先,我们需要创建一个基于Maven或Gradle的Java Web项目,确保项目结构符合标准的Web应用结构,包括src/main/java、src/main/resources、src/main/webapp等目录。 2. **构建数据库**:SSH整合...

    Jdk1.8搭建SSh框架所需Jar包

    在Java开发领域,SSH(Struts、Spring、Hibernate)是一个非常经典的MVC(Model-View-Controller)架构的框架组合,常用于构建企业级的Web应用程序。随着技术的发展,JDK版本也在不断更新,从JDK 1.7升级到JDK 1.8时...

    ssh框架所需的jar包

    以及一些其他第三方库,如Log4j用于日志记录,Commons Lang和IO库用于通用工具函数,还有可能包括Servlet和JSP相关的jar包,如`servlet-api.jar`, `jsp-api.jar`等,这些都是运行Java Web应用所必需的。 在实际开发...

Global site tag (gtag.js) - Google Analytics