From 7008d2157ef2b8fc05e822892e1b4ef8416fa71e Mon Sep 17 00:00:00 2001 From: Niko Kurtti Date: Mon, 30 Mar 2015 18:32:24 +0300 Subject: [PATCH] dockerify koodiklinikka.fi --- applications.yml | 1 - files/nginx/koodiklinikka.fi | 2 +- roles/koodiklinikka.fi/defaults/main.yml | 10 ++-- roles/koodiklinikka.fi/tasks/main.yml | 59 ++++++++++++++++++----- roles/koodiklinikka.fi/tasks/rollback.yml | 21 ++++++++ roles/nvm/tasks/main.yml | 7 --- rollback_front.yml | 7 +++ 7 files changed, 80 insertions(+), 27 deletions(-) create mode 100644 roles/koodiklinikka.fi/tasks/rollback.yml delete mode 100644 roles/nvm/tasks/main.yml create mode 100644 rollback_front.yml diff --git a/applications.yml b/applications.yml index e44404f..0cd997a 100644 --- a/applications.yml +++ b/applications.yml @@ -2,7 +2,6 @@ - name: Setup new application server hosts: application roles: - - nvm - koodiklinikka.fi - koodiklinikka.fi-api - tohtori diff --git a/files/nginx/koodiklinikka.fi b/files/nginx/koodiklinikka.fi index f08f5d0..1785fa0 100644 --- a/files/nginx/koodiklinikka.fi +++ b/files/nginx/koodiklinikka.fi @@ -28,7 +28,7 @@ server { root {{ koodiklinikka_app_path }}/public; location / { - try_files $uri /index.html; + proxy_pass http://localhost:{{ koodiklinikka_port }}; } location /api { diff --git a/roles/koodiklinikka.fi/defaults/main.yml b/roles/koodiklinikka.fi/defaults/main.yml index 48c41c4..1a7bf14 100644 --- a/roles/koodiklinikka.fi/defaults/main.yml +++ b/roles/koodiklinikka.fi/defaults/main.yml @@ -1,11 +1,9 @@ --- -koodiklinikka_project_name: koodiklinikka.fi -koodiklinikka_client_repo: git@github.com:koodiklinikka/koodiklinikka.fi.git -koodiklinikka_nodejs_version: v0.10.25 +koodiklinikka_container_name: koodiklinikka.fi-front +koodiklinikka_repository_url: git@github.com:koodiklinikka/koodiklinikka.fi.git +koodiklinikka_port: 8000 -koodiklinikka_app_path: /opt/web/koodiklinikka.fi +koodiklinikka_app_path: /opt/web/koodiklinikka.fi-front koodiklinikka_nvm_script: /opt/web/nvm/nvm.sh koodiklinikka_user: web -nvm_path: /opt/web/nvm -nvm_user: web diff --git a/roles/koodiklinikka.fi/tasks/main.yml b/roles/koodiklinikka.fi/tasks/main.yml index 8e0f43b..24e627f 100644 --- a/roles/koodiklinikka.fi/tasks/main.yml +++ b/roles/koodiklinikka.fi/tasks/main.yml @@ -3,19 +3,54 @@ remote_user: "{{ koodiklinikka_user }}" action: > git - repo="{{ koodiklinikka_client_repo }}" + repo="{{ koodiklinikka_repository_url }}" dest="{{ koodiklinikka_app_path }}" accept_hostkey=True + version=docker + sudo: no + register: gitclone -- name: Make sure Node.js is installed and properly aliased - remote_user: "{{ koodiklinikka_user }}" - command: > - bash -c "source {{ koodiklinikka_nvm_script }} && nvm install {{ koodiklinikka_nodejs_version }} && nvm alias {{ koodiklinikka_project_name }} {{ koodiklinikka_nodejs_version }}" - register: nvm_result - changed_when: > - "already installed" not in nvm_result.stdout +- name: get previous container + shell: docker images|grep {{ koodiklinikka_container_name }}|grep latest| awk '{print $3}' + register: current_image_sha -- name: Install client NPM dependencies and build assets - remote_user: "{{ koodiklinikka_user }}" - command: > - bash -c "source {{ koodiklinikka_nvm_script }} && nvm use {{ koodiklinikka_project_name }} && cd {{ koodiklinikka_app_path }} && npm install && NODE_ENV=production npm run build" +- name: Build {{ koodiklinikka_container_name }} + shell: ./build_docker + args: + chdir: "{{ koodiklinikka_app_path}}" + sudo: yes + when: gitclone.changed + register: container + +- name: tag previous version + shell: docker tag -f {{ current_image_sha.stdout }} {{ koodiklinikka_container_name }}:old + when: container is defined and container.changed and current_image_sha.stdout != "" + +- name: get running container + shell: docker ps |grep {{ koodiklinikka_container_name }}| awk '{print $1}' + register: current_container_id + +- name: kill old version + shell: docker stop {{ koodiklinikka_container_name }} + when: container is defined and container.changed and current_container_id.stdout != "" + +- name: get old containers + shell: docker ps -a|grep Exited| awk '{print $1}' + register: old_containers + +- name: clean old containers + shell: docker rm $(docker ps -a|grep Exited| awk '{print $1}') + when: old_containers.stdout != "" + +- name: Start the container + shell: docker run --restart=always -p 127.0.0.1:{{ koodiklinikka_port }}:{{ koodiklinikka_port }} -d --name {{ koodiklinikka_container_name }} {{ koodiklinikka_container_name }}:latest + when: container is defined and container.changed + +- name: get old images + shell: docker images | grep "^" | awk '{print $3}' + register: old_images + +- name: clean untagged (old) images + shell: docker rmi $(docker images -a | grep "^" | awk '{print $3}') + when: old_images.stdout != "" + ignore_errors: yes diff --git a/roles/koodiklinikka.fi/tasks/rollback.yml b/roles/koodiklinikka.fi/tasks/rollback.yml new file mode 100644 index 0000000..0a30408 --- /dev/null +++ b/roles/koodiklinikka.fi/tasks/rollback.yml @@ -0,0 +1,21 @@ +--- + +- name: get running container + shell: docker ps -a|grep {{ koodiklinikka_container_name }}|grep latest| awk '{print $1}' + register: current_container_id + +- name: kill old version + shell: docker stop {{ koodiklinikka_container_name }} + when: current_container_id != "" + +- name: get old containers + shell: docker ps -a|grep Exited| awk '{print $1}' + register: old_containers + +- name: clean old containers + shell: docker rm $(docker ps -a|grep Exited| awk '{print $1}') + when: old_containers.stdout != "" + +- name: Start the container + shell: docker run -d --name {{ koodiklinikka_container_name }} {{ koodiklinikka_container_name }}:old + diff --git a/roles/nvm/tasks/main.yml b/roles/nvm/tasks/main.yml deleted file mode 100644 index c7c97f3..0000000 --- a/roles/nvm/tasks/main.yml +++ /dev/null @@ -1,7 +0,0 @@ ---- -- name: Install NVM - remote_user: "{{ nvm_user }}" - action: > - git - repo="https://github.com/creationix/nvm" - dest="{{ nvm_path }}" diff --git a/rollback_front.yml b/rollback_front.yml new file mode 100644 index 0000000..4a22a3c --- /dev/null +++ b/rollback_front.yml @@ -0,0 +1,7 @@ +--- +- name: Rollback api + hosts: application + vars_files: + - roles/koodiklinikka.fi/defaults/main.yml + tasks: + - include: roles/koodiklinikka.fi/tasks/rollback.yml