koodiklinikka.fi-api from container

This commit is contained in:
Niko Kurtti
2015-03-29 13:46:02 +03:00
parent b0896cf178
commit c78dd3d366
10 changed files with 80 additions and 76 deletions

View File

@@ -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

View File

@@ -1,6 +0,0 @@
---
- name: restart service
sudo: true
service: >
name={{ koodiklinikka_api_project_name }}
state=restarted

View File

@@ -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 "^<none>" | awk '{print $3}'
register: old_images
- name: clean untagged (old) images
shell: docker rmi $(docker images -a | grep "^<none>" | awk '{print $3}')
when: old_images.stdout != ""
ignore_errors: yes

View File

@@ -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

View File

@@ -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 }}"
}
}
}

View File

@@ -1,13 +0,0 @@
description "koodiklinikka.fi API"
author "Riku Rouvila <riku.rouvila@gmail.com>"
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

View File

@@ -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

View File

@@ -5,6 +5,3 @@ koodiklinikka_tohtori_user: tohtori
koodiklinikka_tohtori_app_path: /opt/tohtori/tohtori
koodiklinikka_tohtori_container_name: tohtori_bot
ejson_public: 94f3af35ad208d7bc7e3ddf1f9d181d090e3a1c74f9d56851c4f0f1efb04b571

View File

@@ -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}'

7
rollback_api.yml Normal file
View File

@@ -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