# ansible-playbook /etc/ansible/deploy_init_java.yml -e "hosts=dev project=eos/vipthink-eos-callcenter refs=test" --private-key=/etc/ansible/new_www.key -vvv - hosts: '{{hosts}}' remote_user: root vars: src: "/data/wwwroot/java/{{ project }}" tmp: "/data/wwwroot/java/jar" dest_path: "/data/wwwroot/{{ project }}" git_url: "https://gz-gitlab.vipthink.cn/{{ project }}.git" # become: yes #是否允许身份切换 # become_method: sudo #切换用户身份的方式,有sudo、su、pbrun等方式,默认为sudo # become_user: shop # 切换指定的用户 tasks: # 获得日期 - name: get deploy time shell: date +%Y-%m-%d-%H%M%S register: date_str run_once: true connection: local # 处理分支 : refs/master > master - name: Generate branch shell: echo {{ refs }}|awk -F '/' '{print $NF}' register: tag run_once: true connection: local # 处理项目 : eos/vipthink-eos-callcenter > vipthink-eos-callcenter - name: Generate project shell: echo {{ project }}|awk -F '/' '{print $NF}' register: pj run_once: true connection: local # git 拉代码 - name: "pull {{ git_url }} {{ tag.stdout }}" git: repo: "{{ git_url }}" dest: "/data/wwwroot/java/{{ pj.stdout }}" force: yes version: "{{ tag.stdout }}" run_once: true connection: local # 检查文件是否存在/如果不存在则退出报错 - name: check sonar-project.properties exist shell: ls /data/wwwroot/java/{{ pj.stdout }} register: result ignore_errors: yes connection: local - debug: var=result - fail: msg="sonar-project.properties in not exist" when: result.rc != 0 # 构建 - name: "mvn install" shell: "mvn install" args: chdir: "/data/wwwroot/java/{{ pj.stdout }}" run_once: true connection: local # 检查目录有没有创建,如果没有则创建 - name: create directory if they don't exist file: path: "{{ path }}" state: directory owner: shop group: shop mode: 0775 loop: - /data/wwwroot/{{ pj.stdout }}/ - /data/logs/ loop_control: loop_var: path # 检查日志文件有没有创建 - name: create file if then don't exist file: path: /data/logs/{{ pj.stdout }}.log state: touch owner: shop group: shop #mode: 0775 # 复制jar文件到临时目录 - name: copy jar file shell: "mkdir -p {{ tmp }}/{{ pj.stdout }}/{{ hosts }} ; mv /data/wwwroot/java/{{ pj.stdout }}/target/*.jar {{ tmp }}/{{ pj.stdout }}/{{ hosts }}/{{ pj.stdout }}-{{ date_str.stdout }}.jar" run_once: true connection: local # 发送jar文件到服务器 - name: rsync jar synchronize: src: "{{ tmp }}/{{ pj.stdout }}/{{ hosts }}/{{ pj.stdout }}-{{ date_str.stdout }}.jar" dest: "/data/wwwroot/{{ pj.stdout }}" partial: yes compress: yes rsync_timeout: 0 rsync_opts: ['--chown=shop:shop','--chmod=ugo=rwX'] perms: no use_ssh_args: no # set_remote_user: no # 删除10个版本前的文件 - name: delete older files shell: ls -t *.jar | awk '{if(NR>10){print $0}}' | xargs rm -f args: chdir: /data/wwwroot/{{ pj.stdout }} # 创建软链 - name: create soft link file: src: "/data/wwwroot/{{ pj.stdout }}/{{ pj.stdout }}-{{ date_str.stdout }}.jar" dest: "/data/wwwroot/{{ pj.stdout }}/{{ pj.stdout }}.jar" owner: shop group: shop state: link force: yes become: yes become_method: sudo become_user: shop # 生成supervisor配置文件 - name: rsync supervisor config ini template: src: template/eos_java_template.ini.j2 dest: /etc/supervisord.d/{{ pj.stdout }}.ini notify: supervisorctl update # 立即执行 handlers - meta: flush_handlers # 没启动的话重启一次 - name: restart {{ pj.stdout }} shell: supervisorctl restart {{ pj.stdout }} # 延迟15s,等待 java 启动 - name: sleep 15 shell: sleep 15 # 检查 进程 - name: check_process shell: ps -ef | grep "{{ pj.stdout }}" | grep -v "grep" | wc -l register: check_process - debug: var=check_process # 判断启动有没有成功 - name: check {{ pj.stdout }} status debug: msg: "{{ pj.stdout }} is running" when: - check_process.stdout == "1" # 没启动的话重启一次 - name: restart {{ pj.stdout }} shell: supervisorctl restart {{ pj.stdout }} when: - check_process.stdout == "0" # 加载supervisor配置文件 handlers: - name: supervisorctl update shell: supervisorctl update