Bug Tracker YouTrack

20 February 2016

I've been using Redmine as help desk and bug tracker since it has all the features/plugins you could ask for for a help desk or a bug tracker. But tracking bugs and issues has changed lately. When fixing bugs, you need to put in your estimate so you will have a pretty good idea how much effort you are putting into it. This is probably one of the reasons why RedmineCRM premium plugins exists. The lack of planning tools in RedmineCRM pushed me further to use Acunote. This is hosted online and free for a team of 5 users but 5 is very
limiting. Acunote also lacks the tooling support you will get from Jira, FogBugz and the likes.

Since I don't need enterprise solution at the moment so I'll give YouTrack a try. It's free for the first 10 users so I actually doubled what Acunote is offering for free. As with Jira, FogBugz or Acunote, it has hosted solution too.

Downloading YouTrack

$ wget https://download.jetbrains.com/charisma/youtrack-6.0.12634.jar
HTTP request sent, awaiting response... 200 OK
Length: 111007822 (106M) [binary/octet-stream]
Saving to: ‘youtrack-6.0.12634.jar’
100%[======================================>] 111,007,822 4.93MB/s   in 26s

Running YouTrack

You can run youtrack by executing this

$ java -Xmx1g -XX:MaxPermSize=250m -Djava.awt.headless=true -jar youtrack-6.0.12634.jar localhost:8112/youtrack

This will automatically open your browser to http://localhost:8112/youtrack. After adding the root account, you can start creating your first project.

YouTrack agile board

NOTE: These scripts are optional.

/etc/init.d/youtrack

#! /bin/sh
### BEGIN INIT INFO
# Provides:          youtrack
# Required-Start:    $local_fs $remote_fs
# Required-Stop:     $local_fs $remote_fs
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: initscript for youtrack
# Description:       initscript for youtrack
### END INIT INFO

export HOME=/home/drmanalo

set -e

PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
NAME=youtrack
OWNER=drmanalo
SCRIPT=/opt/$NAME/$NAME.sh

d_start() {
    su $OWNER -l -c "$SCRIPT start"
}

d_stop() {
    su $OWNER -l -c "$SCRIPT stop"
}

case "$1" in
  start)
    echo "Starting $NAME..."
    d_start
    ;;
    stop)
    echo "Stopping $NAME..."
    d_stop
    ;;
  restart|force-reload)
    echo "Restarting $NAME..."
    d_stop
    d_start
    ;;
  *)
    echo "Usage: sudo /etc/init.d/youtrack {start|stop|restart}" >&2
    exit 1
    ;;
esac

exit 0

/opt/youtrack/youtrack.sh

#! /bin/sh

export HOME=/home/drmanalo
export JAVA_HOME=/opt/jdk/jdk1.8.0_05

NAME=youtrack
PORT=8112
INSTALL_FOLDER=/opt/$NAME
JAR=$INSTALL_FOLDER/`ls -Lt $INSTALL_FOLDER/*.jar | grep -o "$NAME-[^/]*.jar" | head -1`
LOG=$INSTALL_FOLDER/$NAME-$PORT.log
PID=$INSTALL_FOLDER/$NAME-$PORT.pid

d_start() {
    if [ -f $PID ]; then
        PID_VALUE=`cat $PID`
        if [ ! -z "$PID_VALUE" ]; then
            PID_VALUE=`ps ax | grep $PID_VALUE | grep -v grep | awk '{print $1}'`
            if [ ! -z "$PID_VALUE" ]; then
                exit 1;
            fi
        fi
    fi

    PREV_DIR=`pwd`
    cd $INSTALL_FOLDER
    exec $JAVA_HOME/bin/java -Xmx1g -jar $JAR $PORT >> $LOG 2>&1 &
    echo $! > $PID
    cd $PREV_DIR
}

d_stop() {
    if [ -f $PID ]; then
        PID_VALUE=`cat $PID`
        if [ ! -z "$PID_VALUE" ]; then
            PID_VALUE=`ps ax | grep $PID_VALUE | grep -v grep | awk '{print $1}'`
            if [ ! -z "$PID_VALUE" ]; then
                kill $PID_VALUE
                WAIT_TIME=0
                while [ `ps ax | grep $PID_VALUE | grep -v grep | wc -l` -ne 0 -a "$WAIT_TIME" -lt 2 ]
                do
                    sleep 1
                    WAIT_TIME=$(expr $WAIT_TIME + 1)
                done
                if [ `ps ax | grep $PID_VALUE | grep -v grep | wc -l` -ne 0 ]; then
                    WAIT_TIME=0
                    while [ `ps ax | grep $PID_VALUE | grep -v grep | wc -l` -ne 0 -a "$WAIT_TIME" -lt 15 ]
                    do
                        sleep 1
                        WAIT_TIME=$(expr $WAIT_TIME + 1)
                    done
                    echo
                fi
                if [ `ps ax | grep $PID_VALUE | grep -v grep | wc -l` -ne 0 ]; then
                    kill -9 $PID_VALUE
                fi
           fi
        fi
        rm -f $PID
    fi
}

case "$1" in
    start)
        d_start
    ;;
    stop)
        d_stop
    ;;
    *)
        echo "Usage: $0 {start|stop|restart}" >&2
        exit 1
    ;;
esac

exit 0

YouTrack as service

$ sudo update-rc.d youtrack defaults
Adding system startup for /etc/init.d/youtrack ...
   /etc/rc0.d/K20youtrack -> ../init.d/youtrack
   /etc/rc1.d/K20youtrack -> ../init.d/youtrack
   /etc/rc6.d/K20youtrack -> ../init.d/youtrack
   /etc/rc2.d/S20youtrack -> ../init.d/youtrack
   /etc/rc3.d/S20youtrack -> ../init.d/youtrack
   /etc/rc4.d/S20youtrack -> ../init.d/youtrack
   /etc/rc5.d/S20youtrack -> ../init.d/youtrack