diff --git a/roles/koodiklinikka.fi-api/defaults/main.yml b/roles/koodiklinikka.fi-api/defaults/main.yml index 8894f1b..ad1136b 100644 --- a/roles/koodiklinikka.fi-api/defaults/main.yml +++ b/roles/koodiklinikka.fi-api/defaults/main.yml @@ -1,12 +1,7 @@ --- -koodiklinikka_api_project_name: koodiklinikka.fi-api +koodiklinikka_api_container_name: koodiklinikka.fi-api koodiklinikka_api_repository_url: git@github.com:koodiklinikka/koodiklinikka.fi-api.git -koodiklinikka_api_nodejs_version: v0.10.25 koodiklinikka_api_port: 9000 -nvm_path: /opt/web/nvm -nvm_user: web -koodiklinikka_api_nvm_path: /opt/web/nvm -koodiklinikka_api_nvm_script: /opt/web/nvm/nvm.sh koodiklinikka_api_app_path: /opt/web/koodiklinikka.fi-api koodiklinikka_api_user: web diff --git a/roles/koodiklinikka.fi-api/handlers/main.yml b/roles/koodiklinikka.fi-api/handlers/main.yml deleted file mode 100644 index 370ffe2..0000000 --- a/roles/koodiklinikka.fi-api/handlers/main.yml +++ /dev/null @@ -1,6 +0,0 @@ ---- -- name: restart service - sudo: true - service: > - name={{ koodiklinikka_api_project_name }} - state=restarted diff --git a/roles/koodiklinikka.fi-api/tasks/main.yml b/roles/koodiklinikka.fi-api/tasks/main.yml index 7b80f02..b05292f 100644 --- a/roles/koodiklinikka.fi-api/tasks/main.yml +++ b/roles/koodiklinikka.fi-api/tasks/main.yml @@ -1,39 +1,57 @@ --- -- name: Deploy from git - remote_user: "{{ koodiklinikka_user }}" + +- name: Deploy client from git + remote_user: "{{ koodiklinikka_api_user }}" action: > git repo="{{ koodiklinikka_api_repository_url }}" dest="{{ koodiklinikka_api_app_path }}" + version=docker accept_hostkey=True - notify: restart service + sudo: no + register: gitclone -- name: Make sure Node.js is installed and properly aliased - remote_user: "{{ koodiklinikka_api_user }}" - command: > - bash -c "source {{ koodiklinikka_api_nvm_script }} && nvm install {{ koodiklinikka_api_nodejs_version }} && nvm alias {{ koodiklinikka_api_project_name }} {{ koodiklinikka_api_nodejs_version }}" - register: nvm_result - changed_when: > - "already installed" not in nvm_result.stdout - notify: restart service +- name: get previous container + shell: docker images|grep {{ koodiklinikka_api_container_name }}|grep latest| awk '{print $3}' + register: current_image_sha -- name: Install NPM dependencies and build assets - remote_user: "{{ koodiklinikka_api_user }}" - command: > - bash -c "source {{ koodiklinikka_api_nvm_script }} && nvm use {{ koodiklinikka_api_project_name }} && cd {{ koodiklinikka_api_app_path }} && npm install" - notify: restart service +- name: Build {{ koodiklinikka_api_container_name }} + shell: ./build_docker /opt + args: + chdir: "{{ koodiklinikka_api_app_path}}" + sudo: yes + when: gitclone.changed + register: container -- name: Setup config - remote_user: "{{ koodiklinikka_api_user }}" - template: > - src=config.j2 - dest="{{ koodiklinikka_api_app_path }}/config.json" - mode=664 +- name: tag previous version + shell: docker tag -f {{ current_image_sha.stdout }} {{ koodiklinikka_api_container_name }}:old + when: container is defined and container.changed and current_image_sha.stdout != "" -- name: Setup Upstart config - template: > - src=upstart.j2 - dest="/etc/init/{{ koodiklinikka_api_project_name }}.conf" - mode=664 - sudo: true - notify: restart service +- name: get running container + shell: docker ps -a|grep {{ koodiklinikka_api_container_name }}|grep latest| awk '{print $1}' + register: current_container_id + +- name: kill old version + shell: docker stop {{ koodiklinikka_api_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 {{ koodiklinikka_api_port }}:{{ koodiklinikka_api_port }} -d --name {{ koodiklinikka_api_container_name }} {{ koodiklinikka_api_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-api/tasks/rollback.yml b/roles/koodiklinikka.fi-api/tasks/rollback.yml new file mode 100644 index 0000000..91ce8ec --- /dev/null +++ b/roles/koodiklinikka.fi-api/tasks/rollback.yml @@ -0,0 +1,21 @@ +--- + +- name: get running container + shell: docker ps -a|grep {{ koodiklinikka_api_container_name }}|grep latest| awk '{print $1}' + register: current_container_id + +- name: kill old version + shell: docker stop {{ koodiklinikka_api_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_api_container_name }} {{ koodiklinikka_api_container_name }}:old + diff --git a/roles/koodiklinikka.fi-api/templates/config.j2 b/roles/koodiklinikka.fi-api/templates/config.j2 deleted file mode 100644 index 276611c..0000000 --- a/roles/koodiklinikka.fi-api/templates/config.j2 +++ /dev/null @@ -1,18 +0,0 @@ -{ - "all": { - "slack": { - "token": "{{ koodiklinikka_api_slack_api_token }}", - "private_channel": "{{ koodiklinikka_api_slack_private_channel }}", - "public_channel": "{{ koodiklinikka_api_slack_public_channel }}" - }, - "github": { - "token": "{{ koodiklinikka_api_github_api_token }}" - }, - "twitter": { - "consumerKey": "{{ koodiklinikka_api_twitter_consumer_key }}", - "consumerSecret": "{{ koodiklinikka_api_twitter_consumer_key_secret }}", - "token": "{{ koodiklinikka_api_twitter_token }}", - "tokenSecret": "{{ koodiklinikka_api_twitter_token_secret }}" - } - } -} diff --git a/roles/koodiklinikka.fi-api/templates/upstart.j2 b/roles/koodiklinikka.fi-api/templates/upstart.j2 deleted file mode 100644 index d854057..0000000 --- a/roles/koodiklinikka.fi-api/templates/upstart.j2 +++ /dev/null @@ -1,13 +0,0 @@ -description "koodiklinikka.fi API" -author "Riku Rouvila " - -start on runlevel [2345] -stop on runlevel [016] - -respawn -respawn limit 10 5 -env NODE_ENV=production -env PORT={{ koodiklinikka_api_port }} -exec su -s /bin/bash -c 'source {{ koodiklinikka_api_nvm_script }} && nvm use {{ koodiklinikka_api_project_name }} && cd {{ koodiklinikka_api_app_path }} && exec "$0" "$@"' {{ koodiklinikka_api_user }} -- \ - node index.js \ - >> /var/log/{{ koodiklinikka_api_project_name }}.log 2>&1 diff --git a/roles/koodiklinikka.fi/defaults/main.yml b/roles/koodiklinikka.fi/defaults/main.yml index b6d272f..48c41c4 100644 --- a/roles/koodiklinikka.fi/defaults/main.yml +++ b/roles/koodiklinikka.fi/defaults/main.yml @@ -6,3 +6,6 @@ koodiklinikka_nodejs_version: v0.10.25 koodiklinikka_app_path: /opt/web/koodiklinikka.fi koodiklinikka_nvm_script: /opt/web/nvm/nvm.sh koodiklinikka_user: web + +nvm_path: /opt/web/nvm +nvm_user: web diff --git a/roles/tohtori/defaults/main.yml b/roles/tohtori/defaults/main.yml index 0757228..141a70f 100644 --- a/roles/tohtori/defaults/main.yml +++ b/roles/tohtori/defaults/main.yml @@ -5,6 +5,3 @@ koodiklinikka_tohtori_user: tohtori koodiklinikka_tohtori_app_path: /opt/tohtori/tohtori koodiklinikka_tohtori_container_name: tohtori_bot - -ejson_public: 94f3af35ad208d7bc7e3ddf1f9d181d090e3a1c74f9d56851c4f0f1efb04b571 - diff --git a/roles/tohtori/tasks/build.yml b/roles/tohtori/tasks/build.yml index 54ca515..5ab0c8c 100644 --- a/roles/tohtori/tasks/build.yml +++ b/roles/tohtori/tasks/build.yml @@ -32,7 +32,7 @@ - name: kill old version shell: docker stop {{ koodiklinikka_tohtori_container_name }} - when: container is defined and container.changed and current_container_id != "" + 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}' diff --git a/rollback_api.yml b/rollback_api.yml new file mode 100644 index 0000000..10a9185 --- /dev/null +++ b/rollback_api.yml @@ -0,0 +1,7 @@ +--- +- name: Rollback api + hosts: application + vars_files: + - roles/koodiklinikka.fi-api/defaults/main.yml + tasks: + - include: roles/koodiklinikka.fi-api/tasks/rollback.yml