jenkins - Jenkins:产生多个进程并等待它们终止
问题描述
我已经设置了一个 Jenkins 构建服务器,它为 Unity 项目运行一个夜间构建,构建它的两个不同实例。一旦这些构建完成,它会在不同的节点上运行一个作业来复制构建二进制文件并运行它们。我遇到的是找到一个好方法让工作(1)同时运行两个可执行文件,(2)等待它们完成,然后再移动到工作中的下一个“构建步骤”(它验证测试日志等)。
最初,当我在自己的计算机上对其进行测试时,这似乎有效:https ://stackoverflow.com/a/18762607/14764114 .. 但它在 Jenkins 中没有,因为 Jenkins 节点作为 Windows 服务运行,因此无法使用批处理中的 START 命令。
我正在阅读运行单独的服务可能是在这里探索的解决方案,但在我开始深入研究之前,我想我会询问社区是否有更优雅的解决方案。总之,我想:
- 同时从 Jenkins 构建步骤运行两个可执行文件(从在 Windows 上运行的 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
推荐阅读
- xml - 如何在不添加转义字符的情况下在动态内容(Azure 数据工厂)中保留或添加引号?
- javascript - 学校作业,我不知道我做错了什么
- java - 为 Google GSON 添加自定义 TypeAdapterFactory 以检测使用注解动态返回自定义 TypeAdapter
- python - 将 python 列表从上下文传递给 JS 函数
- python - 在列表中添加与 len(word) 数量一样多的下划线,并且每个下划线都是列表中的一个单独项目
- python - Python - 以编程方式将 JSON 加载到 Google BigQuery 表中
- git - 分叉后历史记录中的重复提交
- javascript - 将列表元素附加到无序列表
- c# - C# NModbus 网络从站 - 获取主机计数
- c# - 将 Razor Pages 项目更新到 ASP.Net Core 5.0:为什么要依赖 MySQL 服务器版本?