在工作中,初次部署服务器时需要初始化很多软件,大平台部署有时大几十台甚至上百台,每台都去做重复的工作将带来非常大的工作量,下面我们介绍一下ansible自动化部署的相关操作,仅供交流学习。
环境准备:
操作系统 centos7
192.168.0.33 --ansible 服务端 以下称:server服务器
192.168.0.34 --需安装的服务器1 以下称:app1
192.168.0.35 --需安装的服务器2 以下称:app2
工具:
ansible:2.9.3
jdk:1.8.0_73
目录规划:
# tree ansible
ansible/
├── install
│ ├── jdk1.8.0_73.tar.gz
├── java
│ ├── install_jdk.sh
│ └── install_jdk.yml
上传jdk1.8的安装包至server服务器 install 文件夹中
将以下脚本保存至 server 服务器的java文件夹下
cat install_jdk.sh
#!/bin/sh
#-----------------------------------------------
#脚本使用方法-->[sh install_jdk.sh] |
#author by huwj 2017-11-17 14:00:24 |
#-----------------------------------------------
javapath="/usr/local/java/"
javaversion="jdk1.8.0_73"
JAVA_HOME="$javapath$javaversion"
if [ ! -d $javapath ];then
mkdir $javapath
cd $javapath
tar -zxvf /opt/$javaversion.tar.gz -C $javapath
else
tar -zxvf /opt/$javaversion.tar.gz -C $javapath
fi
#set environment
if ! grep "JAVA_HOME=$javapath$javaversion" /etc/profile
then
echo "JAVA_HOME=$javapath$javaversion" | sudo tee -a /etc/profile
echo "export JAVA_HOME" | sudo tee -a /etc/profile
echo "PATH=$PATH:$JAVA_HOME/bin" | sudo tee -a /etc/profile
echo "export PATH" | sudo tee -a /etc/profile
echo "CLASSPATH=.:$JAVA_HOME/lib" | sudo tee -a /etc/profile
echo "export CLASSPATH" | sudo tee -a /etc/profile
fi
#update environment
source /etc/profile
echo "jdk is installed !"
cat install_jdk.yml
---
- hosts: one
remote_user: root
tasks:
- name: copy file
copy: src={{ item.src }} dest={{ item.dest }} mode='0755'
with_items:
- {src: "/opt/ansible/java/install_jdk.sh",
dest: "/opt/install_jdk.sh"}
- {src: "/opt/ansible/install/jdk1.8.0_73.tar.gz",
dest: "/opt/jdk1.8.0_73.tar.gz"}
- name: install jdk
shell: /opt/install_jdk.sh
注:hosts 即以下ansible中hosts对应的分组别名 one
remote_user 远程使用的用户
tasks 要执行的任务
name 类似于备注说明
copy 要复制的任务
with_items 要复制的目标列表
shell 即要执行的shell脚本
Ansible 配置
将app1 、app2配置到 /etc/ansible/hosts 文件中,并设置别名为 one
ansible 登录客户端可以通过免密方式,也可以通过hosts中设置对应的帐号密码进行验证,此处使用设置帐号密码验证
配置完成后就可执行部署操作:
ansible-playbook install_jdk.yml
接下来就交给ansible 去操作吧。