如何使用GitLab运行程序运行spring-boot应用程序?

时间:2019-01-22 21:45:58

标签: java spring-boot gitlab gitlab-ci gitlab-ci-runner

我有一个本地运行的spring-boot maven应用程序:

express-session

我希望能够在GitLab运行程序中运行此程序,以便当我将代码推送至主代码时,它会自动将最新代码复制到此处并运行该应用程序。

我的GitLab运行程序现在已配置为shell模式,并且在mvn spring-boot:run 文件中有一个运行以下任务的部署任务:

.gitlab-ci.yml

我遇到的问题是在应用程序启动后,我可以看到它正在运行...但是从不显示为成功或完成。它只是挂在那里(因为执行该命令时终端仍在运行?)

问题是,我应该运行另一组命令来使我的spring-boot应用程序在每次按下master时进行更新和运行吗?我应该在mvn spring-boot:run (或其他文件)中放入什么内容。请注意,我不是在使用docker或kubernetes,而只是在使用shell。

示例gitlab CI:

gitlab-ci.yml

尝试nohup也会失败。 run-deploy: stage: deploy script: - mvn $MAVEN_CLI_OPTS spring-boot:run

2 个答案:

答案 0 :(得分:1)

我相信您可以为此使用run阶段。看起来像

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

您可以看到此here的示例。

确保您还定义了stages以将run包括为文档状态

  

如果在stages中未定义.gitlab-ci.yml,则默认情况下允许将buildtestdeploy用作作业阶段。 (请参阅stages

您在整个配置文件上方提供的样本文件还是仅是其一部分?如果是这样,我可以调整答案以适合您的需求。谢谢!

答案 1 :(得分:1)

对不起,这太晚了。我最近遇到了同样的问题。 Gitlab运行程序阻止子进程以及子树中的任何进程。这使disown命令无法执行,因为您无法使用它。分叉和nohup也不起作用。

我能找出的唯一解决方案是使用at命令https://linux.die.net/man/1/at

基本上,我将命令放在脚本中然后执行:

at now < my_blocking_command_script.sh

成功完成了亚军并在后台启动了我的程序。