美文网首页我的专题
使用Ansible进行项目的自动部署(Tomcat、Weblog

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

作者: 49b57e65f0ca | 来源:发表于2017-06-29 19:39 被阅读130次

    问题:
    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

    相关文章

      网友评论

        本文标题:使用Ansible进行项目的自动部署(Tomcat、Weblog

        本文链接:https://www.haomeiwen.com/subject/zyjvcxtx.html