We use puppet to distribute our own software (i.e., the stuff we write, which we want running on our own servers). So somewhere we have to compile this software.
It makes sense to me that I might git pull and compile it on the puppet master. Compile once, distribute, our machines are homogeneous and the binaries run on their anointed hosts.
But when we upgrade hosts, various libraries will change, and we can find ourselves needing to recompile for the new library set.
It seems the right thing to do is to package our software, serve these debs to ourself, and then just use package directives in puppet.
Q1: Does this sound right / Did I miss something important here?
Q2: Then how do the deb's get packaged and uploaded? Is this a manual release process? Meaning we upgrade a test server to the new OS and library versions in order to compile and package.
Q2B: Now suppose I install that CI server I keep telling my team I'll get around to installing. The CI server knows nothing about dist-upgrades, as far as I can tell. So does this part have to remain manual?