Ansible部署Spring Boot項目

也許Ansible能給你的便捷部署帶來一些靈感。

image.png

有時,我們的基礎設施并不是那么的完善,也許不想搭建Gitlab,Jenkins,就是想寫一個項目,然后部署到服務器,需要簡單,快速,那么Ansible基本就足夠了。這篇文章主要給大家演示一個Ansible部署的案例。

playbook邏輯

首先理清楚整個playbook的內(nèi)容

  1. 獲取本地jar包的名稱
  2. 上傳至服務器jar包,jar包最好后綴帶有版本信息,maven打包的時候可以指定
  3. 停止原有的服務
  4. 檢測原有的服務是否停止,如果未停止,強行殺死..
  5. 運行新的jar包

因為項目相對簡單,對高可用性要求的不是那么的強烈,如果想要服務不停止運行的話,可以部署集群,兩個實例,一直保持其中一個處于運行狀態(tài),可以基本實現(xiàn)服務一直運行。簡單起見,我們以單實例來演示。

playbook編寫

  1. 寫playbook的元數(shù)據(jù),有關playbook的語法等等,這就不多說了。參考這篇文章:http://www.itdecent.cn/p/e513250496ee
---
- hosts: web   #定義運行的主機
  vars: #設置變量
    pwd: /Users/aihe/Desktop/code/api

  remote_user: root 
  gather_facts: no  #不收集facts
  1. 編寫tasks
  tasks:
  # 獲取本地打包好的文件名
  - name: get local file name
    local_action: shell ls {{ pwd }}/target/*.jar
    register: file_name
    tags: test

 # 上傳jar包到服務器
  - name: upload jar file to server
    tags:
     - upload
     - test
    copy:
     src: "{{ file_name.stdout }}"
     dest: /home/
    when: file_name.stdout != ""

# 獲取上次jar包運行的pid
  - name: get pid of api
    tags:
     - test
    shell: "ps -ef | grep -v grep | grep api | awk '{print $2}'"
    register: running_processes

# 發(fā)送停止運行信號
  - name: Kill running processes
    shell: "kill {{ item }}"
    tags:
     - test1
    with_items: "{{ running_processes.stdout_lines }}"

# 等待60s鐘,確認獲取的到的pid是否都停止運行
  - wait_for:
      path: "/proc/{{ item }}/status"
      state: absent
      timeout: 60
    tags:
     - test
    with_items: "{{ running_processes.stdout_lines }}"
    ignore_errors: yes
    register: killed_processes
# 強制殺死,未停止運行的進程
  - name: Force kill stuck processes
    shell: "kill -9 {{ item }}"
    with_items: "{{ killed_processes.results | select('failed') | map(attribute='item') | list }}"

# 啟動新的jar包
  - name: start wechat-api
    shell: "nohup java -jar /home/{{ file_name.stdout }} &"
    tags: start

關于playbook的一些知識點

直接貼上面的yml腳本可能部分讀者無法理解。再此解釋一下

  • local_action模塊用來運行本地的命令,語法為
  - name: 任務名稱
    local_action:
      module: mail # ansible模塊名,這里以mail為例,上面我們用的是shell,或command模塊
      #以下為模塊的關鍵字
      subject: "Summary Mail"
      to: "{{ mail_recipient }}"
      body: "{{ mail_body }}"
    run_once: True
  • register可以注冊每一步task運行的變量,變量的結(jié)果在運行的時候加上-v可以看到,-vvv可以看到更詳細的信息。


    image.png
  • ignore_errors: yes,忽略腳本運行的錯誤,默認情況下,運行失敗腳本會停止的,加上這個關鍵字,即使出現(xiàn)錯誤,照常運行。

  • tags: 使用tags可以為每個任務指定標簽,這樣我們就不用每次都把所有的任務都執(zhí)行完畢了。可以指定多個tag

  • wait_for模塊,這個模塊可以讓我們等待特定的條件然后繼續(xù)執(zhí)行接下來的腳本,挺好用的,感興趣的可以研究下。

以上的腳本其余部分,都是ansible的正常模塊,可以使用

ansible-doc 模塊名 #查看模塊的具體用法

最后

ansible在自動化上還是有很大的功用的,以上只是個人在使用ansible的一些小經(jīng)驗,希望能幫到大家。

?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

  • 一、簡介 在Linux自動化運維中,常見的自動化運維工具可分為需要安裝終端的puppet、func和不需要安裝終端...
    小尛酒窩閱讀 3,042評論 0 6
  • 1)安裝2)常用模塊3)inventory4)playbook(role\tag\template)5) yaml...
    秦記閱讀 4,596評論 2 5
  • Spring Cloud為開發(fā)人員提供了快速構建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,564評論 19 139
  • 安裝ansible 1.yum安裝:RHEL(Centos)7版本: 2.Apt(Ubuntu)安裝方式: 3.h...
    愛吃土豆的程序猿閱讀 11,223評論 0 12
  • ansible介紹ansible常用模塊使用playbooktemplates,模板條件測試和循環(huán)迭代roles,...
    哈嘍別樣閱讀 1,490評論 0 3

友情鏈接更多精彩內(nèi)容