首页 > 解决方案 > Jenkins:产生多个进程并等待它们终止

问题描述

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

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

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

标签: jenkins

解决方案


最后我选择了这个解决方案,因为似乎任务计划程序似乎是唯一能够在我的场景中启动 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

推荐阅读