ansible-playbook更新发布java程序jar包,并检测服务端口与jar包匹配验证发布

该博客介绍了如何使用Ansible剧本自动化执行服务器的部署任务,包括创建目录、权限设置、备份清理、jar包传输、进程管理、服务启动以及通过Skywalking和ARMS进行监控。剧本涵盖了优雅停服、等待进程结束、启动服务并检查端口监听等关键步骤,确保服务的稳定运行。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

---
- hosts: "{{ hosts }}"
  remote_user: root
  vars:
    filename: "../../../target/*.jar"
  tasks:
    - name: 在目标服务器上创建目录并给与权限
      shell: mkdir {{ projectdir }}{{ projectname }}/ -p;chmod -R 777 {{ projectdir }}{{ projectname }};chmod -R 777 /home/logs
      ignore_errors: yes
    - name: 清理目录里的备份文件 保留最新
      shell: ls -t | sed -n '5,$p' | xargs -I {} rm -rf {}
      args:
        chdir: "{{ projectdir }}{{ projectname }}/"
      ignore_errors: yes
    - name: 拷贝jar包到服务器{{ dirname }}
      copy:
        src: "{{ item }}"
        dest: "{{ projectpwd }}"
        backup: yes
        mode: 755
      with_fileglob:
        - "{{ filename }}"
      register: cpresult 
      ignore_errors: no
    - name: 查找运行的进程
      shell: "ps -ef | grep -v grep | grep -w {{ projectpwd }} | awk '{print $2}'"
      register: running_processes
    - name: 优雅的干掉进程
      shell: "kill {{ item }}"
      with_items: "{{ running_processes.stdout_lines }}"
      ignore_errors: yes
    - name: 等等进程干掉了再开始
      wait_for:
        path: "/proc/{{ item }}/status"
        state: absent
      with_items: "{{ running_processes.stdout_lines }}"
    - name: 启动服务j接入skywalking 
      shell: source /etc/profile; nohup java -Xmx{{ mem }}m -Xms{{ mem }}m -XX:+UseG1GC -Dspring.profiles.active={{ active }} -Dserver.port={{ mport }} -javaagent:/data/agent/skywalking-agent.jar -Dskywalking.agent.service_name={{ hostsname }}-{{ projectname }}-{{ active }} -Dskywalking.collector.backend_service=172.19.244.238:11800 -jar {{ projectpwd }} >> /dev/null 2>&1 & echo $! 
      become: yes
      become_user: runuser
      become_method: sudo
      args:
        chdir: {{ projectdir }}{{ projectname }}/
      register: runresult
      when: agent == 'Skywalking'
      ignore_errors: yes      
    - name: 启动服务接入arms
      shell: source /etc/profile; nohup java -Xmx{{ mem }}m -Xms{{ mem }}m -XX:+UseG1GC -Dspring.profiles.active={{ active }} -Dserver.port={{ mport }} -javaagent:/root/arms/ArmsAgent/arms-bootstrap-1.7.0-SNAPSHOT.jar -Darms.licenseKey= -Darms.appName={{ hostsname }}-{{ projectname }}-{{ active }} -jar {{ projectpwd }} >> /dev/null 2>&1 & echo $!
      become: yes
      become_user: runuser
      become_method: sudo
      args:
        chdir: {{ projectdir }}{{ projectname }}/
      register: runresult
      when: agent == 'arms'
      ignore_errors: yes
    - name: 启动服务不接入任何断点追踪
      shell: source /etc/profile; nohup java -Xmx{{ mem }}m -Xms{{ mem }}m -XX:+UseG1GC -Dspring.profiles.active={{ active }} -Dserver.port={{ mport }} -jar {{ projectpwd }} >> /dev/null 2>&1 & echo $!
      become: yes
      become_user: runuser
      become_method: sudo
      args:
        chdir: {{ projectdir }}{{ projectname }}/
      register: runresult
      when: agent == 'None'
      ignore_errors: yes
    - name: 启动后检查端口是否监听
      wait_for:
        port: "{{ mport }}"
        delay: 5
        timeout: 60
    - name: 获取当前端口的进程PID
      shell: netstat -anp|grep {{ mport }}|awk '{printf $7}'|cut -d/ -f1
      register: portresult
    - name: 验证进程是否启动成功
      fail: 
        msg: "启动失败,进程id不匹配,请手动检查该服务器上是否存在端口占用"
      when: runresult.stdout != portresult.stdout

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值