From 3130486a3417e91c6040ca625ff05cbb301787fd Mon Sep 17 00:00:00 2001 From: Julien Vehent Date: Tue, 7 Mar 2017 11:43:06 -0500 Subject: [PATCH] [minor] build standalone instance into Docker container --- .travis.yml | 21 ++++++++++++++------- Dockerfile | 22 ++++++++++++++++++++++ tools/standalone_install.sh | 24 +++++++++++++++++------- tools/standalone_start_all.sh | 10 ++++++++++ 4 files changed, 63 insertions(+), 14 deletions(-) create mode 100644 Dockerfile create mode 100644 tools/standalone_start_all.sh diff --git a/.travis.yml b/.travis.yml index c9cb58dd..1bc6a063 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,17 +1,12 @@ language: go go: - - 1.7.3 + - 1.8 addons: postgresql: "9.4" notifications: irc: channels: - "irc.mozilla.org#mig" - email: - recipients: - - ulfr@mozilla.com - on_success: never - on_failure: always before_install: # this is a fix to get rng-tools to work in travis-ci - sudo apt-get update -qq @@ -33,6 +28,18 @@ script: - diff client/mig/available_modules.go conf/available_modules.go - sed -i 's,//_,_,' conf/available_modules.go - make - - yes | bash tools/standalone_install.sh + - docker build -t mozilla/mig . - ./bin/linux/amd64/mig-agent-latest -i actions/example_v2.json - ./bin/linux/amd64/mig scribe -t all -z -path actions/scribe/usn-2015.json -onlytrue -human + # If a TRAVIS_TAG is set, this build follows a git tag --push and should trigger + # a release of a tagged container to dockerhub. Otherwise, we tag as latest. + - | + docker login -e $DOCKER_EMAIL -u $DOCKER_USER -p $DOCKER_PASS + if [ ! -z "$TRAVIS_TAG" ]; then + docker tag app:build mozilla/mig:${TRAVIS_TAG} + docker push mozilla/mig:${TRAVIS_TAG} + else + docker tag app:build mozilla/mig:latest + docker push mozilla/mig:latest + fi + docker logout diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 00000000..07df8944 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,22 @@ +FROM golang:1.8 +MAINTAINER Mozilla + +RUN apt update && \ + apt install sudo && \ + echo '%mig ALL=(ALL:ALL) NOPASSWD:ALL' > /etc/sudoers.d/mig && \ + addgroup --gid 10001 mig && \ + adduser --gid 10001 --uid 10001 \ + --home /mig \ + --disabled-password mig + +ADD . /go/src/mig.ninja/mig +RUN chown mig /go -R + +USER mig +RUN cd /go/src/mig.ninja/mig && \ + yes | bash ./tools/standalone_install.sh && \ + cp /go/src/mig.ninja/mig/tools/standalone_start_all.sh /mig/start.sh && \ + chmod +x /mig/start.sh + +WORKDIR /mig +CMD /mig/start.sh && /bin/bash diff --git a/tools/standalone_install.sh b/tools/standalone_install.sh index 84aef68e..f0a811cf 100644 --- a/tools/standalone_install.sh +++ b/tools/standalone_install.sh @@ -140,6 +140,16 @@ sudo chown mig /usr/local/bin/mig || fail sudo chmod 555 /usr/local/bin/mig || fail echo -e "\n---- Building Database\n" +sudo service postgresql restart +# wait for db to start +pgstarted=0 +for i in $(seq 1 30); do + echo -n '.' + sleep 1 + [ -S /var/run/postgresql/.s.PGSQL.5432 ] && pgstarted=1 && break +done +[ $pgstarted -eq 1 ] || fail + cd database/ dbpass=$(cat /dev/urandom | tr -dc _A-Z-a-z-0-9 | head -c${1:-32}) sudo su - postgres -c "psql -c 'drop database mig'" @@ -161,10 +171,10 @@ sudo chown mig /var/cache/mig -R || fail sudo chown mig /etc/mig || fail echo -e "\n---- Configuring RabbitMQ\n" -(ps faux|grep "/var/lib/rabbitmq"|grep -v grep) 2>&1 1> /dev/null -if [ $? -gt 0 ]; then - sudo service rabbitmq-server restart || fail -fi + +echo 'NODENAME=rabbit@localhost' > /etc/rabbitmq/rabbitmq-env.conf +sudo service rabbitmq-server restart || fail + mqpass=$(cat /dev/urandom | tr -dc _A-Z-a-z-0-9 | head -c${1:-32}) sudo rabbitmqctl delete_user admin sudo rabbitmqctl add_user admin $mqpass || fail @@ -226,8 +236,8 @@ echo OK echo -e "\n---- Starting Scheduler and API in TMUX under mig user\n" sudo su mig -c "/usr/bin/tmux new-session -s 'mig' -d" sudo su mig -c "/usr/bin/tmux new-window -t 'mig' -n '0' '/usr/local/bin/mig-scheduler'" -sudo su mig -c "/usr/bin/tmux new-window -t 'mig' -n '0' '/usr/local/bin/mig-api'" -sudo su mig -c "/usr/bin/tmux new-window -t 'mig' -n '0' '/usr/local/bin/mig_agent_verif_worker'" +sudo su mig -c "/usr/bin/tmux new-window -t 'mig' -n '1' '/usr/local/bin/mig-api'" +sudo su mig -c "/usr/bin/tmux new-window -t 'mig' -n '2' '/usr/local/bin/mig_agent_verif_worker'" echo OK # Unset proxy related environment variables from this point on, since we want to ensure we are @@ -339,7 +349,7 @@ make mig-agent AGTCONF=conf/mig-agent-conf.go BUILDENV=demo || fail sudo cp bin/linux/amd64/mig-agent-latest /sbin/mig-agent || fail sudo chown root /sbin/mig-agent || fail sudo chmod 500 /sbin/mig-agent || fail -sudo /sbin/mig-agent +sudo su mig -c "/usr/bin/tmux new-window -t 'mig' -n '2' 'sudo /sbin/mig-agent -d'" sleep 5 /usr/local/bin/mig -i actions/integration_tests.json diff --git a/tools/standalone_start_all.sh b/tools/standalone_start_all.sh new file mode 100644 index 00000000..ed037dea --- /dev/null +++ b/tools/standalone_start_all.sh @@ -0,0 +1,10 @@ +#!/usr/bin/env bash +sudo service rabbitmq-server restart +sudo service postgresql restart +sleep 10 +sudo tmux -S /tmp/tmux-$(id -u mig)/default kill-session -t mig || echo "OK - No running MIG session found" +tmux new-session -s 'mig' -d +tmux new-window -t 'mig' -n '0' '/usr/local/bin/mig-scheduler' +tmux new-window -t 'mig' -n '1' '/usr/local/bin/mig-api' +tmux new-window -t 'mig' -n '2' 'sudo /sbin/mig-agent -d' +echo 'scheduler, api and agent started in tmux session, use "tmux attach" to open it'