development/staging/production

Will Partain <[email protected]>
Newsgroups gmane.comp.sysutils.ark.devel
Message-ID <[email protected]>
In an off-list message on another topic, Harlan came out
with this Rather Good Stuff; I am taking the liberty of
replying publicly.  [Some reformatting...]

> I'm also wondering if there is a general need for separate
> areas for development, testing, and production "roll out".

*YES*.  This kind of thing has to be possible.  But it
mustn't be mandatory -- ARK is also aimed at the 4-8
hosts on your home network...

> For example, the sidai team is a production team.

Whoa!  There's nothing to stop you using teams that way, but
I wouldn't.  Sidai is a "policy" team -- it advocates
certain ways of doing things, e.g. "build packages from
source", do the "install/deploy/reveal" gig, use Amanda,
... :-)

> At some point, people will want to do development on that
> team (on some number of potentially different items), and
> each developer will probably want a sandboxed "roll out"
> area.
> 
> Once a development milestone has been reached, I can see
> that the changes should be integrated into a testing area,
> which would need to be tested/reviewed by other folks.
> 
> Once this revision of the team has been "accepted", it
> would be put into production and rolled out everywhere.
> 
> There are a number of ways to do this:
> 
>     sidai	   The production team
>     sidai-test   The staging area for the next production release
>     sidai-will-23  a development team for, say, Will's #23 TODO item
> 
> Part of me thinks that bitkeeper repositories
> <http://www.bitkeeper.com> may be an easier way to handle
> this rather than using different team names.

Ah, yes, *exactly* (though I certainly wouldn't mandate
BitKeeper; incidentally, my hot tip is
Subversion... http://subversion.tigris.org/).

In CVS terms, I would have a workspace (cvs checkout...) for
production, another for staging, and one each (at least) for
each developer.

Each host would be tied to a workspace.  Each developer
would be given one or more machines to mangle -- they would
be "tied" to the developer's workspace.  ("Tying" requires
nothing more than setenv'ing ARK_PROFILE to point to a
particular file.)  Developers presumably work against the
HEAD branch (cvs'ly speaking).

Then you'd have a small group of machines -- one of each
type, probably -- tied (perhaps temporarily?) to the
"staging" workspace.  This workspace would be 'cvs update'd
against a not-yet-in-production branch.

All the other machines would be tied to the production
workspace.  This workspace would be 'cvs update'd against a
(stable) release branch.

> Regardless, I don't know what else might have to be
> addressed "inside" the team spec to identify this.  I do
> know I HATE having to change things in multiple places
> when going from development->test->production, so I'd
> prefer to have an XML gizmo (attribute/entity) that
> specifies the "state" of the team and have the filename
> generation take this value into account.

As I suggest, solving the problem w/ your CM system rather
than your team stuff, avoids this (real) problem.

There is a currently-empty web page about "sysadmin
configuration management"; source is sidai/webpages/scm.txt.
I would like to write it as a response to the (imaginary)
scenario of four sysadmins trying to manage a 400-host site.
(Actually, I think there's a proper paper to be done on this
stuff...)

Back to teams: I can imagine a 'sidai-plus' team which says,
"Yes, we agree with how Sidai does the low-level stuff; but
we need a strict development/test/staging/production
approach on top of that".  The prototyping machinery will
let you set this up quite easily: where `glasli1' has...

   <prototype team="sidai" name="GNU" />

... you would have ...

   <prototype team="sidai-plus" name="GNU" />

... or perhaps ...

   <prototype team="sidai-plus" name="ALL" />
   <prototype team="sidai"      name="GNU" />

(The latter would work if 'sidai-plus' didn't introduce much
new <code>; instead, it just <param>'d existing sidai code
to make it do the right thing.)

Somebody please yell if I'm talking b******s.

Will
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.