在Jenkins声明性流水线中后台运行进程

55次阅读
没有评论

问题描述

在使用Jenkins的声明性流水线时,希望通过后台运行一个Java进程。他尝试了一些方法,但是没有成功。以下是他的代码片段:

stage('Deploy') {
    steps {
        script {
            withEnv(['BUILD_ID=dontkill']) {
                sh "nohup java -jar test-0.0.1-SNAPSHOT.war &"
            }
        }
    }
}

他已经尝试了使用withEnv以及设置环境变量BUILD_ID,但没有效果。他希望找到一个解决方案来在Jenkins流水线中后台运行Java进程。

解决方案

请注意以下操作可能会因版本差异而略有不同。

方案1:设置JENKINS_NODE_COOKIE

如果你在使用流水线项目并遇到相同的问题,可以尝试设置JENKINS_NODE_COOKIE环境变量来实现后台运行。以下是操作步骤:

  1. 打开你的Jenkins流水线项目。
  2. 在流水线的相应阶段中,使用sh步骤来运行你的Java进程,并设置JENKINS_NODE_COOKIE环境变量:
stage('Deploy') {
    steps {
        script {
            withEnv(['JENKINS_NODE_COOKIE=do_not_kill']) {
                sh "nohup java -jar test-0.0.1-SNAPSHOT.war &"
            }
        }
    }
}

通过设置JENKINS_NODE_COOKIE,你可以告诉Jenkins不要终止这个进程。

方案2:使用parallel步骤

另一种方法是使用parallel步骤,以并行的方式运行前台和后台进程。这样做的好处之一是你可以在Blue Ocean UI中轻松访问后台进程的stdout。以下是操作步骤:

  1. 在流水线中使用parallel步骤来并行运行前台和后台进程:
stage("Run") {
    parallel {
        stage('Foreground') {
            steps {
                // 在这里运行前台进程的命令
            }
        }
        stage('Background') {
            steps {
                sh 'nohup java -jar test-0.0.1-SNAPSHOT.war &'
            }
        }
    }
}

通过这种方式,你可以在一个流水线中同时管理前台和后台进程。

方案3:使用bat步骤(仅适用于Windows)

如果你是在Windows环境下运行流水线,并且想要在后台运行进程,你可以尝试使用bat步骤来执行操作。以下是操作步骤:

  1. 在流水线中使用bat步骤来运行后台进程:
stage('Deploy') {
    steps {
        script {
            withEnv(['JENKINS_NODE_COOKIE=do_not_kill']) {
                bat """
                @set prompt=$G$S
                cd ${RUN_DIR}
                start \"title\" java -jar test-0.0.1-SNAPSHOT.war
                """
            }
        }
    }
}

通过使用bat步骤,你可以在Windows环境下实现后台运行。

总结

通过设置JENKINS_NODE_COOKIE环境变量,使用parallel步骤,或者使用bat步骤(仅适用于Windows),你可以在Jenkins声明性流水线中实现后台运行Java进程的需求。根据你的环境和需求选择适合的解决方案。如果你遇到任何问题,可以查看相关的文档或社区讨论,寻求更多帮助。

注意:以上方案可能需要根据你的具体情况进行调整和修改。在操作之前,请务必备份你的数据以及相应的配置。

正文完