My 2 cents below. Keep in mind that this is generic advice based on assumptions since this thread does not have any real-world examples for us to analyze (which is ok, but means my response may not address your exact needs)
Opinion: Plugins or Builder images?
Plugins and build images serve different needs. More below …
I’ve found working with plugins to be a little tedious. Stumbling through correctly writing the pipeline commands and having to write many pipeline commands accomplish what to me is sometimes be a relatively cohesive task.
The purpose of plugins is to create re-usable components that you can share across projects. Not everything is re-usable, and in some cases, writing a plugin is more complex than writing the shell command or invoking a shell script. If you are creating plugins that are not re-usable across projects, plugins are probably the wrong tool for the job.
If you are creating plugins to simplify your yaml (for example) maybe what you really want is a shell script? We do this https://github.com/drone/drone/blob/master/.drone.yml#L33:L38
What are peoples experiences with just using a single ‘builder’ image with all necessary cli tools installed?
This is a common pattern. Teams create a base Docker image with their toolchain installed, and then use that image in the pipeline. This is especially helpful when teams have to
apt-get install a large number of dependencies and they want to reduce their build times.
However, the idea of using a “single image” in your pipeline seems to be at the other extreme of using plugins for everything. Typically I would expect a pipeline to consist of both. For example, you might have a build image that you use to compile and test your code, and then you use a plugin to deploy and a plugin send notifications …