Unity Linux, CircleCI and WebGL Build

Hello,

I am trying to automate a project build with CircleCI 2.0, using a docker container with Ubuntu 16 and the latest version of Unity installed. It works on my machine (LOL), using the same container image, but it fails miserably on CircleCI. I have tried things like setting “Strip engine code” off, but the error is always the same. I suspect this may be related to disk space, but would anyone be able to advise on what else it could be? The only other difference that I’m seeing at the moment is that I am using Docker for mac, while Circle is probably using Docker for Linux?

Error:

DisplayProgressbar: Scripting
Filename: python
Arguments: “/opt/Unity/Editor/Data/PlaybackEngines/WebGLSupport/BuildTools/Emscripten/emcc” @“/root/repo/Assets/…/Temp/emcc_arguments.resp”
index: -1
Failed running python “/opt/Unity/Editor/Data/PlaybackEngines/WebGLSupport/BuildTools/Emscripten/emcc” @“/root/repo/Assets/…/Temp/emcc_arguments.resp”

stdout:
stderr:WARNING:root:–separate-asm works best when compiling to HTML. otherwise, you must yourself load the ‘.asm.js’ file that is emitted separately, and must do so before loading the main '.js` filewrote symbol map file to /root/repo/Temp/StagingArea/Data/linkresult_asm/build.js.symbolsProcess PoolWorker-30:Traceback (most recent call last): File “/usr/lib/python2.7/multiprocessing/process.py”, line 258, in _bootstrap self.run() File “/usr/lib/python2.7/multiprocessing/process.py”, line 114, in run self._target(*self._args, **self._kwargs) File “/usr/lib/python2.7/multiprocessing/pool.py”, line 122, in worker put((job, i, (False, wrapped))) File “/usr/lib/python2.7/multiprocessing/queues.py”, line 392, in put return send(obj)IOError: [Errno 32] Broken pipeProcess PoolWorker-22:Traceback (most recent call last): File “/usr/lib/python2.7/multiprocessing/process.py”, line 258, in _bootstrap self.run() File “/usr/lib/python2.7/multiprocessing/process.py”, line 114, in run self._target(*self._args, **self._kwargs) File “/usr/lib/python2.7/multiprocessing/pool.py”, line 122, in worker put((job, i, (False, wrapped))) File “/usr/lib/python2.7/multiprocessing/queues.py”, line 392, in put return send(obj)IOError: [Errno 32] Broken pipeProcess PoolWorker-6:Traceback (most recent call last): File “/usr/lib/python2.7/multiprocessing/process.py”, line 258, in _bootstrap self.run() File “/usr/lib/python2.7/multiprocessing/process.py”, line 114, in run self._target(*self._args, **self._kwargs) File “/usr/lib/python2.7/multiprocessing/pool.py”, line 122, in worker put((job, i, (False, wrapped))) File “/usr/lib/python2.7/multiprocessing/queues.py”, line 392, in put return send(obj)IOError: [Errno 32] Broken pipeProcess PoolWorker-25:Traceback (most recent call last): File “/usr/lib/python2.7/multiprocessing/process.py”, line 258, in _bootstrap self.run() File “/usr/lib/python2.7/multiprocessing/process.py”, line 114, in run self._target(*self._args, **self._kwargs) File “/usr/lib/python2.7/multiprocessing/pool.py”, line 122, in worker put((job, i, (False, wrapped))) File “/usr/lib/python2.7/multiprocessing/queues.py”, line 392, in put return send(obj)IOError: [Errno 32] Broken pipeProcess PoolWorker-29:Traceback (most recent call last): File “/usr/lib/python2.7/multiprocessing/process.py”, line 258, in _bootstrap self.run() File “/usr/lib/python2.7/multiprocessing/process.py”, line 114, in run self._target(*self._args, **self._kwargs) File “/usr/lib/python2.7/multiprocessing/pool.py”, line 122, in worker put((job, i, (False, wrapped))) File “/usr/lib/python2.7/multiprocessing/queues.py”, line 392, in put return send(obj)IOError: [Errno 32] Broken pipeProcess PoolWorker-17:Traceback (most recent call last): File “/usr/lib/python2.7/multiprocessing/process.py”, line 258, in _bootstrap self.run() File “/usr/lib/python2.7/multiprocessing/process.py”, line 114, in run self._target(*self._args, **self._kwargs) File “/usr/lib/python2.7/multiprocessing/pool.py”, line 122, in worker put((job, i, (False, wrapped))) File “/usr/lib/python2.7/multiprocessing/queues.py”, line 392, in put return send(obj)IOError: [Errno 32] Broken pipeProcess PoolWorker-15:Traceback (most recent call last): File “/usr/lib/python2.7/multiprocessing/process.py”, line 258, in _bootstrap self.run() File “/usr/lib/python2.7/multiprocessing/process.py”, line 114, in run self._target(*self._args, **self._kwargs) File “/usr/lib/python2.7/multiprocessing/pool.py”, line 122, in worker put((job, i, (False, wrapped))) File “/usr/lib/python2.7/multiprocessing/queues.py”, line 392, in put return send(obj)IOError: [Errno 32] Broken pipeProcess PoolWorker-32:Traceback (most recent call last): File “/usr/lib/python2.7/multiprocessing/process.py”, line 258, in _bootstrap self.run() File “/usr/lib/python2.7/multiprocessing/process.py”, line 114, in run self._target(*self._args, **self._kwargs) File “/usr/lib/python2.7/multiprocessing/pool.py”, line 122, in worker put((job, i, (False, wrapped))) File “/usr/lib/python2.7/multiprocessing/queues.py”, line 392, in put return send(obj)IOError: [Errno 32] Broken pipeProcess PoolWorker-31:Traceback (most recent call last): File “/usr/lib/python2.7/multiprocessing/process.py”, line 258, in _bootstrap self.run() File “/usr/lib/python2.7/multiprocessing/process.py”, line 114, in run self._target(*self._args, **self._kwargs) File “/usr/lib/python2.7/multiprocessing/pool.py”, line 122, in worker put((job, i, (False, wrapped))) File “/usr/lib/python2.7/multiprocessing/queues.py”, line 392, in put return send(obj)IOError: [Errno 32] Broken pipeProcess PoolWorker-20:Traceback (most recent call last): File “/usr/lib/python2.7/multiprocessing/process.py”, line 258, in _bootstrap self.run() File “/usr/lib/python2.7/multiprocessing/process.py”, line 114, in run self._target(*self._args, **self._kwargs) File “/usr/lib/python2.7/multiprocessing/pool.py”, line 122, in worker put((job, i, (False, wrapped))) File “/usr/lib/python2.7/multiprocessing/queues.py”, line 392, in put return send(obj)IOError: [Errno 32] Broken pipeProcess PoolWorker-26:Traceback (most recent call last): File “/usr/lib/python2.7/multiprocessing/process.py”, line 258, in _bootstrap self.run() File “/usr/lib/python2.7/multiprocessing/process.py”, line 114, in run self._target(*self._args, **self._kwargs) File “/usr/lib/python2.7/multiprocessing/pool.py”, line 122, in worker put((job, i, (False, wrapped))) File “/usr/lib/python2.7/multiprocessing/queues.py”, line 392, in put return send(obj)IOError: [Errno 32] Broken pipeProcess PoolWorker-7:Traceback (most recent call last): File “/usr/lib/python2.7/multiprocessing/process.py”, line 258, in _bootstrap self.run() File “/usr/lib/python2.7/multiprocessing/process.py”, line 114, in run self._target(*self._args, **self._kwargs) File “/usr/lib/python2.7/multiprocessing/pool.py”, line 122, in worker put((job, i, (False, wrapped))) File “/usr/lib/python2.7/multiprocessing/queues.py”, line 392, in put return send(obj)IOError: [Errno 32] Broken pipeProcess PoolWorker-28:Traceback (most recent call last): File “/usr/lib/python2.7/multiprocessing/process.py”, line 258, in _bootstrap self.run() File “/usr/lib/python2.7/multiprocessing/process.py”, line 114, in run self._target(*self._args, **self._kwargs) File “/usr/lib/python2.7/multiprocessing/pool.py”, line 122, in worker put((job, i, (False, wrapped))) File “/usr/lib/python2.7/multiprocessing/queues.py”, line 392, in put return send(obj)IOError: [Errno 32] Broken pipeProcess PoolWorker-19:Traceback (most recent call last): File “/usr/lib/python2.7/multiprocessing/process.py”, line 258, in _bootstrap self.run() File “/usr/lib/python2.7/multiprocessing/process.py”, line 114, in run self._target(*self._args, **self._kwargs) File “/usr/lib/python2.7/multiprocessing/pool.py”, line 122, in worker put((job, i, (False, wrapped))) File “/usr/lib/python2.7/multiprocessing/queues.py”, line 392, in put return send(obj)IOError: [Errno 32] Broken pipeProcess PoolWorker-4:Traceback (most recent call last): File “/usr/lib/python2.7/multiprocessing/process.py”, line 258, in _bootstrap self.run() File “/usr/lib/python2.7/multiprocessing/process.py”, line 114, in run self._target(*self._args, **self._kwargs) File “/usr/lib/python2.7/multiprocessing/pool.py”, line 122, in worker put((job, i, (False, wrapped))) File “/usr/lib/python2.7/multiprocessing/queues.py”, line 392, in put return send(obj)IOError: [Errno 32] Broken pipeProcess PoolWorker-12:Traceback (most recent call last): File “/usr/lib/python2.7/multiprocessing/process.py”, line 258, in _bootstrap self.run() File “/usr/lib/python2.7/multiprocessing/process.py”, line 114, in run self._target(*self._args, **self._kwargs) File “/usr/lib/python2.7/multiprocessing/pool.py”, line 122, in worker put((job, i, (False, wrapped))) File “/usr/lib/python2.7/multiprocessing/queues.py”, line 392, in put return send(obj)IOError: [Errno 32] Broken pipeProcess PoolWorker-14:Traceback (most recent call last): File “/usr/lib/python2.7/multiprocessing/process.py”, line 258, in _bootstrap self.run() File “/usr/lib/python2.7/multiprocessing/process.py”, line 114, in run self._target(*self._args, **self._kwargs) File “/usr/lib/python2.7/multiprocessing/pool.py”, line 122, in worker put((job, i, (False, wrapped))) File “/usr/lib/python2.7/multiprocessing/queues.py”, line 392, in put return send(obj)IOError: [Errno 32] Broken pipeProcess PoolWorker-8:Traceback (most recent call last): File “/usr/lib/python2.7/multiprocessing/process.py”, line 258, in _bootstrap self.run() File “/usr/lib/python2.7/multiprocessing/process.py”, line 114, in run self._target(*self._args, **self._kwargs) File “/usr/lib/python2.7/multiprocessing/pool.py”, line 122, in worker put((job, i, (False, wrapped))) File “/usr/lib/python2.7/multiprocessing/queues.py”, line 392, in put return send(obj)IOError: [Errno 32] Broken pipeProcess PoolWorker-23:Traceback (most recent call last): File “/usr/lib/python2.7/multiprocessing/process.py”, line 258, in _bootstrap self.run() File “/usr/lib/python2.7/multiprocessing/process.py”, line 114, in run self._target(*self._args, **self._kwargs) File “/usr/lib/python2.7/multiprocessing/pool.py”, line 122, in worker put((job, i, (False, wrapped))) File “/usr/lib/python2.7/multiprocessing/queues.py”, line 392, in put return send(obj)IOError: [Errno 32] Broken pipeProcess PoolWorker-13:Traceback (most recent call last): File “/usr/lib/python2.7/multiprocessing/process.py”, line 258, in _bootstrap self.run() File “/usr/lib/python2.7/multiprocessing/process.py”, line 114, in run self._target(*self._args, **self._kwargs) File “/usr/lib/python2.7/multiprocessing/pool.py”, line 122, in worker put((job, i, (False, wrapped))) File “/usr/lib/python2.7/multiprocessing/queues.py”, line 392, in put return send(obj)IOError: [Errno 32] Broken pipeProcess PoolWorker-1:Traceback (most recent call last): File “/usr/lib/python2.7/multiprocessing/process.py”, line 258, in _bootstrap self.run() File “/usr/lib/python2.7/multiprocessing/process.py”, line 114, in run self._target(*self._args, **self._kwargs) File “/usr/lib/python2.7/multiprocessing/pool.py”, line 122, in worker put((job, i, (False, wrapped))) File “/usr/lib/python2.7/multiprocessing/queues.py”, line 392, in put return send(obj)IOError: [Errno 32] Broken pipeProcess PoolWorker-10:Traceback (most recent call last): File “/usr/lib/python2.7/multiprocessing/process.py”, line 258, in _bootstrap self.run() File “/usr/lib/python2.7/multiprocessing/process.py”, line 114, in run self._target(*self._args, **self._kwargs) File “/usr/lib/python2.7/multiprocessing/pool.py”, line 122, in worker put((job, i, (False, wrapped))) File “/usr/lib/python2.7/multiprocessing/queues.py”, line 392, in put return send(obj)IOError: [Errno 32] Broken pipeProcess PoolWorker-5:Traceback (most recent call last): File “/usr/lib/python2.7/multiprocessing/process.py”, line 258, in _bootstrap self.run() File “/usr/lib/python2.7/multiprocessing/process.py”, line 114, in run self._target(*self._args, **self._kwargs) File “/usr/lib/python2.7/multiprocessing/pool.py”, line 122, in worker put((job, i, (False, wrapped))) File “/usr/lib/python2.7/multiprocessing/queues.py”, line 392, in put return send(obj)IOError: [Errno 32] Broken pipeProcess PoolWorker-3:Traceback (most recent call last): File “/usr/lib/python2.7/multiprocessing/process.py”, line 258, in _bootstrap self.run() File “/usr/lib/python2.7/multiprocessing/process.py”, line 114, in run self._target(*self._args, **self._kwargs) File “/usr/lib/python2.7/multiprocessing/pool.py”, line 122, in worker put((job, i, (False, wrapped))) File “/usr/lib/python2.7/multiprocessing/queues.py”, line 392, in put return send(obj)IOError: [Errno 32] Broken pipeProcess PoolWorker-21:Traceback (most recent call last): File “/usr/lib/python2.7/multiprocessing/process.py”, line 258, in _bootstrap self.run() File “/usr/lib/python2.7/multiprocessing/process.py”, line 114, in run self._target(*self._args, **self._kwargs) File “/usr/lib/python2.7/multiprocessing/pool.py”, line 122, in worker put((job, i, (False, wrapped))) File “/usr/lib/python2.7/multiprocessing/queues.py”, line 392, in put return send(obj)IOError: [Errno 32] Broken pipeProcess PoolWorker-27:Traceback (most recent call last): File “/usr/lib/python2.7/multiprocessing/process.py”, line 258, in _bootstrap self.run() File “/usr/lib/python2.7/multiprocessing/process.py”, line 114, in run self._target(*self._args, **self._kwargs) File “/usr/lib/python2.7/multiprocessing/pool.py”, line 122, in worker put((job, i, (False, wrapped))) File “/usr/lib/python2.7/multiprocessing/queues.py”, line 392, in put return send(obj)IOError: [Errno 32] Broken pipeProcess PoolWorker-9:Traceback (most recent call last): File “/usr/lib/python2.7/multiprocessing/process.py”, line 258, in _bootstrap self.run() File “/usr/lib/python2.7/multiprocessing/process.py”, line 114, in run self._target(*self._args, **self._kwargs) File “/usr/lib/python2.7/multiprocessing/pool.py”, line 122, in worker put((job, i, (False, wrapped))) File “/usr/lib/python2.7/multiprocessing/queues.py”, line 392, in put return send(obj)IOError: [Errno 32] Broken pipeProcess PoolWorker-11:Traceback (most recent call last): File “/usr/lib/python2.7/multiprocessing/process.py”, line 258, in _bootstrap self.run() File “/usr/lib/python2.7/multiprocessing/process.py”, line 114, in run self._target(*self._args, **self._kwargs) File “/usr/lib/python2.7/multiprocessing/pool.py”, line 122, in worker put((job, i, (False, wrapped))) File “/usr/lib/python2.7/multiprocessing/queues.py”, line 392, in put return send(obj)IOError: [Errno 32] Broken pipeProcess PoolWorker-16:Traceback (most recent call last): File “/usr/lib/python2.7/multiprocessing/process.py”, line 258, in _bootstrap self.run() File “/usr/lib/python2.7/multiprocessing/process.py”, line 114, in run self._target(*self._args, **self._kwargs) File “/usr/lib/python2.7/multiprocessing/pool.py”, line 122, in worker put((job, i, (False, wrapped))) File “/usr/lib/python2.7/multiprocessing/queues.py”, line 392, in put return send(obj)IOError: [Errno 32] Broken pipeProcess PoolWorker-2:Traceback (most recent call last): File “/usr/lib/python2.7/multiprocessing/process.py”, line 258, in _bootstrap self.run() File “/usr/lib/python2.7/multiprocessing/process.py”, line 114, in run self._target(*self._args, **self._kwargs) File “/usr/lib/python2.7/multiprocessing/pool.py”, line 122, in worker put((job, i, (False, wrapped))) File “/usr/lib/python2.7/multiprocessing/queues.py”, line 392, in put return send(obj)IOError: [Errno 32] Broken pipeProcess PoolWorker-24:Traceback (most recent call last): File “/usr/lib/python2.7/multiprocessing/process.py”, line 258, in _bootstrap self.run() File “/usr/lib/python2.7/multiprocessing/process.py”, line 114, in run self._target(*self._args, **self._kwargs) File “/usr/lib/python2.7/multiprocessing/pool.py”, line 122, in worker put((job, i, (False, wrapped))) File “/usr/lib/python2.7/multiprocessing/queues.py”, line 392, in put return send(obj)IOError: [Errno 32] Broken pipeProcess PoolWorker-18:Traceback (most recent call last): File “/usr/lib/python2.7/multiprocessing/process.py”, line 258, in _bootstrap self.run() File “/usr/lib/python2.7/multiprocessing/process.py”, line 114, in run self._target(*self._args, **self._kwargs) File “/usr/lib/python2.7/multiprocessing/pool.py”, line 122, in worker put((job, i, (False, wrapped))) File “/usr/lib/python2.7/multiprocessing/queues.py”, line 392, in put return send(obj)IOError: [Errno 32] Broken pipe
UnityEngine.DebugLogHandler:Internal_Log(LogType, String, Object)
UnityEngine.DebugLogHandler:LogFormat(LogType, Object, String, Object)
UnityEngine.Logger:Log(LogType, Object)
UnityEngine.Debug:LogError(Object)
UnityEditor.WebGL.ProgramUtils:StartProgramChecked(ProcessStartInfo) (at /Users/builduser/buildslave/unity/build/PlatformDependent/WebGL/Extensions/Unity.WebGL.extensions/ProgramUtils.cs:46)
UnityEditor.WebGL.WebGlBuildPostprocessor:EmscriptenLink(BuildPostProcessArgs, Boolean, String, String) (at /Users/builduser/buildslave/unity/build/PlatformDependent/WebGL/Extensions/Unity.WebGL.extensions/BuildPostprocessor.cs:408)
UnityEditor.WebGL.WebGlBuildPostprocessor:LinkBuild(BuildPostProcessArgs) (at /Users/builduser/buildslave/unity/build/PlatformDependent/WebGL/Extensions/Unity.WebGL.extensions/BuildPostprocessor.cs:451)
UnityEditor.WebGL.WebGlBuildPostprocessor:PostProcess(BuildPostProcessArgs) (at /Users/builduser/buildslave/unity/build/PlatformDependent/WebGL/Extensions/Unity.WebGL.extensions/BuildPostprocessor.cs:916)
UnityEditor.PostprocessBuildPlayer:Postprocess(BuildTargetGroup, BuildTarget, String, String, String, Int32, Int32, BuildOptions, RuntimeClassRegistry, BuildReport) (at /home/builduser/buildslave/unity/build/Editor/Mono/BuildPipeline/PostprocessBuildPlayer.cs:272)
UnityEditor.BuildPipeline:BuildPlayerInternalNoCheck(String, String, String, BuildTargetGroup, BuildTarget, BuildOptions, Boolean)
UnityEditor.BuildPipeline:BuildPlayerInternal(String, String, String, BuildTargetGroup, BuildTarget, BuildOptions) (at /home/builduser/buildslave/unity/build/artifacts/generated/common/editor/BuildPipelineBindings.gen.cs:335)
UnityEditor.BuildPipeline:BuildPlayer(String, String, String, BuildTargetGroup, BuildTarget, BuildOptions) (at /home/builduser/buildslave/unity/build/artifacts/generated/common/editor/BuildPipelineBindings.gen.cs:232)
UnityEditor.BuildPipeline:BuildPlayer(BuildPlayerOptions) (at /home/builduser/buildslave/unity/build/artifacts/generated/common/editor/BuildPipelineBindings.gen.cs:210)
UnityEditor.BuildPipeline:BuildPlayer(String, String, BuildTarget, BuildOptions) (at /home/builduser/buildslave/unity/build/artifacts/generated/common/editor/BuildPipelineBindings.gen.cs:204)
WebGLBuilder:build() (at Assets/Editor/WebGLBuilder.cs:6)

