原文: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)的更多相关文章

  1. Jenkins自动部署Tomcat项目

    Jenkins自动部署Tomcat项目 1.安装jenkins 插件 启动Jenkins,进入系统管理-插件管理: 选择Deploy to container Plugin 插件安装:

  2. 使用Maven自动部署Tomcat 6和Tomcat 7下Web应用

    使用Maven自动部署Tomcat 6和Tomcat 7下Web应用 开启Tomcat远程管理权限 在tomcat的config目录下的tomcat-users.xml文件, <role rol ...

  3. linux下实现自动部署tomcat的脚本

    linux下实现自动部署tomcat的脚本 由于经常部署war到tomccat上,经常有一些重复的工作要做:停服务.备份war包.上传新的war包.启动服务.索性就写了一个自动部署的脚本. 脚本如下a ...

  4. 自动部署tomcat 脚本

    自动部署tomcat 脚本 . /etc/init.d/functions #调用系统函数 yum -y install java >/dev/null TAR="apache-tom ...

  5. jekins自动部署tomcat注意事项、连接tomcat报错

    jekins自动部署tomcat注意事项 千万不要用下面插件推送,报错很多, 要用脚本,一篇博客说的:“我们都是用的脚本,插件报错太多,也不完善” Deploy to container Plugin ...

  6. 5分钟快速掌握Jenkins,项目一键自动部署

    5分钟快速掌握Jenkins,项目一键自动部署 目录 前言 Jenkins是什么? Jenkins环境安装搭建 Jenkins基本使用介绍 Jenkins快速构建项目,项目自动化部署 学习总结 前言 ...

  7. Jenkins 集成Maven打包SpringBoot项目并自动部署到Tomcat服务器

    提前条件: 1.在Jenkins服务器上安装Git.JDK和Maven 2.准备另一台服务器并安装Tomcat 3.Gitlab服务器 4.Gitlab仓库中上传SpringBoot项目代码 第一步, ...

  8. Eclipse使用Maven搭建Java Web项目并直接部署Tomcat

    1.环境: Windows 10 Java 1.8 Maven 3.3.9 Eclipse IDE for Java EE Developers 2.准备: eclipse环境什么的不赘述,Maven ...

  9. jenkins+supervisor实现django项目的自动部署(ubuntu)

    没有安装supervisor的话首先安装supervisor, apt install upservisor 安装supervisor大概率会出现问题,不推荐,最好是用pip 安装, 注意python ...

随机推荐

  1. Android 真机无线调试

    有很多人在学Android的时候最开始接触的都是模拟机的测试,如果像好的模拟机比如genimotion,次一点的蓝手指,测试都还比较可以.有的也不缺乏是用真机测试.本人开始用华为真机测试,也是一直连线 ...

  2. ASP.NET Core 菜鸟之路:从Startup.cs说起

    1.前言 本文主要是以Visual Studio 2017 默认的 WebApi 模板作为基架,基于Asp .Net Core 1.0,本文面向的是初学者,如果你有 ASP.NET Core 相关实践 ...

  3. MySql学习笔记(一) —— 数据的分组

    前面介绍的聚集函数只是用来计算行数,平均数,最大值,最小值而不用检索所有数据.通过count()函数,我们可以计算生产商1003提供的产品数目,但如果我要查询所有生产商提供的商品数,这就需要进行分组查 ...

  4. linux tcp中time_wait

    http://www.cnblogs.com/my_life/articles/3460873.html http://blog.csdn.net/sunnydogzhou/article/detai ...

  5. Python环境安装及基本概念

    1.安装Python ①官网下载Python包安装 ②添加环境变量(新版Python包可直接添加环境变量) 手动添加环境变量:控制面板-系统-高级系统设置-环境变量-编辑Path添加python安装目 ...

  6. 一天搞定HTML----a标签02

    1.细说a标签 2.代码演示 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> ...

  7. ssh框架整合之登录以及增删改查

    1.首先阐述一下我用得开发工具,myeclipse2017+oracle,所以我的基本配置步骤可能不一样,下面我用几张图来详解我的开发步骤. ---1先配置structs (Target 选择apac ...

  8. mongo查询系统

    首先,我们先向集合(collections)中添加测试文档(documents).如下: > for(i=1;i<=5;i++) db.test.insert({x:i,y:i*i,z:6 ...

  9. Unable to find 'struts.multipart.saveDir' property setting.

    今天在项目开发中遇到如下问题 项目使用的是struts2 Unable to find 'struts.multipart.saveDir' property setting. 后来在网上查询特此记录 ...

  10. javacpp-opencv图像处理之2:实时视频添加图片水印,实现不同大小图片叠加,图像透明度控制,文字和图片双水印

    欢迎大家积极开心的加入讨论群 群号:371249677 (点击这里进群) javaCV图像处理系列: javaCV图像处理之1:实时视频添加文字水印并截取视频图像保存成图片,实现文字水印的字体.位置. ...