我的专题

使用Ansible进行项目的自动部署(Tomcat、Weblog

2017-06-29  本文已影响130人  49b57e65f0ca

问题:
Weblogic/Tomcat 通过JAVA直接远程调用或者调用本地Shell还是通过Ansible来部署新程序 + 启动停止服务 如何管理?需要哪些配置信息?

采用方案:
通过Ansible来部署新程序+启动停止服务;

Java代码使用介绍:
1.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是调用以上工具类的测试示例,里面包含了执行playbook所需的参数(部分参数定义在application-development.properties

3.FileContentReplaceHelper.javaExecLinuxCMD.java分别是替换文件文本内容和知道你给Linux命令的两个工具类。

具体实现步骤:
1.准备工作:
两台Linux服务器:
主服务器(本系统需要部署该服务器上),需要的软件环境:
Python 、Ansible、Jdk

从服务器(目标服务器),需要的软件环境:
Python 、Tomcat、Weblogic、Jdk

2.配置信息:
主服务器ansible目录下的hosts文件、tomcat.yaml文件和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(剧本),该文件里定义了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

start_weblogic.sh

上一篇下一篇

猜你喜欢

热点阅读