Hello!

I've been using Jenkins to build code from hundreds of git repositories
using declarative pipelines. In the setup I'm using, I have a small
number of nodes, and all nodes must successfully build and run all
tests in order for the job as a whole to have been considered
successful.

I'd now like to try using Jenkins to render animations using Blender[0].

The problem that I'm actually trying to solve is that Blender (like all
3D renderers) generally takes a long time to render images. When
rendering an animation, each frame is rendered individually and saved
to a PNG file. When all frames have been rendered, the PNG files can be
stitched together with something like ffmpeg to produce a video file.
Given that there's no data dependency between frames, it's possible to
distribute the workload over many machines by giving each machine a set
of frame numbers to render and then collecting the images from all
machines when they've all finished rendering.

Blender has a full command-line interface, so the 'sh' declaration
in the pipelines will be enough to launch instances of Blender for
rendering. I can place the data to be rendered in a Git repository so
that all nodes can pull from that repository to start building. I would
include a pipeline script in the repository that each node can use to
build. This is how I've been handling building code, and it's been
working very well.

The problem: It's not clear to me how I could assign a set of frame
numbers to each node in the pipeline. I could hard code the numbers
into something that the pipeline code reads in the first stage of
building, but it seems like to do that effectively, I'd need to know
all of the nodes ahead of time (meaning I'd have to rewrite the data if
I add or remove a node later).

What I would really like is for the pipeline in each node to be told
"You are node 1 of 4" "You are node 3 of 4", and so on. Node 3 could
then, for example, use this information to tell Blender "Start
rendering at frame 3, and step forward by 4 frames each time" (4
because there are 4 nodes in total). If each node did this, the entire
range of frames would be covered and the work would be split equally
between the four nodes. The nodes I have are homogeneous, so there's no
need to try to give powerful nodes more work, and weaker nodes less.

Any advice would be appreciated!

[0] https://www.blender.org/

-- 
Mark Raynsford | http://www.io7m.com

-- 
You received this message because you are subscribed to the Google Groups 
"Jenkins Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to jenkinsci-users+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/jenkinsci-users/20181218205530.767b8097%40almond.int.arc7.info.
For more options, visit https://groups.google.com/d/optout.

Attachment: pgpXUFo0WVzMG.pgp
Description: OpenPGP digital signature

Reply via email to