java 如何使用GitLab runner运行Spring启动应用程序?

gcuhipw9  于 2022-12-10  发布在  Java
关注(0)|答案(2)|浏览(155)

我有一个spring-boot maven应用程序,我一直在本地运行为:

mvn spring-boot:run

我希望能够在GitLab runner中运行它,这样当我把代码推到master时,它会自动复制最新的代码并运行应用程序。
我的GitLab runner现在配置在shell模式下,我在.gitlab-ci.yml文件中有一个部署任务,它运行的就是:

mvn spring-boot:run

我遇到的问题是在应用程序启动后,我可以看到它正在运行...但它从来没有显示为成功或完成。它只是挂在那里(因为当你执行那个命令时终端仍然在运行?)
问题是,有没有一组备用的命令我应该运行,让我的spring-boot应用程序在我每次推到master时更新和运行?我应该在我的gitlab-ci.yml(或其他文件)中放入什么?注意,我没有使用docker或kubernetes...只是shell。
示例gitlab CI:

run-deploy:
  stage: deploy
  script:
    - mvn $MAVEN_CLI_OPTS spring-boot:run

尝试使用nohup也失败。- nohup mvn $MAVEN_CLI_OPTS spring-boot:run &

0mkxixxg

0mkxixxg1#

我相信您可以使用run阶段来完成此操作。

run:
  stage: run
  script:
    - mvn $MAVEN_CLI_OPTS spring-boot:run

你可以在这里看到一个例子。
确保还定义了stages,以将run作为docs状态包括在内
如果.gitlab-ci.yml中未定义stages,则默认情况下允许将buildtestdeploy用作作业的阶段。(请参阅阶段)
您提供的示例文件是整个配置文件还是其中的一部分?如果是,我可以根据您的需要调整答案。谢谢!

bwntbbo3

bwntbbo32#

很抱歉这么晚了。我最近也遇到了同样的问题。Gitlab runner阻塞了子进程,以及子树中的任何进程。这使得disown命令无法执行,因为你无法访问它。Forking和nohup也不起作用。
我能想到的唯一解决方案是使用at命令https://linux.die.net/man/1/at
基本上我把我的命令放在一个脚本然后做:
at now < my_blocking_command_script.sh
这成功地完成了运行程序并在后台启动了我的程序。

相关问题