Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
config/config.yml
config/travis.yml
config/worker.yml
config/worker-*
config/id_rsa*
37 changes: 0 additions & 37 deletions Dockerfile

This file was deleted.

85 changes: 84 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1 +1,84 @@
# docker-final-base-image
# Dockerized final-api application


## create base image
cd base-image
sudo docker build -t "final-ci/base-image:latest" .
cd ..

## create other app images
cd travis-logs
#create travis-logs image
sudo docker build -t "final-ci/travis-logs:latest" .
cd ../travis-hub

#create travis-hub image
sudo docker build -t "final-ci/travis-hub:latest" .
cd ../final-api

#create final-api image
sudo docker build -t "final-ci/final-api:latest" .
cd ../travis-worker

#create travis-worker image
sudo docker build -t "final-ci/travis-worker:latest" .
cd ..

## prepare custom configs
cp config/config.example.yml config/config.yml
#and adjust your users and repositories

cp config/travis.example.yml config/travis.yml
#and adjust your config for travis-hub, final-api and travis-logs

cp config/worker.example.yml config/worker.yml
#and adjust your config for travis-worker

## run pre-requisities
sudo docker run --name final-postgress -e POSTGRES_PASSWORD=mysecretpassword -d postgres:9.3
sudo docker run --name final-redis -d redis:3.0.3
sudo docker run --name final-rabbitmq -d rabbitmq:3.5.3

## run travis services in development mode

cd config
#logs
sudo docker run --link final-postgress:postgresql --link final-redis:redis --link final-rabbitmq:rabbitmq --name final-travis-logs --rm -v `pwd`/travis.yml:/travis.yml -v /mnt/data:/var/log/finalci/logs -e ENV=development -t 'final-ci/travis-logs:latest'

#hub
sudo docker run --link final-postgress:postgresql --link final-redis:redis --link final-rabbitmq:rabbitmq --name final-travis-hub --rm -v `pwd`/travis.yml:/travis.yml -v `pwd`/database.yml:/database.yml -v `pwd`/config.yml:/config.yml -e ENV=development -t 'final-ci/travis-hub:latest'

#api
sudo docker run --link final-postgress:postgresql --link final-redis:redis --link final-rabbitmq:rabbitmq --name final-api --rm -v `pwd`/travis.yml:/travis.yml -v /mnt/data:/var/log/finalci/logs -p 55555:55555 -e ENV=development -t 'final-ci/final-api:latest'

#worker
sudo docker run --link final-postgress:postgresql --link final-redis:redis --link final-rabbitmq:rabbitmq --name travis-worker-docker --rm -v `pwd`/worker.yml:/worker.yml -v /var/run/docker.sock:/var/run/docker.sock -v `pwd`/id_rsa:/id_rsa -e ENV=development -t 'final-ci/travis-worker:latest'
cd ..

## run travis services in production mode

cd config
#logs
sudo docker run --link final-postgress:postgresql --link final-redis:redis --link final-rabbitmq:rabbitmq --name final-travis-logs --rm -v `pwd`/travis.yml:/travis.yml -v /mnt/data:/var/log/finalci/logs -e ENV=production -t 'final-ci/travis-logs:latest'

#hub
sudo docker run --link final-postgress:postgresql --link final-redis:redis --link final-rabbitmq:rabbitmq --name final-travis-hub --rm -v `pwd`/travis.yml:/travis.yml -v `pwd`/database.yml:/database.yml -v `pwd`/config.yml:/config.yml -e ENV=production -t 'final-ci/travis-hub:latest'

#api
sudo docker run --link final-postgress:postgresql --link final-redis:redis --link final-rabbitmq:rabbitmq --name final-api --rm -v `pwd`/travis.yml:/travis.yml -v /mnt/data:/var/log/finalci/logs -p 55555:55555 -e ENV=production -t 'final-ci/final-api:latest'

#worker
sudo docker run --link final-postgress:postgresql --link final-redis:redis --link final-rabbitmq:rabbitmq --name travis-worker-docker --rm -v `pwd`/worker.yml:/worker.yml -v /var/run/docker.sock:/var/run/docker.sock -v `pwd`/id_rsa:/id_rsa -e ENV=production -t 'final-ci/travis-worker:latest'
cd ..

## test dockerized application
git clone https://github.com/final-ci/final-runner.git
cd final-runner

#test application
ruby ./run.rb -d -b http://localhost:55555 ./examples/stash-payload.json

