使用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 ...
随机推荐
- 转:Redis 配置为 Service 系统服务
在Linux中,将程序配置为服务后,就可以使用service命令对系统服务进行管理,如:start(启动).stop(停止).restart(重启)等.Redis安装后默认不会配置为系统服务,本文将介 ...
- jquery之属性操作
jQuery之属性操作 相信属性这个词对大家都不陌生.今天我就给大家简单地介绍一下JQuery一些属性的操作 属性一共分三大类 一.基本属性 1.attr 2.removeAttr 3.prop 4. ...
- ZooKeeper监听机制
前言:Zookeeper的监听机制很多人都踩过坑,感觉实现了watcher 接口,后面节点的变化都会一一推送过来,然而并非如此. Watch机制官方声明:一个Watch事件是一个一次性的触发器,当被设 ...
- 远程登录Linux服务器修改ssh端口
公司有部分服务器root密码被禁用,有部分没有禁用,禁用root的服务器需要通过tomcat用户登陆系统,切换至root修改端口,没有禁用的直接修改root密码: #-*- coding:utf-8 ...
- 深入理解Struts2----数据校验
在表现层的数据处理方面主要分为两种类型,一种是类型转换,这点我们上篇已经简单介绍过,另外一种则是我们本篇文章将要介绍的:数据校验.对于我们的web应用,我们经常需要和用户进行交互收集用户信息,那么无论 ...
- Automated Front End Test - Xvfb, Chromedriver, Selenium, Jenkins
1. Install Xvfbm, google-chrome-stable and chromedriver in Jenkins sudo apt-get install -y xvfb goog ...
- 014 一对多关联映射 单向(one-to-many)
在对象模型中,一对多的关联关系,使用集合来表示. 实例场景:班级对学生:Classes(班级)和Student(学生)之间是一对多的关系. 多对一.一对多的区别: 多对一关联映射:在多的端加入一个外键 ...
- java.util.Properties工具类
import java.io.FileNotFoundException; import java.io.FileWriter; import java.io.IOException; import ...
- Swift 入门之简单语法(三)
集合 数组 数组使用 [] 定义,这一点与 OC 相同 //: [Int] let numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] 遍历 for num in nu ...
- kafka 0.10.2 部署失败后,重新部署
删除kafka各个节点log目录 删除zookeeper上kafka相关的目录 [root@m1 ~]# zkCli.sh Connecting to localhost: -- ::, [myid: ...