Release Management

  • Release Management

    Hallo Team,

    viele von euch arbeiten als Software-Entwickler. Daher würde mich mal interessieren wie bei euch der Releaseprozess abläuft.
    Bei uns läuft das in etwa so:

    Auf unseren Entwicklungsserver1 läuft auch ein Cron der trunk alle 5 Minuten aktualisiert.
    Das ist ganz praktisch, wenn man seine lokalen Änderungen nochmal mit dem aktuellen trunk abgleichen will oder anderen schlichtweg was präsentieren muss.

    Wenn einmal in der Woche Release Day ist, wird der Code der Branch aktualisiert.
    Wir machen hierzu übrigens ein einfaches svn remove branch/0.1 && svn copy trunk branch/0.1 - das mergen bereit manchmal Probleme ;)

    Auf Entwicklungsserver2 wird dann der Cron gestartet um alle 5 Minuten aus branch zu aktualisieren.
    Ein Teil der Entwickler testet - ein Teil der Entwickler arbeitet weiter an neuen Features.

    Werden nun Fehler gefunden wird nutzen Entwickler den trunk um Korrekturen vorzunehmen.
    Die Releaseverantwortlichen können dann einzelne Korrekturen in die branch übernehmen.

    Wenn alles stable ist wird die Version getaggt und auf den Produktionsmaschinen wird aus der branch geupdatet.

    Erweiterungen zum svn update:
    Einmal dürfen natürlich keine Konfigurationsdateien eingecheckt werden - die Zugangdsaten der Produktionsmaschinen bleiben geheim. Daher gibt es ein Konfigurationsscript.
    a) das konfigurationstemplate wird geparst und versucht zu befüllen - wenn Variablen fehlen wird abgebrochen
    b) sind datenbankverbindungen angegeben werden tests durchgeführt.
    c) datenbankänderungen die auch in der verzeichnisstruktur liegen werden ausgeführt (falls gekennzeichnet als pre-update)
    d) fileupdates ausführen
    e) datenbankänderungen (post-update)

    Ich dachte mir, dass jede Softwarefirma vor so einem Problem steht - kennt ihr eine Software wie das angesprochene "Konfigurationsscript" ?
    Wie läuft das bei euch ab? Wie sollte es ablaufen?
  • Hallo, bei uns läuft das ähnlich ab wie bei D0nut, hier mal eine abgespeckte erklärung:

    1x Datenbank-Server wo 2 Instancen laufen einmal Live und Preview
    1x Preview-Server
    1x Live-Server
    1x SVN-Server

    Ich habe für die Steuerung ein Makefile geschrieben, was mehre featrues hat...

    Auf dem Preview, wird alle 5min Trunk aktualisiert. Wenn ich auf dem Preview-Server

    Quellcode

    1. make live


    ein klopfe wird alles auf den Live Server geschippert, es werden backups gemacht etc.

    mit

    Quellcode

    1. make rollback


    spiele ich das Backup wieder ein Datenbank wird dabei auch aktualisiert und beim rollback auch wieder zurück gespielt.
    Über das Makefile kann ich ein hard-DB update machen und ein Soft, das ist ganz sinnvoll, wenn ich aktive Sessions killen muss. (Bei Struktur änderung) ansonsten bleiben die Sessions erhalten.

    Mit Branch und Tag läuft das ähnlich ab wie bei D0nut.
    Erst wenn der letzte FTP Server kostenpflichtig, der letzte GNU-Sourcecode verkauft, der letzte Algorithmus patentiert, der letzte Netzknoten kommerzialisiert, die letzte Newsgroup moderiert wird, werdet Ihr merken, dass man mit Geld allein nicht programmieren kann.