標籤:pps 軟體 service 部分 .sh dev ble play rac
原文: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)