andreychernih/railsbox

View on GitHub
templates/ansible/roles/deploy/tasks/main.yml.erb

Summary

Maintainability
Test Coverage
---
<% if params[:server_type] == 'nginx_passenger' -%>
- include_vars: ../../passenger/defaults/main.yml
<% elsif params[:server_type] == 'nginx_puma' -%>
- include_vars: ../../puma/defaults/main.yml
<% else %>
- include_vars: ../../unicorn/defaults/main.yml
<% end %>
<% params[:background_jobs].each do |bg| -%>
- include_vars: ../../<%= bg %>/defaults/main.yml
<% end %>

- set_fact: this_release_path={{ releases_path }}/{{ lookup('pipe', 'date +%Y%m%d%H%M%S') }}

- debug: msg='New release path {{ this_release_path }}'

- name: Create new release dir
  file: path={{ this_release_path }} state=directory

- name: Update code
  git: repo={{ git_url }} dest={{ this_release_path }} version={{ git_branch }} accept_hostkey=yes
  register: git
  <% if params[:background_jobs].any? -%>
  notify:
    <% params[:background_jobs].each do |bg| -%>
    - restart <%= bg %>
    <% end %>
  <% end -%>

- debug: msg='Updated repo from {{ git.before }} to {{ git.after }}'

- name: Delete log directory
  file: path={{ this_release_path }}/log state=absent

- name: Symlink shared files
  file: src={{ shared_path }}/{{ item }} dest={{ this_release_path }}/{{ item }} state=link force=yes
  with_items:
    - config/database.yml
    - config/secrets.yml
    - config/<%= params[:server_type].split('_')[1] %>.{{ rails_env }}.rb
    - log
    - tmp
    - vendor/bundle

- name: Install gems
  command: /bin/bash -lc 'bundle install --deployment --without="development test"'
  args:
    chdir: '{{ this_release_path }}'

- name: Precompile assets
  command: /bin/bash -lc 'bundle exec rake assets:precompile'
  environment:
    RAILS_ENV: '{{ rails_env }}'
  args:
    chdir: '{{ this_release_path }}'

- name: Migrate database
  command: /bin/bash -lc 'bundle exec rake db:migrate'
  environment:
    RAILS_ENV: '{{ rails_env }}'
  args:
    chdir: '{{ this_release_path }}'

- name: Symlink new release
  file: src={{ this_release_path }} dest={{ app_path }} state=link force=yes

- name: Restart webserver
  command: sudo {{ server_restart_command }}

- name: Cleanup
  shell: "ls -1t {{ releases_path }}|tail -n +{{ keep_releases + 1 }}|xargs rm -rf"
  args:
    chdir: '{{ releases_path }}'