角色功能說明:
- 該角色實現maven項目的構建和發佈
- 該角色使用的腳本比較簡陋,該角色僅作爲一個功能演示,後期會再做優化
角色部署:
- 創建目錄結構,創建軟連接,關聯默認變量文件
WorkDir=~/devops/ansible/os_init && cd ${WorkDir}
RoleName=maven
mkdir -pv roles/${RoleName}/{defaults,files,handlers,meta,tasks,templates,vars}
ln -s ${WorkDir}/defaults_var.yml roles/${RoleName}/defaults/main.yml
- 創建項目構建發佈腳本
cat >roles/${RoleName}/files/pro_mark.sh<<\EOF
#!/bin/bash
source /etc/profile
Pro_File=${1}
GitUser='root'
GitPass='vincent%40123'
cat ${Pro_File}|while read line
do
IP=$(echo ${line}|awk '{print $1}')
Git=$(echo ${line}|awk '{print $2}'|sed 's|https://||g')
Project=$(echo ${line}|awk '{print $3}')
Subpro=$(echo ${line}|awk '{print $4}')
Java=$(echo ${line}|awk '{print $5}')
Tomcat=$(echo ${line}|awk '{print $6}')
Port=$(echo ${line}|awk '{print $7}')
mkdir ${Subpro} && cd ${Subpro}
git clone https://${GitUser}:${GitPass}@${Git}/${Project} &>/dev/null || echo "git clone error"
cd * || echo "cd error"
mvn -B -f pom.xml clean package -U -Dmaven.test.skip=true &> build.log || echo "maven error"
ssh web_pro@${IP} "rm -rf /web/project/${Tomcat}_${Port}_${Subpro}/*" </dev/null || echo "rm ROOT.war error"
find . -name "${Subpro}*.war" -exec scp {} web_pro@${IP}:/web/project/${Tomcat}_${Port}_${Subpro}/ROOT.war \; || echo "scp error"
ssh web_pro@${IP} "ps -ef|grep java|grep ${Tomcat}_${Port}_${Subpro}|awk '{print \$2}'|xargs kill -9"
done
exit 0
EOF
- 創建角色任務
cat >roles/${RoleName}/tasks/main.yml<<EOF
---
- name: "刪除臨時構建目錄"
file:
path: /tmp/pro_mark
state: absent
- name: "創建臨時構建目錄"
file:
path: /tmp/pro_mark
state: directory
- name: "同步執行腳本"
copy:
src: pro_mark.sh
dest: /tmp/pro_mark
- name: "安裝git"
yum:
name: git
state: latest
disable_gpg_check: no
update_cache: yes
- name: "安裝構建工具maven"
yum:
name: maven
state: latest
disable_gpg_check: no
update_cache: yes
- name: "列出所有配置文件"
shell:
ls
args:
chdir: "{{ pro_mark }}"
register: pro_mark_list
- name: "傳入文件,調用腳本,構建項目,分發war包"
shell:
"/bin/bash pro_mark.sh {{ pro_mark }}/{{ item }}"
args:
chdir: /tmp/pro_mark
register: result
with_items:
- "{{ pro_mark_list.stdout_lines }}"
- name: "打印執行信息"
debug:
msg: "{{ result }}"
EOF
- 創建任務playbook並執行
cat >os-init-11-${RoleName}.yml<<EOF
---
- hosts: localhost
remote_user: root
gather_facts: true
roles:
- ${RoleName}
EOF
ansible-playbook -i inventory/hosts os-init-11-${RoleName}.yml
[TOC]