基於ansible的生產環境部署構建(十二) 角色maven

角色功能說明:

  • 該角色實現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]

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章