使用Ansible進行項目的自動部署(Tomcat、Weblogic)

來源:互聯網
上載者:User

標籤: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)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.