#it should be noted that some fields from stash-payload.json file
#should be adjusted according to your current configuration files before testing of specific environment.


55 changes: 55 additions & 0 deletions base-image/Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
FROM ubuntu:14.04.2
MAINTAINER Lukáš Svoboda <[email protected]>

ENV DEBIAN_FRONTEND noninteractive

RUN useradd -m -s /bin/bash travis
RUN chown -R travis:travis /home/travis
RUN echo 'travis ALL=(ALL) NOPASSWD:ALL' >> /etc/sudoers

RUN update-locale LANG=C.UTF-8 LC_MESSAGES=POSIX && \
locale-gen en_US.UTF-8 && \
dpkg-reconfigure locales

RUN apt-get update && \
apt-get install -y \
build-essential \
curl \
git-core \
libssl-dev \
libreadline-dev \
libyaml-dev \
libxml2-dev \
libxslt-dev \
libcurl4-openssl-dev \
libffi-dev \
python-software-properties \
libpq-dev \
zlib1g-dev \
wget

USER travis

ENV CONFIGURE_OPTS --disable-install-doc
RUN echo 'gem: --no-rdoc --no-ri' >> /home/travis/.gemrc

RUN curl -sSL https://rvm.io/mpapis.asc | gpg --import -
#RUN gpg --keyserver hkp://keys.gnupg.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3
RUN curl -sSL https://get.rvm.io | bash -s stable --ruby=2.2,2.2.2,2.1.5,jruby-1.7.16,jruby-1.7.18,jruby-1.7.19 --gems=foreman

# because invalid .gemspec file in remote gem https://github.com/joshk/sshjr/issues/3
# old version of bundler does not validate .gemspec file
RUN /bin/bash -lc 'source /home/travis/.rvm/scripts/rvm ; rvm 1.7.16,1.7.18,1.7.19,2.1.5,2.2.1,2.2.2 do gem install bundler -v 1.9.4'

ENV FINAL_VERSION master

USER root

COPY "./assets/*" "/home/travis/"

RUN [ "chown", "travis:travis", "/home/travis/prepare_version.sh", "/home/travis/start", "/home/travis/init.sh", "/home/travis/convert_config.rb", "/home/travis/env.sh", "/home/travis/default_db_content.rb"]

# in normal environment this should be removed
# RUN [ "git", "config", "--global", "url.\"https://\".insteadOf", "git://" ]
# RUN [ "git", "config", "--global", "url.\"https://\".insteadOf", "ssh://" ]

5 changes: 5 additions & 0 deletions base-image/assets/convert_config.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
require 'erb'
require 'yaml'

puts YAML.load(ERB.new(ARGF.gets(nil)).result).to_yaml

28 changes: 28 additions & 0 deletions base-image/assets/default_db_content.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
#!/usr/bin/env ruby

require 'bundler/setup'
require 'travis'

config = YAML.load(ARGF.gets(nil)).deep_symbolize_keys!
Travis::Database.connect

config[:users].each do |u|
User.where(name: u[:name]).first_or_create(u).update_attributes(u)
end

config[:repos].each do |r|
new_r = r.merge(owner: User.where(name: r[:owner_name]).first)
Repository.where(name: r[:name], url: r[:url]).first_or_create(new_r).update_attributes(new_r)
end

config[:users].each do |u|
if u.has_key?(:permit_repos)
u[:permit_repos].each do |r|
owner_name, repo_name = r[:slug].to_s.split('/', 2)
owner = User.where(name: owner_name).first
repo = Repository.find_by_name(repo_name)
puts owner.permissions.first_or_initialize({user: owner, repository: repo}).update_attributes(r[:permissions])
end
end
end

19 changes: 19 additions & 0 deletions base-image/assets/env.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
#!/bin/bash

export ENV=${ENV:-"production"}

export FINAL_LOGS_DATABASE=${FINAL_LOGS_DATABASE:-"travis_logs_${ENV}"}
export FINAL_DATABASE=${FINAL_DATABASE:-"travis_${ENV}"}
export FINAL_AMQP_VHOST=${FINAL_AMQP_VHOST:-"travis_${ENV}"}
export FINAL_OUTPUT_LOGS_DIR=${FINAL_OUTPUT_LOGS_DIR:-"/var/log/finalci/logs"}
export RAILS_ENV=${RAILS_ENV:-${ENV}}
export RACK_ENV=${RACK_ENV:-${ENV}}

