utils/jenkins-jnlp-connect.sh: Make sure the pid directory exists 35/26835/3
authorMarkos Chandras <mchandras@suse.de>
Tue, 10 Jan 2017 15:48:51 +0000 (15:48 +0000)
committerMarkos Chandras <mchandras@suse.de>
Wed, 11 Jan 2017 10:56:47 +0000 (10:56 +0000)
/var/run/ is only writable by root so Monit will fail to create
the necessary subdirectory for the jenkins pid file since we run it
as the 'jenkin' user. We add another entry to the monit configuration
file to check the presence and the permissions of that directory before
we try to start the jenkins slave.

Change-Id: Ica7153c3e90900f60e4f65708c8f08abf5af9201
Signed-off-by: Markos Chandras <mchandras@suse.de>
utils/jenkins-jnlp-connect.sh

index 9751a90..be9fe18 100755 (executable)
@@ -95,18 +95,30 @@ main () {
         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 "/usr/bin/mkdir -p /var/run/$jenkinsuser"
+if failed uid $jenkinsuser then exec "/usr/bin/chown $jenkinsuser /var/run/$jenkinsuser"
+if failed gid $jenkinsuser then exec "/usr/bin/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 \"/usr/bin/mkdir -p /var/run/$jenkinsuser\"
+if failed uid $jenkinsuser then exec \"/usr/bin/chown $jenkinsuser /var/run/$jenkinsuser\"
+if failed gid $jenkinsuser then exec \"/usr/bin/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 $@