2017-08-27 3 views
0

jenkinsのmavenプロジェクトでは、BUILD_ID=DontKillMeを使用して、シェル呼び出しのhudsonスクリプトのシャットダウンを防ぐことができます。jenkinsfileを使用してJavaのwarファイルを展開する方法

同様:BUILD_ID=DontKillMe java -jar target.jar

しかしBUILD_IDを追加するにはJenkinsfileでは動作しません。


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' 
    } 
} 

、ハドソンスクリプトによって呼び出されたすべてのシェルは、シャットダウンになります。 でも二重nohupはまだ動作しません。

deploy.sh:

#!/bin/bash 

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

答えて

0

あなたは同じよう

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

パイプラインの 'Jenkinsfile'ビルドスクリプトでは役に立たないです。 –

+1

@SuCheungそれはうまくいくはずです。しかし、OSによっては動作しないバグがあるようです。https://issues.jenkins-ci.org/browse/JENKINS-46481 –

+0

私はいつも「BUILD_ID = dontKillMe'が汚いと感じています。 –

0

BUILD_ID=dontKillMeshのステップを使用することができます私は、スクリプトを実行するための別の方法を発見し、殺害することはできません。

  • #!/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ユニットサービス

    は/ usr/libに/にsystemd /システム

/etc/init.d/www-project Linuxサービス/www-project.service

Jenkinsfileで
[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 

、我々はサービスを殺すことはありません

service restart www-project 

または

systemctl restart www-project 

とハドソンのスクリプトを呼び出すことができます。

関連する問題