Ansible部署Spring Boot项目

也许Ansible能给你的便捷部署带来一些灵感。

image.png

有时,我们的基础设施并不是那么的完善,也许不想搭建Gitlab,Jenkins,就是想写一个项目,然后部署到服务器,需要简单,快速,那么Ansible基本就足够了。这篇文章主要给大家演示一个Ansible部署的案例。

playbook逻辑

首先理清楚整个playbook的内容

  1. 获取本地jar包的名称
  2. 上传至服务器jar包,jar包最好后缀带有版本信息,maven打包的时候可以指定
  3. 停止原有的服务
  4. 检测原有的服务是否停止,如果未停止,强行杀死..
  5. 运行新的jar包

因为项目相对简单,对高可用性要求的不是那么的强烈,如果想要服务不停止运行的话,可以部署集群,两个实例,一直保持其中一个处于运行状态,可以基本实现服务一直运行。简单起见,我们以单实例来演示。

playbook编写

  1. 写playbook的元数据,有关playbook的语法等等,这就不多说了。参考这篇文章:https://www.jianshu.com/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

# 发送停止运行信号
  - 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运行的变量,变量的结果在运行的时候加上-v可以看到,-vvv可以看到更详细的信息。


    image.png
  • ignore_errors: yes,忽略脚本运行的错误,默认情况下,运行失败脚本会停止的,加上这个关键字,即使出现错误,照常运行。

  • tags: 使用tags可以为每个任务指定标签,这样我们就不用每次都把所有的任务都执行完毕了。可以指定多个tag

  • wait_for模块,这个模块可以让我们等待特定的条件然后继续执行接下来的脚本,挺好用的,感兴趣的可以研究下。

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

ansible-doc 模块名 #查看模块的具体用法

最后

ansible在自动化上还是有很大的功用的,以上只是个人在使用ansible的一些小经验,希望能帮到大家。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,684评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,143评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,214评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,788评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,796评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,665评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,027评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,679评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,346评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,664评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,766评论 1 331
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,412评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,015评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,974评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,203评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,073评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,501评论 2 343

推荐阅读更多精彩内容

  • 一、简介 在Linux自动化运维中,常见的自动化运维工具可分为需要安装终端的puppet、func和不需要安装终端...
    小尛酒窝阅读 2,640评论 0 6
  • 1)安装2)常用模块3)inventory4)playbook(role\tag\template)5) yaml...
    秦记阅读 4,111评论 2 5
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,596评论 18 139
  • 安装ansible 1.yum安装:RHEL(Centos)7版本: 2.Apt(Ubuntu)安装方式: 3.h...
    爱吃土豆的程序猿阅读 11,121评论 0 12
  • ansible介绍ansible常用模块使用playbooktemplates,模板条件测试和循环迭代roles,...
    哈喽别样阅读 1,402评论 0 3