X-Git-Url: https://gerrit.opnfv.org/gerrit/gitweb?a=blobdiff_plain;f=utils%2Fjenkins-jnlp-connect.sh;h=8fce2e021dd047d90dea1858c5e1dd9bdd225294;hb=bfc2988539f85cd792390e36e24c485fec3ffa7f;hp=6fb6827fd759005776a56f1028295bab0ec0c1c6;hpb=ca18de924d974b813adb477eee407f746688b8a0;p=releng.git diff --git a/utils/jenkins-jnlp-connect.sh b/utils/jenkins-jnlp-connect.sh index 6fb6827fd..8fce2e021 100755 --- a/utils/jenkins-jnlp-connect.sh +++ b/utils/jenkins-jnlp-connect.sh @@ -11,13 +11,13 @@ #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 $?) -if [[ $test == 0 ]]; then - echo "Firewall is open for us at build.opnfv.org" - exit 0 -else -cat << EOF + 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 $?) + if [[ $test == 0 ]]; then + echo "Firewall is open for us at build.opnfv.org" + exit 0 + else + cat << EOF 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 opnfv-helpdesk@rt.linuxfoundation.org Jenkins Home: $jenkinshome @@ -25,123 +25,145 @@ Jenkins User: $jenkinsuser Slave Name: $slave_name IP Address: $(curl -s http://icanhazip.com) EOF -exit 1 -fi + exit 1 + fi } main () { -dir=$(cd $(dirname $0); pwd) + #tests + if [[ -z $jenkinsuser || -z $jenkinshome ]]; then + echo "jenkinsuser or home not defined, please edit this file to define it" + exit 1 + fi -#tests -if [[ -z $jenkinsuser || -z $jenkinshome ]]; then - echo "jenkinsuser or home not defined, please edit this file to define it" - exit 1 -fi + if [[ $(pwd) != "$jenkinshome" ]]; then + echo "This script needs to be run from the jenkins users home dir" + exit 1 + fi -if [[ -z $slave_name || -z $slave_secret ]]; then - echo "slave name or secret not defined, please edit this file to define it" - exit 1 -fi + if [[ -z $slave_name || -z $slave_secret ]]; then + echo "slave name or secret not defined, please edit this file to define it" + exit 1 + fi -if [[ $(whoami) != "root" && $(whoami) != "$jenkinsuser" ]]; then - echo "This script must be run as user root or jenkins user" - exit 1 -fi + if [[ $(whoami) != "root" && $(whoami) != "$jenkinsuser" ]]; then + echo "This script must be run as user root or jenkins user" + exit 1 + fi -if [[ $distro == Debian || $distro == Ubuntu ]]; then - monitconfdir="/etc/monit/conf.d/" -elif [[ $distro == Fedora || $distro == CentOS || $distro == Redhat ]]; then - monitconfdir="/etc/monit.d" -fi + if [[ $(whoami) != "root" ]]; then + if sudo -l | grep "requiretty"; then + echo "please comment out Defaults requiretty from /etc/sudoers" + exit 1 + fi + 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/ -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/ + fi + if [[ $skip_monit != true ]]; then + #check for monit + if [ $(which monit) ]; then + echo "monit installed" + else + if [ -n "$(command -v yum)" ]; then + echo "please install monit; eg: yum -y install monit" + exit 1 + elif [ -n "$(command -v apt-get)" ]; then + echo "please install monit; eg: apt-get install -y monit" + exit 1 + else + echo "system not supported plese contact help desk" + exit 1 + fi + fi + if [ -d /etc/monit/conf.d ]; then + monitconfdir="/etc/monit/conf.d/" + elif [ -d /etc/monit.d ]; then + monitconfdir="/etc/monit.d" + else + echo "Could not determine the location of the monit configuration file." + echo "Make sure monit is installed." + exit 1 + fi -if [[ $skip_monit == true ]]; then - : -else - #check for monit - if [ $(which monit) ]; then - echo "monit installed" - else - if [ -n "$(command -v yum)" ]; then - echo "please install monit; eg: yum -y install monit" - exit 1 - elif [ -n "$(command -v apt-get)" ]; then - echo "please install monit eg: apt-get install -y monit" - exit 1 - else - echo "system not supported plese contact help desk" - exit 1 - fi - fi -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" -makemonit () { -echo "Writing the following as monit config:" -cat << EOF | tee $monitconfdir/jenkins check process jenkins with pidfile /var/run/$jenkinsuser/jenkins_jnlp_pid -start program = "/usr/bin/sudo -u $jenkinsuser /bin/bash -c 'cd $dir; export started_monit=true; $0 $@'" +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\" -if [[ -f $monitconfdir/jenkins ]]; then - #test for diff - if [[ "$(diff $monitconfdir/jenkins <(echo "\ check process jenkins with pidfile /var/run/$jenkinsuser/jenkins_jnlp_pid -start program = \"usr/bin/sudo -u $jenkinsuser /bin/bash -c 'cd $dir; export started_monit=true; $0 $@'\" -stop program = \" /bin/bash -c '/bin/kill \$(/bin/cat /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\ ") )" ]]; then - echo "Updating monit config..." - makemonit $@ - fi -else - makemonit $@ -fi - + echo "Updating monit config..." + makemonit $@ + fi + else + 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://build.opnfv.org/ci/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 + 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 + else echo "java connection process found and running already running quitting." exit 1 - + fi fi -fi - -if [[ run_in_foreground == true ]]; then - $connectionstring -else - exec $connectionstring & - echo $! > /var/run/$jenkinsuser/jenkins_jnlp_pid -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 + if [[ $run_in_foreground == true ]]; then + $connectionstring + else + exec $connectionstring & + echo $! > /var/run/$jenkinsuser/jenkins_jnlp_pid + 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() { -cat << EOF + cat << EOF +**this file must be copied to the jenkins home directory to work** jenkins-jnlp-connect.sh configures monit to keep slave connection up Checks for new versions of slave.jar run as root to create pid directory and create monit config. @@ -157,35 +179,33 @@ usage: $0 [OPTIONS] -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 - + exit 1 } -if [[ -z "$@" ]]; then usage +if [[ -z "$@" ]]; then + usage fi - while getopts "j:u:n:s:htf" OPTION do - case $OPTION in - j ) jenkinshome="$OPTARG" ;; - u ) jenkinsuser="$OPTARG" ;; - n ) slave_name="$OPTARG" ;; - s ) slave_secret="$OPTARG";; - h ) usage; exit;; - t ) started_monit=true - skip_monit=true - run_in_foreground=true ;; - f ) test_firewall ;; - \? ) echo "Unknown option: -$OPTARG" >&2; exit 1;; - esac + case $OPTION in + j ) jenkinshome="$OPTARG" ;; + u ) jenkinsuser="$OPTARG" ;; + n ) slave_name="$OPTARG" ;; + s ) slave_secret="$OPTARG";; + h ) usage ;; + t ) started_monit=true + skip_monit=true + run_in_foreground=true ;; + f ) test_firewall ;; + \? ) echo "Unknown option: -$OPTARG" >&2; exit 1;; + esac done connectionstring="java -jar slave.jar -jnlpUrl https://build.opnfv.org/ci/computer/"$slave_name"/slave-agent.jnlp -secret "$slave_secret" -noCertificateCheck " -distro="$(tr -s ' \011' '\012' < /etc/issue | head -n 1)" main "$@"