运行 Jenkins 管道上的 macOS 测试用例

Run macOS Test Cases on the Jenkins Pipeline

您好,我有一个 macOS 应用程序需要在 Jenkins 上针对 CI/CD 目的进行配置。

我需要 运行 测试用例,然后才能分发应用程序或创建包文件。

我正在使用下面提到的命令

xcodebuild -workspace xxx.xcworkspace -sdk macosx11.3 -scheme xxx -destination "platform=OS X,arch=x86_64" clean test

当我在 Jenkins 中执行这个命令时它抛出一个错误

错误:测试 运行ner 遇到错误(无法与测试 运行ner 建立通信。如果您认为此错误代表错误,请附上结果包在 /Users/ec2-user/Library/Developer/Xcode/DerivedData/xxx-gkolnyonjdnyixfknefsjvbsyzia/Logs/Test/Run-xxx-2021.05.24_11-58-07-+0000.xcresult。(潜在错误:无法与辅助应用程序通信。再次尝试您的操作。如果失败,请退出并重新启动该应用程序然后重试。与名为 com.apple.testmanagerd.control 的 pid 0 上的服务的连接无效。))

我需要利用 macOS 本身来 运行 作为模拟器。作为 Jenkins 运行s 作为 ec-2 实例上的守护进程。

注意:不使用 XCODE 插件来执行我的命令

请帮忙!!!

我的 MacOS 系统是一个奴隶,我是 运行 我通过 Linux 服务器的脚本。 macOS 之前使用 SSH 连接,然后需要更改此身份验证方法才能访问 Mac

的 UI

现在测试用例运行

根据观察,macOS Big Sur、Monterey 和可能的后续版本不再允许通过 SSH 会话进行测试 运行。通过改变 Jenkins controller 连接 slave 的方式,可以防止命令通过 SSH 运行

第一种方法,Jenkins built-in,最简单的方法是使用 JNLP 方法进行代理通信。这将涉及 运行 在与 Jenkins 控制器通信的从机上安装 Jenkins 代理。最后,机器上的代理 运行 正在执行测试命令,而不是通过 SSH 会话。

第二种方式是构建自己的代理。它可以像导致脚本执行的文件更改触发器一样简单。只有在 Jenkins slave 由于某些网络限制而无法连接到 Jenkins 控制器时才需要这样做。