There's too little information to give a good answer; it depends on lot on what your environment is, where you need to distribute your changes to, and how those environments look like.
I've worked in environments where we used yum to install RPM packages system wide. RPM is a format that not only can be deployed on Redhat but also on other (Unix) platforms. You might even want to use a tool like http://www.cfengine.org/ cfengine to automate distribution. (I'm not the biggest fan of cfengine, but that probably has more to do with inherited bad setups than with the tool itself).
For modules that need local patches, we'd start with the source RPMs (SRPM). Then we modify the spec file to first run a set of patches before building the RPMs. Those RPMs would end up in the yum repository. This separates the original code from your patches, so if a new release comes (and you still need your local patch), and you want to use the new release, deployment is "relatively" easy. Now I say relative - I've also worked for a company where we compiled the Linux kernel ourselves -- after running 350 patches. But we also used a similar setup: keep the Linux kernel source unmodified, have a directory of patches, and let the spec file apply the patches before compiling.