2 # SPDX-license-identifier: Apache-2.0
3 ##############################################################################
4 # Copyright (c) 2016 Linux Foundation and others.
5 # All rights reserved. This program and the accompanying materials
6 # are made available under the terms of the Apache License, Version 2.0
7 # which accompanies this distribution, and is available at
8 # http://www.apache.org/licenses/LICENSE-2.0
9 ##############################################################################
11 #Monit setup script for opnfv jnlp slave connections
14 echo "testing that the firewall is open for us at build.opnfv.org"
15 test=$(echo "blah"| nc -w 4 build.opnfv.org 57387 > /dev/null 2>&1; echo $?)
16 if [[ $test == 0 ]]; then
17 echo "Firewall is open for us at build.opnfv.org"
21 LF firewall not open, please send a report to helpdesk with your gpg key attached, or better yet upload it to the key servers. (I should be able to find it with gpg --search-keys your@company.email.com
22 opnfv-helpdesk@rt.linuxfoundation.org
23 Jenkins Home: $jenkinshome
24 Jenkins User: $jenkinsuser
25 Slave Name: $slave_name
26 IP Address: $(curl -s http://icanhazip.com)
33 dir=$(cd $(dirname $0); pwd)
36 if [[ -z $jenkinsuser || -z $jenkinshome ]]; then
37 echo "jenkinsuser or home not defined, please edit this file to define it"
41 if [[ $(pwd) != "$jenkinshome" ]]; then
42 echo "This script needs to be run from the jenkins users home dir"
46 if [[ -z $slave_name || -z $slave_secret ]]; then
47 echo "slave name or secret not defined, please edit this file to define it"
51 if [[ $(whoami) != "root" && $(whoami) != "$jenkinsuser" ]]; then
52 echo "This script must be run as user root or jenkins user"
56 if [[ $(whoami) != "root" ]]; then
57 if sudo -l | grep "requiretty"; then
58 echo "please comment out Defaults requiretty from /etc/sudoers"
64 if [ -d /etc/monit/conf.d ]; then
65 monitconfdir="/etc/monit/conf.d/"
66 elif [ -d /etc/monit.d ]; then
67 monitconfdir="/etc/monit.d"
69 echo "Could not determine the location of the monit configuration file."
70 echo "Make sure monit is installed."
75 pidfile="/var/run/$jenkinsuser/jenkins_jnlp_pid"
76 if ! [ -d /var/run/$jenkinsuser/ ]; then
77 mkdir /var/run/$jenkinsuser/
78 chown $jenkinsuser:$jenkinsuser /var/run/$jenkinsuser/
81 if [[ $skip_monit != true ]]; then
83 if [ $(which monit) ]; then
84 echo "monit installed"
86 if [ -n "$(command -v yum)" ]; then
87 echo "please install monit; eg: yum -y install monit"
89 elif [ -n "$(command -v apt-get)" ]; then
90 echo "please install monit; eg: apt-get install -y monit"
93 echo "system not supported plese contact help desk"
100 echo "Writing the following as monit config:"
101 cat << EOF | tee $monitconfdir/jenkins
102 check process jenkins with pidfile /var/run/$jenkinsuser/jenkins_jnlp_pid
103 start program = "/usr/bin/sudo -u $jenkinsuser /bin/bash -c 'cd $dir; export started_monit=true; $0 $@' with timeout 60 seconds"
104 stop program = "/bin/bash -c '/bin/kill \$(/bin/cat /var/run/$jenkinsuser/jenkins_jnlp_pid)'"
108 if [[ -f $monitconfdir/jenkins ]]; then
110 if [[ "$(diff $monitconfdir/jenkins <(echo "\
111 check process jenkins with pidfile /var/run/$jenkinsuser/jenkins_jnlp_pid
112 start program = \"/usr/bin/sudo -u $jenkinsuser /bin/bash -c 'cd $dir; export started_monit=true; $0 $@' with timeout 60 seconds\"
113 stop program = \"/bin/bash -c '/bin/kill \$(/bin/cat /var/run/$jenkinsuser/jenkins_jnlp_pid)'\"\
115 echo "Updating monit config..."
122 if [[ $started_monit == "true" ]]; then
123 wget --timestamping https://build.opnfv.org/ci/jnlpJars/slave.jar && true
124 chown $jenkinsuser:$jenkinsuser slave.jar
126 if [[ -f /var/run/$jenkinsuser/jenkins_jnlp_pid ]]; then
127 echo "pid file found"
128 if ! kill -0 "$(/bin/cat /var/run/$jenkinsuser/jenkins_jnlp_pid)"; then
129 echo "no java process running cleaning up pid file"
130 rm -f /var/run/$jenkinsuser/jenkins_jnlp_pid;
132 echo "java connection process found and running already running quitting."
137 if [[ $run_in_foreground == true ]]; then
140 exec $connectionstring &
141 echo $! > /var/run/$jenkinsuser/jenkins_jnlp_pid
144 echo "you are ready to start monit"
145 echo "eg: service monit start"
146 echo "example debug mode if you are having problems: /usr/bin/monit -Ivv -c /etc/monit.conf "
154 **this file must be copied to the jenkins home directory to work**
155 jenkins-jnlp-connect.sh configures monit to keep slave connection up
156 Checks for new versions of slave.jar
157 run as root to create pid directory and create monit config.
158 can be run as root additional times if you change variables and need to update monit config.
159 after running as root you should see "you are ready to start monit"
167 -t test the connection string by connecting without monit
170 Example: $0 -j /home/jenkins/ -u jenkins -n lab1 -s 727fdefoofoofoofoofoofoofof800
176 if [[ -z "$@" ]]; then
180 while getopts "j:u:n:s:htf" OPTION
183 j ) jenkinshome="$OPTARG" ;;
184 u ) jenkinsuser="$OPTARG" ;;
185 n ) slave_name="$OPTARG" ;;
186 s ) slave_secret="$OPTARG";;
188 t ) started_monit=true
190 run_in_foreground=true ;;
192 \? ) echo "Unknown option: -$OPTARG" >&2; exit 1;;
196 connectionstring="java -jar slave.jar -jnlpUrl https://build.opnfv.org/ci/computer/"$slave_name"/slave-agent.jnlp -secret "$slave_secret" -noCertificateCheck "