2017-08-27 4 views
0

In Jenkins Maven-Projekt können wir BUILD_ID=DontKillMe verwenden, um Hudson-Skript zum Herunterfahren der Shell-Aufrufe zu verhindern.Wie Java-War-Datei mit Jenkinsfile in Jenkins Pipeline bereitstellen

Like: BUILD_ID=DontKillMe java -jar target.jar

Aber hinzufügen BUILD_ID nicht in Jenkinsfile arbeiten.


Jenkinsfile:

#!/usr/bin/env groovy 

node { 
    stage('Build') { 
     checkout scm 
     sh '/opt/gradle/gradle-4.1/bin/gradle clean build' 
    } 
    stage('Deploy') { 
     sh 'mkdir -p /opt/www/foobar' 
     sh 'cp build/libs/*.war /opt/www/foobar/newest.war' 
     sh 'chmod 755 ./deploy.sh' 
     sh 'nohup ./deploy.sh &' 
     sh 'while ! httping -qc1 http://localhost:10000 ; do sleep 1 ; done' 
    } 
} 

Nach hudson Skript ausgeführt, werden alle von hudson Skript namens Schalen würden abgeschaltet werden. Sogar Doppel nohup immer noch nicht funktionieren.

deploy.sh:

#!/bin/bash 

nohup java -jar -Dspring.profiles.active=prod /opt/www/foobar/newest.war /var/log/foobar.log 2>&1 & 

Antwort

0

Sie BUILD_ID=dontKillMe in sh Schritt

sh 'BUILD_ID=dontKillMe nohup ./deploy.sh &' 
+0

Es ist nutzlos in 'Jenkinsfile' Build-Skript der Pipeline. –

+1

@SuCheung sollte es funktionieren. Aber es scheint, als ob es einen Fehler gibt, wenn es auf einigen OS nicht funktioniert https://issues.jenkins-ci.org/browse/JENKINS-46481 –

+0

Verstanden, aber ich habe immer das Gefühl, dass 'BUILD_ID = dontKillMe' ist schmutzig. –

0

die gleiche Art und Weise verwenden können, fand ich eine andere Möglichkeit, Skripte auszuführen und nicht getötet werden kann.

  • Linux Service

/etc/init.d/www-project

#!/bin/bash 

. /etc/init.d/functions 

SERVICE_NAME="www-project" 
RETVAL=0 
PID=-1 
PIDFILE=/var/run/${SERVICE_NAME}.PID 

start() { 
    if [ -f ${PIDFILE} ]; then 
    echo "PID file ${PIDFILE} already exists, please stop the service !" 
    exit 
    fi 
    echo "Starting service ${SERVICE_NAME} ..." 
    java -jar -Dspring.profiles.active=prod /opt/www/project/newest.war > /var/log/www-project.log 2>&1 & 
    PID = $! 
    if [ -z ${PID} ]; then 
    echo "Failed to get the process id, exit!" 
    exit 
    else 
    echo "Starting successfully, whose pid is ${PID}" 
    fi 
    touch $PIDFILE 
    echo ${PID} > ${PIDFILE} 
} 

stop() { 
    if [ -f $PIDFILE ]; then 
    PID = `cat ${PIDFILE}` 
    if [ -z $PID ]; then 
     echo "PIDFILE $PIDFILE is empty!" 
     exit 
    fi 
    if [ -z "`ps axf | grep $PID | grep -v grep`" ]; then 
     echo "Process dead but pidfile exists!" 
     exit 
    else 
     kill -9 $PID 
     echo "Stopping service successfully, whose pid is $PID" 
     rm -f $PIDFILE 
    fi 
    else 
    echo "File $PIDFILE does NOT exist!" 
    fi 
} 

restart() { 
    stop 
    start 
} 

status() { 
    if [ -f $PIDFILE ]; then 
    PID=`cat $PIDFILE` 
    if [ -z $PID ] ; then 
     echo "No effective pid but pidfile exists!" 
    else 
     if [ -z "`ps axf | grep $PID | grep -v grep`" ]; then 
     echo "Process dead but pidfile exist" 
     else 
     echo "Running" 
     fi 
    fi 
    else 
    echo "Service not running" 
    fi 
} 

case "$1" in 
    start) 
    start 
    ;; 
    stop) 
    stop 
    ;; 
    restart) 
    restart 
    ;; 
    status) 
    status 
    ;; 
    *) 
    echo "Usage: www-project {start|stop|restart|status}" 
    ;; 
esac 
  • systemd Einheit Service

/usr/lib/systemd/system /www-project.service

[Unit] 
Description=project 
After=mysqld.service 
Wants=mysqld.service 

[Service] 
ExecStart=/usr/lib/jvm/java/bin/java -jar -Dspring.profiles.active=prod /opt/www/project/newest.war > /var/log/www-project.log 
PIDFile=/var/run/www-project.pid 
ExecReload=/bin/kill -HUP $MAINPID 
ExecStop=/bin/kill -9 $MAINPID 

[Install] 
WantedBy=multi-user.target 

In Jenkinsfile können wir

service restart www-project 

oder

systemctl restart www-project 

Und hudson Skript töten nie die Dienste aufrufen.

Verwandte Themen