如何在后台 GH Actions 中运行 Spring Boot 服务器?

问题描述 投票:0回答:1

在我的工作流程中,我定义了一个步骤:

    - name: Setup Spring Boot App
      run: |
         cd backend/MeetApp
         POSTGRES_USERNAME=postgres POSTGRES_PASSWORD=postgres nohup ./gradlew bootRun

无论我尝试什么,我都无法弄清楚如何启动我的 Spring Boot 过程,可能需要等待特定时间,然后转到下一步。

spring-boot github github-actions
1个回答
10
投票

TL;博士

使用

&

在后台运行它

详情

GitHub Actions 允许您在后台运行命令,并在行末尾添加

&

例如,这个虚拟步骤:

  - name: does background work?
    run: |
      echo start && sleep 3 && echo stop &
      echo w1 && sleep 1 && echo w2 && sleep 1 && echo w3 && sleep 1 && echo w4

结束打印,顺序为:w1、开始、w2、w3、停止、w4。

就您而言,您需要:

  - name: Setup Spring Boot App
    run: |
      cd backend/MeetApp
      POSTGRES_USERNAME=postgres POSTGRES_PASSWORD=postgres nohup ./gradlew bootRun &

然后 - 我已经对此进行了测试 - 您可以将使用该后台进程的命令放在同一步骤或后续步骤中,无论哪种方式都可以工作。

等待中

现在,来自评论的更多详细信息,您需要等待足够长的时间才能开始在接下来的 CI 步骤中使用此后台进程。一个简单的

sleep 5
(或选择你的时间)可以工作,但是如果你有一个虚拟查询,只有在后台进程启动后才会成功,那么每秒循环执行一次,直到最大延迟将 a) 等待最短时间必要的时间,并且 b) 确保您始终等待足够长的时间。

以下是最多等待 20 秒的示例:

  - name: Setup Spring Boot App
    run: |
      cd backend/MeetApp
      POSTGRES_USERNAME=postgres POSTGRES_PASSWORD=postgres nohup ./gradlew bootRun &
      for attempt in {1..20}; do sleep 1; if <test-command>; then echo ready; break; fi; echo waiting...; done 

如果 gradlew 已启动,则

<test-command>
应退出 0,否则为非零。通过这个循环,CI 在启动完成之前不会继续下一步。

© www.soinside.com 2019 - 2024. All rights reserved.