我有一个本地运行的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
答案 0 :(得分:1)
我相信您可以为此使用run
阶段。看起来像
run:
stage: run
script:
- mvn $MAVEN_CLI_OPTS spring-boot:run
您可以看到此here的示例。
确保您还定义了stages
以将run
包括为文档状态
如果在
stages
中未定义.gitlab-ci.yml
,则默认情况下允许将build
,test
和deploy
用作作业阶段。 (请参阅stages)
您在整个配置文件上方提供的样本文件还是仅是其一部分?如果是这样,我可以调整答案以适合您的需求。谢谢!
答案 1 :(得分:1)
对不起,这太晚了。我最近遇到了同样的问题。 Gitlab运行程序阻止子进程以及子树中的任何进程。这使disown
命令无法执行,因为您无法使用它。分叉和nohup
也不起作用。
我能找出的唯一解决方案是使用at
命令https://linux.die.net/man/1/at
基本上,我将命令放在脚本中然后执行:
at now < my_blocking_command_script.sh
成功完成了亚军并在后台启动了我的程序。