Automating, Building, Testing and Deploying to Production Server
Paul Rubin
http
Sun Oct 2 20:46:23 EDT 2005
"yoda" <nochiel at gmail.com> writes:
> I realize I'm losing so much time I could spend more productively. I'd
> therefore like to know the different approaches you guys employ to
> deploy builds from your staging servers (or laptops:) to the production
> server in an automated repeatable safe manner.
This is really a wide-ranging question and clpy maybe is not the best
place for it. Basically every installation does it differently
depending on its requirements. You could google some phrases like
"continuous integration" and "configuration management" to see some
approaches. The general outline is:
1) QA dept. has a server configured as identically as possible to the
production server.
2) Engineering releases a sw version by making a source control
branch. QA checks out the branch and tests it against pre-agreed
release criteria. If there's differences of opinion about criteria,
QA manager and engineering manager meet to resolve differences.
3) when QA manager and engineering manager agree to release, code is
pushed out to production server (same process as release to QA:
someone logs onto the production server and does an svn update or
whatever). How that's done depends on how the server works. I
worked at one serious web site which worked as follows. We had a
primary server and hot backup (secondary) server, so we did pushes
by taking the backup server offline, checking out the new build on
the backup server and running some sanity tests, then launching the
service on the backup server and taking down the primary, so there
would be an automatic failover to the backup which was now running
the new code. We'd then upgrade the primary the same way, and fail
over again if desired. Smaller sites with no hot secondary will
typically go briefly offline for version upgrade. Larger sites
with multiple primaries could have a more gradual process where
primaries are upgraded one by one, or whatever.
4) Some high availability services (e.g. telecom) need hot upgrade
(code replacement without stopping the application or interrupting
connections). This needs to be built into the app architecture at
a deep level and I don't think it's what you were asking, but some
languages like Erlang make provisions for it.
Generally, a release cycle for an online service isn't that much
different than that for a shrink-wrapped software package.
More information about the Python-list
mailing list