OwlFocus

使用Ansible发布Jetty服务

构建Jetty部署yml

新建一个ansibledeployjetty.yml文件,增加以下脚本:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
- name: install jetty admin
hosts: jetty hosts #对应hostsz中主机内容
sudo: True
vars: #定义变量区域
war_file: /home/jettyappweb.war #本地文件
jetty_root: /home/pft/pft-web-base/webapps/ROOT #部署的远程ROOT目录
tasks:
- name: rm ROOT.
file:
state: absent
dest: "{{ jetty_root }}"
- name: mkdir ROOT.
file:
state: directory
dest: "{{ jetty_root }}"
owner: root
group: root
mode: 755
- name: unzip war.
unarchive:
src: "{{ war_file }}"
dest: "{{ jetty_root }}"
copy: yes
- name: start jetty.
action: shell {{ jetty_root }}/../../bin/start.sh

说明

  • hosts #对应host中主机内容
  • vars #定义变量区域
  • 删除ROOT文件夹 使用file: state:absent,好处防止错误删除文件。
  • 使用unarchive命令,copy:yes直接拷贝本地文件到远程,并且解压缩后删除文件。
  • action: shell 启动jetty服务。

启动部署脚本

1
ansible-playbook ansibledeployjetty.yml -vvv

jetty 启动脚本start.sh

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#!/bin/bash
# JAVA_HOME
export JAVA_HOME=/var/java/jdk1.8.0_111
export PATH=$JAVA_HOME/bin:$PATH
JAVA_JMX_OPTS=""
if [ "$1" = "jmx" ]; then
JAVA_JMX_OPTS=" -Dcom.sun.management.jmxremote.port=1099 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmx -Dcom.sun.management.jmxremote.authenticate=true -Dcom.sun.management.jmxremote.password.file=../conf/jmx/jmxremote.password -Dcom.sun.management.jmxremote.access.file=../conf/jmx/jmxremote.access"
fi
JAVA_MEM_OPTS=""
BITS=`java -version 2>&1 | grep -i 64-bit`
if [ -n "$BITS" ]; then
JAVA_MEM_OPTS=" -server -Xmx512m -Xms512m -Xmn128m -Xss256k -XX:+DisableExplicitGC -XX:+UseConcMarkSweepGC -XX:+CMSParallelRemarkEnabled -XX:LargePageSizeInBytes=128m -XX:+UseFastAccessorMethods -XX:+UseCMSInitiatingOccupancyOnly -XX:CMSInitiatingOccupancyFraction=70 "
else
JAVA_MEM_OPTS=" -server -Xms512m -Xmx512m -XX:PermSize=128m -XX:SurvivorRatio=2 -XX:+UseParallelGC "
fi
export JAVA_OPTS
nohup java $JAVA_OPTS $JAVA_JMX_OPTS $JAVA_MEM_OPTS -jar /usr/local/jetty9/start.jar jetty.base=/home/pft/pft-web-base &

常见模块说明

File模块

功能:用于设置文件属性

  • name: 设置文件属性
    action: file
    force # 需要在两种情况下强制创建软连接,一种是源文件不存在但之后会建立的情况下;另一种是目标连接已存在,需要先取消之前的软连接,有两个选项:yes|no
    group # 设置文件或目录的属组
    mode # 设置文件或目录的权限
    owner # 设置文件或目录的属主
    path # 必选项,定义文件或目录的路径
    recurse # 递归设置文件的属性,只对目录有效
    src # 要被链接到的路径,只应用与state=link的情况
    state # directory:如果目录不存在,创建目录;file:即使文件不存在,也不会被创建;link:创建软连接;hard:创建硬连接;touch:如果文件不存在,则会创建一个新的文件,如果文件或目录已存在,则更新其最后修改时间;absent:删除目录、文件或者取消链接文件

Command模块

功能:命令模块,默认模块,用于在远程主机执行命令,缺点:运行的命令中无法使用变量,管道。

  • name: 在远程节点执行命令
    action #command
    chdir #在执行命令之前,先切换到该目录
    creates #一个文件名,当这个文件存在,则该命令不执行
    executable #切换shell来执行命令,需要使用命令的绝对路径
    free_form #要执行的Linux指令,一般使用Ansible的-a参数代替。
    removes #一个文件名,这个文件不存在,则该命令不执行

unarchive模块

功能:用于解压文件,模块包含如下选项:
copy #在解压文件之前,是否先将文件复制到远程主机,默认为yes。若为no,则要求目标主机上压缩包必须存在。
creates #指定一个文件名,当该文件存在时,则解压指令不执行
dest #远程主机上的一个路径,即文件解压的路径
grop #解压后的目录或文件的属组
list_files #如果为yes,则会列出压缩包里的文件,默认为no,2.0版本新增的选项
mode #解决后文件的权限
src #如果copy为yes,则需要指定压缩文件的源路径
owner #解压后文件或目录的属主