#see man login(1) and ENVIRON(7)
SHELL=/bin/bash
USER=${USER:-"travis"}
LOGNAME=travis
LC_MESSAGES=POSIX
LANG=en_US.UTF-8

source ~/.rvm/scripts/rvm
5 changes: 5 additions & 0 deletions base-image/assets/init.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
#!/bin/bash

source ~/.rvm/scripts/rvm


32 changes: 32 additions & 0 deletions base-image/assets/prepare_version.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
#!/bin/bash

source ~/env.sh

CCOMMIT_FILE=/home/travis/$PROJECT_NAME/.current-commit
[ -f $CCOMMIT_FILE ] && [ $FINAL_VERSION == $(cat $CCOMMIT_FILE) ] && exit 0

echo "The requested version needs to be re-checked out....."

cd ~

if [ ! -d $PROJECT_NAME ]; then
git clone $GIT_URL $PROJECT_NAME
fi

cd $PROJECT_NAME
if ! mountpoint -q /home/travis/$PROJECT_NAME; then
echo -n "" > $CCOMMIT_FILE #in case that this script fails
git fetch
git checkout $FINAL_VERSION
fi

#because of rvm and correct ruby version
cd ..
cd $PROJECT_NAME

git config --global url."https://".insteadof git://

bundle install --jobs 8

git rev-parse HEAD > $CCOMMIT_FILE

32 changes: 32 additions & 0 deletions base-image/assets/start
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
#!/bin/bash

source ~/env.sh

cd ~/$PROJECT_NAME

~/prepare_version.sh

if ! mountpoint -q ~/$PROJECT_NAME; then

for file in travis.yml worker.yml; do
if [ ! -f "$HOME/${PROJECT_NAME}/config/$file" -a -f "/$file" ] ; then
ruby ~/convert_config.rb < "/$file" > "$HOME/$PROJECT_NAME/config/$file"
fi
done

for file in database.yml config.yml; do
if [ -f "/$file" ] ; then
ruby ~/convert_config.rb < "/$file" > "$HOME/$PROJECT_NAME/config/$file"
fi
done

fi

~/init.sh

if [ -n "$1" ] ; then
exec "$@"
else
foreman start
fi

43 changes: 43 additions & 0 deletions config/config.example.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
users:
- name: FIN
login: FIN
email: [email protected]
- name: ATT
login: ATT
email: [email protected]
- name: STS
login: STS
email: [email protected]
permit_repos:
- slug: FIN/test-repo
permissions:
admin: false
push: false
pull: false
- slug: ATT/att-ng
permissions:
admin: true
push: true
pull: true

#
repos:
- name: test-repo
url: https://stash.yourcompany.com/projects/FIN/repos/test-repo/browse
active: true
private: false
provider: stash
owner_name: FIN
- name: atom-ng
url: https://stash.yourcompany.com/projects/ATT/repos/att-ng/browse
active: true
private: false
provider: stash
owner_name: ATT
- name: build-scripts
url: https://stash.yourcompany.com/projects/STS/repos/test-repo/browse
active: true
private: false
provider: stash
owner_name: STS

28 changes: 28 additions & 0 deletions config/database.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
defaults: &defaults
adapter: postgresql
encoding: unicode
pool: 5
min_messages: warning
username: postgres
port: <%= ENV['POSTGRESQL_PORT_5432_TCP_PORT'] %>
password: <%= ENV['POSTGRESQL_ENV_POSTGRES_PASSWORD'] %>
host: <%= ENV['POSTGRESQL_PORT_5432_TCP_ADDR'] %>
development:
<<: *defaults
database: <%= ENV['FINAL_DATABASE'] %>
redis:
url: redis://<%= ENV['REDIS_PORT_6379_TCP_ADDR'] %>:<%= ENV['REDIS_PORT_6379_TCP_PORT'] %>/0

production:
<<: *defaults
database: <%= ENV['FINAL_DATABASE'] %>
redis:
url: redis://<%= ENV['REDIS_PORT_6379_TCP_ADDR'] %>:<%= ENV['REDIS_PORT_6379_TCP_PORT'] %>/0

test:
<<: *defaults
database: <%= ENV['FINAL_DATABASE'] %>
redis:
url: redis://<%= ENV['REDIS_PORT_6379_TCP_ADDR'] %>:<%= ENV['REDIS_PORT_6379_TCP_PORT'] %>/0


Loading