【问题标题】:Jenkins: spawn multiple processes and wait for them to terminateJenkins:产生多个进程并等待它们终止
【发布时间】:2020-12-04 15:27:12
【问题描述】:

我设置了一个 Jenkins 构建服务器,它为一个 Unity 项目运行一个夜间构建,构建它的两个不同实例。一旦这些构建完成,它会在不同的节点上运行一个作业来复制构建二进制文件并运行它们。我遇到的是找到一个好方法让工作(1)同时运行两个可执行文件,(2)等待它们完成,然后再移动到工作中的下一个“构建步骤”(它验证测试日志等)。

最初,当我在自己的计算机上测试它时,这似乎有效:https://stackoverflow.com/a/18762607/14764114 .. 但它在 Jenkins 中没有,因为 Jenkins 节点作为 Windows 服务运行,因此无法在批处理中使用 START 命令。

我在读到运行单独的服务可能是一个值得探索的解决方案,但在我开始深入研究之前,我想我会询问社区是否没有更优雅的解决方案。总之,我想:

  • 同时从 Jenkins 构建步骤运行两个可执行文件(从在 Windows 上运行的 Jenkins 节点)
  • 等待两个可执行文件退出,然后继续下一个构建步骤

【问题讨论】:

  • 你试过并行步骤吗?

标签: jenkins


【解决方案1】:

最后我选择了这个解决方案,因为在我的场景中似乎任务计划程序似乎是唯一能够启动 Unity 游戏窗口的东西。所以我创建了一个任务,运行它然后删除它,之后我就等待进程从任务列表中消失:

@echo off

echo "Run FirstApp"
schtasks /create /sc MONTHLY /tn FirstAppTask /tr "%TARGET_DIR%\%APP_First%\FirstApp.exe -automatedtest -duration=%TEST_DURATION_SECONDS%"
schtasks /run /tn FirstAppTask
schtasks /delete /f /tn FirstAppTask

echo "Run SecondApp"
schtasks /create /sc MONTHLY /tn SecondAppTask /tr "%TARGET_DIR%\%APP_Second%\SecondApp.exe -automatedtest -duration=%TEST_DURATION_SECONDS%"
schtasks /run /tn SecondAppTask
schtasks /delete /f /tn SecondAppTask

echo "Wait for FirstApp.exe to end"
:LOOP1
tasklist | find /i "FirstApp" >nul 2>&1
IF ERRORLEVEL 1 (
  GOTO CONTINUE1
) ELSE (
  ping -n 5 ::1 >NUL
  GOTO LOOP1
)

:CONTINUE1

echo "Wait for SecondApp.exe to end"
:LOOP2
tasklist | find /i "SecondApp" >nul 2>&1
IF ERRORLEVEL 1 (
  GOTO CONTINUE2
) ELSE (
  ping -n 5 ::1 >NUL
  GOTO LOOP2
)

:CONTINUE2
echo Done running tests

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多