From 78cae6a79c501cba533b8e332a2ed57ad5d2b642 Mon Sep 17 00:00:00 2001 From: butomo1989 Date: Sat, 11 Feb 2017 22:46:41 +0100 Subject: [PATCH] Using supervisor --- Dockerfile | 30 +++++++++++++++++++++--------- service/start.py | 15 +++------------ supervisord.conf | 29 +++++++++++++++++++++++++++++ 3 files changed, 53 insertions(+), 21 deletions(-) create mode 100644 supervisord.conf diff --git a/Dockerfile b/Dockerfile index 295b0f7..914f36a 100644 --- a/Dockerfile +++ b/Dockerfile @@ -17,11 +17,20 @@ RUN apt-get install xvfb x11vnc -y #========================================================= RUN apt-get install openbox menu python-numpy net-tools -y +#==================== +# Install Supervisor +#==================== +RUN apt-get install supervisor -y + +#============= +# Set WORKDIR +#============= +WORKDIR /root + #====================== # Clone noVNC projects #====================== RUN apt-get install git -y -WORKDIR /root RUN git clone https://github.com/kanaka/noVNC.git && \ cd noVNC/utils && git clone https://github.com/kanaka/websockify websockify @@ -65,9 +74,10 @@ RUN npm install -g appium@$APPIUM_VERSION #============================================================ RUN apt-get install qemu-kvm libvirt-bin ubuntu-vm-builder bridge-utils -y -#====================== -# noVNC Configurations -#====================== +#================================================ +# noVNC Default Configurations +# These Configurations can be changed through -e +#================================================ ENV DISPLAY=:0 \ SCREEN=0 \ SCREEN_WIDTH=1600 \ @@ -75,7 +85,8 @@ ENV DISPLAY=:0 \ SCREEN_DEPTH=16 \ LOCAL_PORT=5900 \ TARGET_PORT=6080 \ - TIMEOUT=1 + TIMEOUT=1 \ + LOG_PATH=/var/log/supervisor RUN ln -s noVNC/vnc_auto.html noVNC/index.html #============== @@ -84,13 +95,14 @@ RUN ln -s noVNC/vnc_auto.html noVNC/index.html EXPOSE 4723 EXPOSE 6080 -#================= -# Add Browser Apk -#================= +#================== +# Add Browser APKs +#================== COPY example/browser_apk /root/browser_apk #=================== # Run docker-appium #=================== +COPY supervisord.conf /root/ COPY service /root/service -CMD python -m service.start +CMD /usr/bin/supervisord --configuration supervisord.conf diff --git a/service/start.py b/service/start.py index f6dd3c3..431670f 100644 --- a/service/start.py +++ b/service/start.py @@ -34,14 +34,6 @@ def run(): subprocess.check_call('ln -s $ANDROID_HOME/tools/{shortcut_file} $ANDROID_HOME/tools/emulator'.format( shortcut_file='emulator64-x86' if emulator_type == TYPE_X86 else 'emulator64-arm'), shell=True) - # Start Xvfb - subprocess.check_call('Xvfb ${DISPLAY} -screen ${SCREEN} ${SCREEN_WIDTH}x${SCREEN_HEIGHT}x${SCREEN_DEPTH} & ' - 'sleep ${TIMEOUT}', shell=True) - - # Start noVNC - vnc_cmd = 'openbox-session & x11vnc -display ${DISPLAY} -nopw -ncache 10 -forever & ' \ - './noVNC/utils/launch.sh --vnc localhost:${LOCAL_PORT} --listen ${TARGET_PORT}' - # Option to connect with selenium server connect_to_grid = str_to_bool(str(os.getenv('CONNECT_TO_GRID', False))) logger.info('Connect with selenium grid? {input}'.format(input=connect_to_grid)) @@ -61,12 +53,11 @@ def run(): # Start installation of android packages, emulator creation and appium in a terminal android_cmd = get_android_bash_commands(android_version, emulator_type) if android_cmd: - cmd = '({vnc}) & (xterm -T "Android-Appium" -n "Android-Appium" -e \"{android} && ' \ - '/bin/echo $EMULATOR_NAME && {appium}\")'.format( - vnc=vnc_cmd, android=android_cmd, appium=appium_cmd) + cmd = 'xterm -T "Android-Appium" -n "Android-Appium" -e \"{android} && ' \ + '/bin/echo $EMULATOR_NAME && {appium}\"'.format(android=android_cmd, appium=appium_cmd) else: logger.warning('There is no android packages installed!') - cmd = '({vnc}) & (xterm -e \"{appium}\")'.format(vnc=vnc_cmd, appium=appium_cmd) + cmd = 'xterm -e \"{appium}\"'.format(appium=appium_cmd) subprocess.check_call(cmd, shell=True) diff --git a/supervisord.conf b/supervisord.conf new file mode 100644 index 0000000..7730597 --- /dev/null +++ b/supervisord.conf @@ -0,0 +1,29 @@ +[supervisord] +nodaemon=true +logfile=%(ENV_LOG_PATH)s/supervisord.log +childlogdir=%(ENV_LOG_PATH)s + +[program:xvfb] +command=/usr/bin/Xvfb %(ENV_DISPLAY)s -screen %(ENV_SCREEN)s %(ENV_SCREEN_WIDTH)sx%(ENV_SCREEN_HEIGHT)sx%(ENV_SCREEN_DEPTH)s +stdout_logfile=%(ENV_LOG_PATH)s/xvfb.stdout.log +stderr_logfile=%(ENV_LOG_PATH)s/xvfb.stderr.log + +[program:openbox] +command=/usr/bin/openbox-session +stdout_logfile=%(ENV_LOG_PATH)s/openbox.stdout.log +stderr_logfile=%(ENV_LOG_PATH)s/openbox.stderr.log + +[program:x11vnc] +command=/usr/bin/x11vnc -display %(ENV_DISPLAY)s -nopw -ncache 10 -forever +stdout_logfile=%(ENV_LOG_PATH)s/x11vnc.stdout.log +stderr_logfile=%(ENV_LOG_PATH)s/x11vnc.stderr.log + +[program:novnc] +command=./noVNC/utils/launch.sh --vnc localhost:%(ENV_LOCAL_PORT)s --listen %(ENV_TARGET_PORT)s +stdout_logfile=%(ENV_LOG_PATH)s/novnc.stdout.log +stderr_logfile=%(ENV_LOG_PATH)s/novnc.stderr.log + +[program:docker-appium] +command=python -m service.start +stdout_logfile=%(ENV_LOG_PATH)s/docker-appium.stdout.log +stderr_logfile=%(ENV_LOG_PATH)s/docker-appium.stderr.log