我有一个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 &
2条答案
按热度按时间0mkxixxg1#
我相信您可以使用
run
阶段来完成此操作。你可以在这里看到一个例子。
确保还定义了
stages
,以将run
作为docs状态包括在内如果
.gitlab-ci.yml
中未定义stages
,则默认情况下允许将build
、test
和deploy
用作作业的阶段。(请参阅阶段)您提供的示例文件是整个配置文件还是其中的一部分?如果是,我可以根据您的需要调整答案。谢谢!
bwntbbo32#
很抱歉这么晚了。我最近也遇到了同样的问题。Gitlab runner阻塞了子进程,以及子树中的任何进程。这使得
disown
命令无法执行,因为你无法访问它。Forking和nohup
也不起作用。我能想到的唯一解决方案是使用
at
命令https://linux.die.net/man/1/at基本上我把我的命令放在一个脚本然后做:
at now < my_blocking_command_script.sh
这成功地完成了运行程序并在后台启动了我的程序。