使用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 ...
随机推荐
- 通过BitSet完成对单词使用字母的统计
什么是BitSet BitSet类实现了一组位或标记(flag),这些位可被分别设置或清除.当需要跟踪一组布尔值时,这种类很有用. 您只需让每一位对应一个值,并根据需要设置或清除即可. 标记(flag ...
- 开源框架是如何通过JMX来做监控的(一) - JMX简介和Standard MBean
相关文章目录: 开源框架是如何通过JMX来做监控的(一) - JMX简介和Standard MBean 开源框架是如何通过JMX来做监控的(二) - Druid连接池的监控 相信很多做Java开发的同 ...
- 调试 Dockerfile - 每天5分钟玩转 Docker 容器技术(15)
包括 Dockerfile 在内的任何脚本和程序都会出错.有错并不可怕,但必须有办法排查,所以本节讨论如何 debug Dockerfile. 先回顾一下通过 Dockerfile 构建镜像的过程: ...
- Java_中建立0-10M的消息(字符串)
直接用StringBuilder,它的append方法方便快速构建字符串. StringBuilder sb1=new StringBuilder(); for(int i=0;i<1024*1 ...
- vue1.0和vue2.0的区别(一)
今天我们来说一说vue1.0和vue2.0的主要变化有哪些 一.在每个组件模板,不在支持片段代码 VUE1.0是: <template> <h3>我是组件</h3> ...
- XML编辑工具
[标题]XML编辑工具 [开发环境]Qt 5.2.0 [概要设计]使用QT的视图/模型结构.treeview控件以树形结构显示所要操作的XML文件,并实现xml的相关操作 [详细设计] 主要包含 no ...
- PLSQL 保存布局
PLSQL 设置好布局,退出重新登录后,页面布局又恢复原样,所以需要我们保存下我们布局 打开window-->Save layout,保存布局,下次登录布局就是你原来的布局了
- iOS安全攻防之反编译
Class-dump 进行反编译: 之前做代码混淆, 首先了解了下反编译,使用入门级的反编译 class-dump.下载地址:最新版Class-dump. 首先需要注意的是,class-dump的作用 ...
- angular实现的按钮提示
用angularJS简单实现了一个小的按钮提示,html文件中需要引入jquery.js和angular.js css代码: <style type="text/css"&g ...
- AngularJS语法基础及数据绑定——详解各种数据绑定指令、属性应用
AngularJS简单易学,但是功能强大.特别是在构建单页面应用方面效果显著.而 数据绑定 可以说是他被广泛使用的最主要的优点.他舍弃了对DOM的操作方式,一切都由AngularJS来自动更新视图,我 ...