I'm working on an automated update system for a legacy server/client software package written in Delphi. The way I'm designing it is so the client's (customer's) server machine runs a service which...
- periodically checks online for new versions
- automatically downloads files
- hosts latest version information for all client machines
- hosts files for client machines to update
Once this service has downloaded update files, it raises a flag in the database alerting all client machines that updates are available. BUT, the thing is, the server must be installed first. So, an administrator would see this message and approve the update. However, the administrator must schedule a time for it to install. At that scheduled time, the server will update its self. If everything was successful, it will raise another flag in the database for all client machines to also update. If anything happened, it will restore the backup which was made before the install.
My question is... Is this good practice? Of course automated updates is a very good thing... if done right. This software is used in real-time in retail and wholesale environments, so if anything goes wrong during this scheduled installation, people could come to work the next morning to a broken system. The point is, no matter how automated I make this, an administrator still needs to ensure everything went smooth.
Further issues...
- client machines must know not only the database server info, but also their update server info.
- server machine might be at another location which might require firewall configuration
- database changes may give unforeseen results, which aren't known until something bad happens
- client machines may be shut down and need to update once it starts
- a list full of possible scenarios which may go wrong
So in this situation, would you feel comfortable making a 100% automated updating system for a sensitive software? Because some of our clients have up to 50 client computers which need to be updated to match their server's database.