使用Ansible进行项目的自动部署(Tomcat、Weblogic)
原文:https://github.com/x113773/testall/issues/4
问题:
Weblogic/Tomcat 通过JAVA直接远程调用或者调用本地Shell还是通过Ansible来部署新程序 + 启动停止服务 如何管理?需要哪些配置信息?
采用方案:
通过[Ansible](http://www.ansible.com.cn/)来部署新程序+启动停止服务;
Java代码使用介绍:
1.[AnsibleHelper.java](https://github.com/x113773/testall/blob/master/src/main/java/com/ansel/testall/ansible/AnsibleHelper.java)是一个工具类,接收外部传过来的参数,替换hosts配置,执行playbook剧本,部分代码如下:
```
/**
* 完成Tomcat或weblogic的项目自动部署(tomcat支持多个项目同时部署,weblogic一次只能部署一个项目)
*
* @param ansibleSettingsMap
* 该参数需要提供如下几个键值对:
* ansibleSettingsMap.put("ansible_ssh_hosts_path"
* ,"本机hosts文件路径,带hosts文件名");
* ansibleSettingsMap.put("ansible_ssh_host", "目标主机ip地址");
* ansibleSettingsMap.put("ansible_ssh_user", "目标主机用户名");
* ansibleSettingsMap.put("ansible_ssh_pass", "目标主机用户密码");
* @param playbookParamMap
* 若为tomcat部署,该参数需要提供如下几个键值对:
* playbookParamMap.put("local_war_path", "本机要部署的war包路径,不带文件名");
* playbookParamMap.put("project_name_arr",
* 字符串数组格式的项目(war包)名,不带.war后缀});
* playbookParamMap.put("tomcat","目标主机tomcat路径,到tomcat/主目录为止");
* -----------------------------------------------------------------
* 若为weblogic部署,该参数需要提供如下几个键值对:
* playbookParamMap.put("user_name","目标主机weblogic用户名");
* playbookParamMap.put("password", "目标主机weblogic密码");
* playbookParamMap.put("weblogic_path",
* "目标主机weblogic路径,到Oracle_Home/为止");
* playbookParamMap.put("local_war_file", "本机要部署的war包路径,带文件名");
* playbookParamMap.put("domain_name", "weblogic域名");
* playbookParamMap.put("server_name", "weblogic服务名称");
* playbookParamMap.put("admin_url", "weblogic服务的地址,需使用iiop协议" );
* playbookParamMap.put("war_file_path", "目标主机war包的存储路径" );
* playbookParamMap.put("project_name",
* "项目名称(即war包名称,不带.war后缀)");
* @param playbookPath
* ansible tomcat或weblogic的playbook路径,带文件名
*/
public static void doDeploy(Map<String, Object> ansibleSettingsMap, Map<String, Object> playbookParamMap, String playbookPath) {
setAnisbleHosts(ansibleSettingsMap);
String res = doAnisblePlaybook(playbookParamMap, playbookPath);
System.out.println("==========输出=============");
System.out.println(res);
}
```
2.[AnsibleController.java](https://github.com/x113773/testall/blob/master/src/main/java/com/ansel/testall/ansible/AnsibleController.java)是调用以上工具类的测试示例,里面包含了执行playbook所需的参数(部分参数定义在[application-development.properties](https://github.com/x113773/testall/blob/master/src/main/resources/application-development.properties))
3.[FileContentReplaceHelper.java](https://github.com/x113773/testall/blob/master/src/main/java/com/ansel/testall/helper/FileContentReplaceHelper.java)和[ExecLinuxCMD.java](https://github.com/x113773/testall/blob/master/src/main/java/com/ansel/testall/helper/ExecLinuxCMD.java)分别是替换文件文本内容和执行Linux命令的两个工具类。
具体实现步骤:
1.准备工作:
两台Linux服务器:
主服务器(本系统需要部署该服务器上),需要的软件环境:
Python 、Ansible、Jdk
从服务器(目标服务器),需要的软件环境:
Python 、Tomcat、Weblogic、Jdk
2.配置信息:
主服务器ansible目录下的[hosts](https://github.com/x113773/testall/blob/master/src/main/resources/public/ansible/hosts)文件、[tomcat.yaml](https://github.com/x113773/testall/blob/master/src/main/resources/public/ansible/tomcat.yaml)文件和[weblogic.yaml](https://github.com/x113773/testall/blob/master/src/main/resources/public/ansible/weblogic.yaml)文件。
1)hosts文件里面配置从服务器的ip、端口、用户名、密码等信息,例如:
`host1 ansible_ssh_host=192.168.10.129 ansible_ssh_port=22 ansible_ssh_user=root ansible_ssh_pass="123456" #host_to_replace
`
2)tomcat.yaml文件是一个[playbook](http://www.ansible.com.cn/docs/playbooks.html)(剧本),该文件里定义了Tomcat的整个部署流程:
```
---
- hosts: all
tasks:
- name: stop tomcat service #调用脚本shutdown_tomcat.sh,停止Tomcat服务
script: "/etc/ansible/shutdown_tomcat.sh"
- name: remove old war file #删除旧的war包及文件
shell: cd {{ tomcat }}webapps&&rm -rf {{ item }} {{ item }}.war
with_items: "{{ project_name_arr }}"
- name: copy new war file #从主服务器拷贝新war包到从服务器
copy: src={{ local_war_path }}{{ item }}.war dest={{ tomcat }}webapps/
with_items: "{{ project_name_arr }}"
- name: start tomcat service #启动Tomcat
shell: chdir={{ tomcat }}bin/ nohup ./startup.sh &
```
在命令行传入{{参数名 }}内的参数,运行该playbook:
`ansible-playbook /etc/ansible/tomcat.yaml --extra-vars '{"tomcat":"/usr/local/tomcat8/","local_war_path":"/opt/store/","project_name_arr":["gr","hw2"]}'`
3)weblogic.yaml定义了Weblogic的整个部署流程:
```
---
- hosts: all
tasks:
- name: remove old war file #删除从服务器上旧的war包
shell: cd {{ war_file_path }}&&rm -rf {{ project_name }}.war
- name: copy new war file #拷贝主服务器上的war包到从服务器指定目录
copy: src={{ local_war_file }} dest={{ war_file_path }}
- name: start weblogic service #调用shell脚本,传入指定参数,完成启停服务、部署项目
script: "/etc/ansible/start_weblogic.sh {{ user_name }} {{ password }}
{{ weblogic_path }} {{ domain_name }} {{ server_name }} {{ admin_url }}
{{ war_file_path }} {{ project_name }}"
```
[shutdown_tomcat.sh](https://github.com/x113773/testall/blob/master/src/main/resources/public/ansible/shutdown_tomcat.sh)
[start_weblogic.sh](https://github.com/x113773/testall/blob/master/src/main/resources/public/ansible/start_weblogic.sh)
使用Ansible进行项目的自动部署(Tomcat、Weblogic)的更多相关文章
- Jenkins自动部署Tomcat项目
Jenkins自动部署Tomcat项目 1.安装jenkins 插件 启动Jenkins,进入系统管理-插件管理: 选择Deploy to container Plugin 插件安装:
- 使用Maven自动部署Tomcat 6和Tomcat 7下Web应用
使用Maven自动部署Tomcat 6和Tomcat 7下Web应用 开启Tomcat远程管理权限 在tomcat的config目录下的tomcat-users.xml文件, <role rol ...
- linux下实现自动部署tomcat的脚本
linux下实现自动部署tomcat的脚本 由于经常部署war到tomccat上,经常有一些重复的工作要做:停服务.备份war包.上传新的war包.启动服务.索性就写了一个自动部署的脚本. 脚本如下a ...
- 自动部署tomcat 脚本
自动部署tomcat 脚本 . /etc/init.d/functions #调用系统函数 yum -y install java >/dev/null TAR="apache-tom ...
- jekins自动部署tomcat注意事项、连接tomcat报错
jekins自动部署tomcat注意事项 千万不要用下面插件推送,报错很多, 要用脚本,一篇博客说的:“我们都是用的脚本,插件报错太多,也不完善” Deploy to container Plugin ...
- 5分钟快速掌握Jenkins,项目一键自动部署
5分钟快速掌握Jenkins,项目一键自动部署 目录 前言 Jenkins是什么? Jenkins环境安装搭建 Jenkins基本使用介绍 Jenkins快速构建项目,项目自动化部署 学习总结 前言 ...
- Jenkins 集成Maven打包SpringBoot项目并自动部署到Tomcat服务器
提前条件: 1.在Jenkins服务器上安装Git.JDK和Maven 2.准备另一台服务器并安装Tomcat 3.Gitlab服务器 4.Gitlab仓库中上传SpringBoot项目代码 第一步, ...
- Eclipse使用Maven搭建Java Web项目并直接部署Tomcat
1.环境: Windows 10 Java 1.8 Maven 3.3.9 Eclipse IDE for Java EE Developers 2.准备: eclipse环境什么的不赘述,Maven ...
- jenkins+supervisor实现django项目的自动部署(ubuntu)
没有安装supervisor的话首先安装supervisor, apt install upservisor 安装supervisor大概率会出现问题,不推荐,最好是用pip 安装, 注意python ...
随机推荐
- Spring Boot 之构建Hello Word项目
1.创建一个maven项目 如下步骤: (第一步) (第二步) (第三步) 2.配置pom.xml文件 加载一些依赖包.字符集.指定jdk.编译插件. <project xmlns=" ...
- [笔记]机器学习(Machine Learning) - 01.线性回归(Linear Regression)
线性回归属于回归问题.对于回归问题,解决流程为: 给定数据集中每个样本及其正确答案,选择一个模型函数h(hypothesis,假设),并为h找到适应数据的(未必是全局)最优解,即找出最优解下的h的参数 ...
- 浅论Javascript在汽车信号测试中的应用
起因 上周老板又给了我这个车辆工程毕业的码农一份工作: 要我写一个测试台架出来. 我先简单的分析了测试台架的几种典型的工况: 1.发送一个CAN信号,测试能否查到. 2.发送一个信号,是否能在规定时间 ...
- 【JAVAWEB学习笔记】11_XML&反射
解析XML总结(SAX.Pull.Dom三种方式) 图一 XML的解析方式 图二 XML的Schema的约束 反射的简单介绍: 反射 1.什么是反射技术? 动态获取指定类以及类中的内容(成员),并运行 ...
- SQLServer树形数据结构的数据进行数据统计
前言 前几天朋友问我,关于SQLServer数据库中对树形结构的表数据统计问题,需求大致如下: 分类表(递归数据),A的子分类是B,B的子分类是C--分类关系不间断,A为第一层,B为第二层,C为第三层 ...
- Android中SimpleAdapter的使用—自定义列表
本人初学Android,今天研究到Adapter这块感觉挺有意思的,写了个自定义列表进行测试 首先我们新建一个layout列表布局文件,具体布局可以自己设定. 下面贴上我的自定义布局文件代码 < ...
- zookeeper3.4.9 centos6.5 集群安装
安装jdk http://www.cnblogs.com/xiaojf/p/6568426.html [root@m1 jar]# .tar.gz -C ../ [root@m1 jar]# cd . ...
- JS组件系列——自己动手扩展BootstrapTable的treegrid功能
前言:上篇 JS组件系列——自己动手封装bootstrap-treegrid组件 博主自己动手封装了下treegrid的功能,但毕竟那个组件只是一个单独针对树形表格做的,适用性还比较有限.关注博主的 ...
- shell脚本中$参数的介绍
$$Shell本身的PID(ProcessID)$!Shell最后运行的后台Process的PID$?最后运行的命令的结束代码(返回值)$-使用Set命令设定的Flag一览$*所有参数列表.如&quo ...
- VR全景智慧城市:360全景市场需要背景及其优势~
VR元年已过,VR项目.VR创业潮转为理性,VR行业分为两个方向:硬件和内容. VR全景,又被称为3D实景,是一种新兴的富媒体技术,其与视频,声音,图片等传统的流媒体大的区别是"可操作,可交 ...