- hosts: "{{deploy_host}}" remote_user: root vars: src: "/data/wwwroot/{{ pj }}" tmp: "/data/cache/{{ pj }}/{{ env }}" version_name: "{{ pj }}-{{ env }}-{{ tag }}-{{ date_str.stdout }}" dest_path: "{% if lang == 'js' %}/data/wwwroot/{{ domain }}/{{ pj }}{% else %}/data/wwwroot/{{ pj }}{% endif %}" url: "https://yaohong_lin:Aa111111...@gz-gitlab.vipthink.cn" nginx_path: "/usr/local/nginx/conf/vhost" tasks: - name: "get deploy data time" shell: date +%Y%m%d%H%M%S register: date_str run_once: true connection: local - name: "create {{ tmp }} if they don't exist" file: path: "{{ path }}" state: directory owner: shop group: shop mode: 0775 loop: - "{{ tmp }}" loop_control: loop_var: path connection: local - name: "create {{ dest_path }} logs if they don't exist" file: path: "{{ path }}" state: directory owner: shop group: shop mode: 0775 loop: - "{{ dest_path }}" - /data/logs/web/ - /data/logs/java/ - /data/logs/app/ - /data/logs/queue/ loop_control: loop_var: path - name: "awk {{ tag }}" shell: echo {{ tag }}|awk -F '/' '{print $NF}' register: branch run_once: true connection: local - name: "pull {{ git }} {{ branch.stdout }}" git: repo: "{{ url }}{{ git }}" dest: "{{ src }}" version: "{{ tag.stdout }}" force: yes run_once: yes connection: local # 检查文件是否存在/如果不存在则退出报错 - name: check sonar-pj.properties exist shell: ls /data/wwwroot/{{ pj }}/ ignore_errors: yes connection: local register: result run_once: true - file: msg="sonar-pj.properties in not exist" when: result.rc != 0 # - debug: var=result - name: "{{ env }} npm i and npm run build" shell: "cnpm i && npm run build:{{ env }}" register: result args: chdir: "{{ src }}" run_once: true connection: local when: lang == "js" and env in ["dev","uat"] - name: "{{ env }} npm i and npm run build" shell: "cnpm i && npm run build:prod" #shell: "cnpm i && npm run build" register: result args: chdir: "{{ src }}" run_once: true connection: local when: lang == "js" and env in ["gray","prod"] - name: "{{ pj }} run init.sh" shell: "./init.sh" args: chdir: "{{ src }}" run_once: true ignore_errors: yes connection: local when: pj in ["lp_core","lp_work","csd_core","csd_work"] # 执行composer install - name: composer install shell: /usr/local/bin/composer install args: chdir: "{{ src }}" connection: local when: pj == "ems" # 执行pre_run.sh - name: pre_run.sh shell: ./pre_run.sh vars: testfile: "{{ src }}/pre_run.sh" args: chdir: "{{ src }}" when: testfile is exists and pj == "ems" connection: local # 执行apollo.sh - name: apollo shell: /usr/bin/php public/apollo.php {{ env }}-apollo.vipthink.cn {{ pj }} args: chdir: "{{ src }}" connection: local when: pj == "ems" # 记录版本 - name: "Record the version:version_name" shell: "echo {{ version_name }} > .{% if lang == 'js' %}/dist{% else %}{% endif %}/version.log " args: chdir: "{{ src }}" run_once: true ignore_errors: yes connection: local # 打包静态文件到临时目录 - name: "tar {{ pj }} js file to {{ tmp }}" shell: "tar cpz * -f {{ tmp }}/{{ version_name }}.tar.gz" args: chdir: "{{ src }}/dist/" run_once: true connection: local when: lang == "js" # 打文件到临时目录 - name: "tar {{ pj }} to {{ tmp }}" shell: "tar cpz --exclude-from=/etc/ansible/yh/exclude_files `ls -A` -f {{ tmp }}/{{ version_name }}.tar.gz" args: chdir: "{{ src }}/" run_once: true connection: local when: lang != "js" # js删除dist目录 - name: "rm -rf {{ pj }}/dist" shell: "rm -rf ./dist" #shell: "pwd" args: chdir: "{{ src }}" run_once: true connection: local when: lang == "js" # 删除前20个 - name: "delete last 20 rollback version" shell: "ls -t *.tar.gz|awk 'NR>20'|xargs rm -rf" args: chdir: "{{ tmp }}" run_once: true connection: local - name: "unarchive {{ tmp }}/{{ version_name }}.tar.gz to {{ dest_path }}" unarchive: src: "{{ tmp }}/{{ version_name }}.tar.gz" dest: "{{ dest_path }}/" owner: shop group: shop - name: "rollback project {{ rollback_version }}" unarchive: src: "{{ tmp }}/{{ rollback_version }}" dest: "{{ dest_path }}/" owner: shop group: shop tags: rollback,never - name: "pull .evn from apollo" shell: wget -O .env http://{{ env }}-apollo.vipthink.cn/configfiles/{{ pj }}/default/application/ && sed -i 's/\\//g' .env args: chdir: "{{ dest_path }}/" become: yes become_method: sudo become_user: shop tags: always when: lang != "js" and pj != "ems" - name: "rsync {{ domain }} nginx_vhost.conf.j2 " template: src: template/nginx_vhost.conf.j2 dest: "{{ nginx_path }}/{{ domain }}.conf" # 已存在就不覆盖 force: no notify: nginx -t when: lang == "js" # 立即执行 handlers - meta: flush_handlers - name: "/usr/local/nginx/sbin/nginx -s reload" shell: "/usr/local/nginx/sbin/nginx -s reload" when: ngt is defined and ngt is succeeded handlers: - name: nginx -t shell: "/usr/local/nginx/sbin/nginx -t" register: ngt