在工作中,初次部署服務器時需要初始化很多軟件,大平臺部署有時大幾十臺甚至上百臺,每臺都去做重複的工作將帶來非常大的工作量,下面我們介紹一下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 去操作吧。