#Monit setup script for opnfv jnlp slave connections
test_firewall() {
- echo "testing that the firewall is open for us at build.opnfv.org"
- test=$(echo "blah"| nc -w 4 build.opnfv.org 57387 > /dev/null 2>&1; echo $?)
+jenkins_hostname="${jenkins_hostname:-build.opnfv.org}"
+
+
+ echo "testing that the firewall is open for us at $jenkins_hostname"
+ test=$(echo "blah"| nc -w 4 $jenkins_hostname 57387 > /dev/null 2>&1; echo $?)
if [[ $test == 0 ]]; then
- echo "Firewall is open for us at build.opnfv.org"
+ echo "Firewall is open for us at $jenkins_hostname"
exit 0
else
cat << EOF
fi
if [[ $(whoami) != "root" ]]; then
- if sudo -l | grep "requiretty"; then
+ if sudo -l | grep "requiretty" | grep -v "\!requiretty"; then
echo "please comment out Defaults requiretty from /etc/sudoers"
exit 1
fi
#make pid dir
pidfile="/var/run/$jenkinsuser/jenkins_jnlp_pid"
if ! [ -d /var/run/$jenkinsuser/ ]; then
- mkdir /var/run/$jenkinsuser/
- chown $jenkinsuser:$jenkinsuser /var/run/$jenkinsuser/
+ sudo mkdir /var/run/$jenkinsuser/
+ sudo chown $jenkinsuser:$jenkinsuser /var/run/$jenkinsuser/
fi
if [[ $skip_monit != true ]]; then
if [ -d /etc/monit/conf.d ]; then
monitconfdir="/etc/monit/conf.d/"
+ monitconfig="/etc/monit/monitrc"
+ #add start delay
+ sed -i '/^#.* delay /s/^#//' "$monitconfig"
elif [ -d /etc/monit.d ]; then
monitconfdir="/etc/monit.d"
+ monitconfig="/etc/monitrc"
+ #add start delay
+ sed -i '/^#.* delay /s/^#//' "$monitconfig"
else
echo "Could not determine the location of the monit configuration file."
echo "Make sure monit is installed."
exit 1
fi
+ chown=$(type -p chown)
+ mkdir=$(type -p mkdir)
+
makemonit () {
echo "Writing the following as monit config:"
cat << EOF | tee $monitconfdir/jenkins
+check directory jenkins_piddir path /var/run/$jenkinsuser
+if does not exist then exec "$mkdir -p /var/run/$jenkinsuser"
+if failed uid $jenkinsuser then exec "$chown $jenkinsuser /var/run/$jenkinsuser"
+if failed gid $jenkinsuser then exec "$chown :$jenkinsuser /var/run/$jenkinsuser"
+
check process jenkins with pidfile /var/run/$jenkinsuser/jenkins_jnlp_pid
start program = "/usr/bin/sudo -u $jenkinsuser /bin/bash -c 'cd $jenkinshome; export started_monit=true; $0 $@' with timeout 60 seconds"
stop program = "/bin/bash -c '/bin/kill \$(/bin/cat /var/run/$jenkinsuser/jenkins_jnlp_pid)'"
+depends on jenkins_piddir
EOF
}
if [[ -f $monitconfdir/jenkins ]]; then
#test for diff
if [[ "$(diff $monitconfdir/jenkins <(echo "\
+check directory jenkins_piddir path /var/run/$jenkinsuser
+if does not exist then exec \"$mkdir -p /var/run/$jenkinsuser\"
+if failed uid $jenkinsuser then exec \"$chown $jenkinsuser /var/run/$jenkinsuser\"
+if failed gid $jenkinsuser then exec \"$chown :$jenkinsuser /var/run/$jenkinsuser\"
+
check process jenkins with pidfile /var/run/$jenkinsuser/jenkins_jnlp_pid
start program = \"/usr/bin/sudo -u $jenkinsuser /bin/bash -c 'cd $jenkinshome; export started_monit=true; $0 $@' with timeout 60 seconds\"
-stop program = \"/bin/bash -c '/bin/kill \$(/bin/cat /var/run/$jenkinsuser/jenkins_jnlp_pid)'\"\
+stop program = \"/bin/bash -c '/bin/kill \$(/bin/cat /var/run/$jenkinsuser/jenkins_jnlp_pid)'\"
+depends on jenkins_piddir\
") )" ]]; then
echo "Updating monit config..."
makemonit $@
fi
fi
-if [[ $started_monit == "true" ]]; then
- wget --timestamping https://build.opnfv.org/ci/jnlpJars/slave.jar && true
- chown $jenkinsuser:$jenkinsuser slave.jar
+ if [[ $started_monit == "true" ]]; then
+ wget --timestamping https://"$jenkins_hostname"/jnlpJars/slave.jar && true
+ chown $jenkinsuser:$jenkinsuser slave.jar
- if [[ -f /var/run/$jenkinsuser/jenkins_jnlp_pid ]]; then
- echo "pid file found"
- if ! kill -0 "$(/bin/cat /var/run/$jenkinsuser/jenkins_jnlp_pid)"; then
- echo "no java process running cleaning up pid file"
- rm -f /var/run/$jenkinsuser/jenkins_jnlp_pid;
- else
- echo "java connection process found and running already running quitting."
- exit 1
+ if [[ -f /var/run/$jenkinsuser/jenkins_jnlp_pid ]]; then
+ echo "pid file found"
+ if ! kill -0 "$(/bin/cat /var/run/$jenkinsuser/jenkins_jnlp_pid)"; then
+ echo "no java process running cleaning up pid file"
+ rm -f /var/run/$jenkinsuser/jenkins_jnlp_pid;
+ else
+ echo "java connection process found and running already running quitting."
+ exit 1
+ fi
fi
- fi
- if [[ $run_in_foreground == true ]]; then
- $connectionstring
+ if [[ $run_in_foreground == true ]]; then
+ $connectionstring
+ else
+ exec $connectionstring &
+ echo $! > /var/run/$jenkinsuser/jenkins_jnlp_pid
+ fi
else
- exec $connectionstring &
- echo $! > /var/run/$jenkinsuser/jenkins_jnlp_pid
+ echo "you are ready to start monit"
+ echo "eg: service monit start"
+ echo "example debug mode if you are having problems: /usr/bin/monit -Ivv -c /etc/monit.conf "
+ exit 0
fi
-else
- echo "you are ready to start monit"
- echo "eg: service monit start"
- echo "example debug mode if you are having problems: /usr/bin/monit -Ivv -c /etc/monit.conf "
- exit 0
-fi
}
usage() {
-u set jenkins user
-n set slave name
-s set secret key
+ -l set host, default is build.opnfv.org/ci
-t test the connection string by connecting without monit
-f test firewall
-Example: $0 -j /home/jenkins/ -u jenkins -n lab1 -s 727fdefoofoofoofoofoofoofof800
+Example: $0 -j /home/jenkins -u jenkins -n lab1 -s 727fdefoofoofoofoofoofoofof800
+note: a trailing slash on -j /home/jenkins will break the script
EOF
exit 1
usage
fi
-while getopts "j:u:n:s:htf" OPTION
+while getopts "j:u:n:s:l:htf" OPTION
do
case $OPTION in
j ) jenkinshome="$OPTARG" ;;
u ) jenkinsuser="$OPTARG" ;;
n ) slave_name="$OPTARG" ;;
s ) slave_secret="$OPTARG";;
+ l ) jenkins_hostname="$OPTARG" ;;
h ) usage ;;
t ) started_monit=true
skip_monit=true
esac
done
-connectionstring="java -jar slave.jar -jnlpUrl https://build.opnfv.org/ci/computer/"$slave_name"/slave-agent.jnlp -secret "$slave_secret" -noCertificateCheck "
-
+jenkins_hostname="${jenkins_hostname:-build.opnfv.org/ci}"
+connectionstring="java -jar slave.jar -jnlpUrl https://"$jenkins_hostname"/computer/"$slave_name"/slave-agent.jnlp -secret "$slave_secret" -noCertificateCheck "
main "$@"