(Filename: /Users/builduser/buildslave/unity/build/PlatformDependent/WebGL/Extensions/Unity.WebGL.extensions/ProgramUtils.cs Line: 46)

Exception: Failed building WebGL Player.
at UnityEditor.WebGL.ProgramUtils.StartProgramChecked (System.Diagnostics.ProcessStartInfo p) [0x0015b] in /Users/builduser/buildslave/unity/build/PlatformDependent/WebGL/Extensions/Unity.WebGL.extensions/ProgramUtils.cs:48
at UnityEditor.WebGL.WebGlBuildPostprocessor.EmscriptenLink (BuildPostProcessArgs args, Boolean wasmBuild, System.String sourceFiles, System.String sourceFilesHash) [0x001cd] in /Users/builduser/buildslave/unity/build/PlatformDependent/WebGL/Extensions/Unity.WebGL.extensions/BuildPostprocessor.cs:408
at UnityEditor.WebGL.WebGlBuildPostprocessor.LinkBuild (BuildPostProcessArgs args) [0x0016b] in /Users/builduser/buildslave/unity/build/PlatformDependent/WebGL/Extensions/Unity.WebGL.extensions/BuildPostprocessor.cs:451
at UnityEditor.WebGL.WebGlBuildPostprocessor.PostProcess (BuildPostProcessArgs args) [0x002a7] in /Users/builduser/buildslave/unity/build/PlatformDependent/WebGL/Extensions/Unity.WebGL.extensions/BuildPostprocessor.cs:916
at UnityEditor.PostprocessBuildPlayer.Postprocess (BuildTargetGroup targetGroup, BuildTarget target, System.String installPath, System.String companyName, System.String productName, Int32 width, Int32 height, BuildOptions options, UnityEditor.RuntimeClassRegistry usedClassRegistry, UnityEditor.BuildReporting.BuildReport report) [0x000d7] in /home/builduser/buildslave/unity/build/Editor/Mono/BuildPipeline/PostprocessBuildPlayer.cs:272
UnityEditor.BuildPipeline:BuildPlayerInternalNoCheck(String, String, String, BuildTargetGroup, BuildTarget, BuildOptions, Boolean)
UnityEditor.BuildPipeline:BuildPlayerInternal(String, String, String, BuildTargetGroup, BuildTarget, BuildOptions) (at /home/builduser/buildslave/unity/build/artifacts/generated/common/editor/BuildPipelineBindings.gen.cs:335)
UnityEditor.BuildPipeline:BuildPlayer(String, String, String, BuildTargetGroup, BuildTarget, BuildOptions) (at /home/builduser/buildslave/unity/build/artifacts/generated/common/editor/BuildPipelineBindings.gen.cs:232)
UnityEditor.BuildPipeline:BuildPlayer(BuildPlayerOptions) (at /home/builduser/buildslave/unity/build/artifacts/generated/common/editor/BuildPipelineBindings.gen.cs:210)
UnityEditor.BuildPipeline:BuildPlayer(String, String, BuildTarget, BuildOptions) (at /home/builduser/buildslave/unity/build/artifacts/generated/common/editor/BuildPipelineBindings.gen.cs:204)
WebGLBuilder:build() (at Assets/Editor/WebGLBuilder.cs:6)

(Filename: /Users/builduser/buildslave/unity/build/PlatformDependent/WebGL/Extensions/Unity.WebGL.extensions/ProgramUtils.cs Line: 48)

In my case, asm2wasm was simply using too much memory for CircleCI. I had a similar error that started once the project became too large and complicated.