The last release of Octopus was February 16th. One of my goals when building the business was to make fortnightly releases the "heartbeat" of the business, a goal that seems to have fallen flat this release.
That's not to say that no work is happening on Octopus. Far from it, in fact. This next release of Octopus is going to be the biggest change since Octopus first shipped. The branch for this release has 121 Git commits and counting so far.
So what's going on? Why has it taken so long? In this post, I'll walk you through what's changing and some of the new features.
Goodbye SQL Server, hello RavenDB
Since the beginning, Octopus has used Microsoft SQL Server with Entity Framework 4.0. While it worked well enough, it did make the deployment complicated. If you visit the Octopus installation page, you'll find a huge blue box explaining what to do if you have SQL on another machine for example.
Using SQL Server also meant a lot of limitations around how easily I could evolve the database schema. While I could add new columns or tables easily enough with change scripts (thanks to DbUp), it meant I was always worried about adding too many concepts and ending up with too many joins or queries to render a page. This bit me especially when I was trying to implement permissions.
A release management tool like Octopus, it seems, is perfectly designed for a document store. And the embedded version of RavenDB means my installation process is far simpler too. While Octopus will use the embedded version by default, I'm also going to support the OEM Server license for RavenDB that Ayende has been considering, when it becomes available. This will mean you can choose to run RavenDB on a separate server to your Octopus server, without any extra costs.
Changing from a relational database to a document database has been a good lesson, and it is a lot more involved than changing from one relational database to another. Making such a big change had a few impacts:
- Almost every MVC controller and back-end process that used the data model has had to be rewritten
- The installation process needs to be updated
These two reasons are why there hasn't been a release since February. However, since I've had to touch almost every part of Octopus to make this change, I took the time to improve a bunch of things along the way...
A new look
Since it was first released, Octopus has had a purple and green colour scheme. This was fun, but there's not a lot that can be done with a purple scheme. For 2012, Octopus will be sporting a modern blue theme:
Twitter Bootstrap has been used for button styles, forms, and the grid layout, but the rest of the look is custom.
You'll also notice that the URL's are getting cleaner, especially where projects are concerned.
When you go to the 'releases' tab under a project, you'll now see a lot more details about the release. The release notes and description of your NuGet packages will appear, so you can more clearly see what this release contained. You can also see the list of deployments for the release.
Notice that release numbers now support semver 2.0, including tags like
-alpha at the end, just like your NuGet packages.
One of the biggest UI changes this release has been for deployments. Previously, deployments were shown on the release page, with another link to view the deployment log. Now, there's a dedicated page for deployments:
There are a couple of interesting improvements here:
- A summary of the deployment steps is shown, so you can quickly see where the deployment is up to
- You can now add comments when creating a deployment
- It's easier to promote one deployment to another environment
- The 'raw' link lets you download the deployment log into your favourite text editor
The deployment log uses expandable/collapsible sections so you can drill into the output and easily jump to errors. The whole page has been rewritten to use Knockout.js instead of meta-refreshing the page every few seconds, so you won't lose your place while the deployment is executing.
When you create a deployment, you'll get a few extra options:
One of the new features is the ability to skip a deployment step. This is useful, for example, when you are re-deploying to an environment and you know a step isn't necessary.
The second change is the ability to add comments to a deployment. This is useful when you want some kind of traceability for releases - for example, you might paste the contents of an approval email from your business sponsor.
Octopus previously used jQuery UI dialogs for a lot of interactions - editing machines, editing variables, and creating deployments. For this release you'll see a move away from jQuery UI dialogs, preferring full pages instead.
Users, Groups and Permissions
One of the big features missing in previous versions of Octopus was security and controls. This meant a lot of customers were using Octopus for development and test releases, but weren't allowed to use it to control production releases.
A wiki page describes the security model, but basically:
- You can choose between Windows and Forms authentication
- For forms authentication, you can invite users to create an account (Windows accounts are automatically created)
- You can create groups out of user accounts or other groups, as well as from Windows groups
- You assign those groups permissions
For example, this system allows you to specify a rule like:
- Only users in the ACME Web Portal Release Managers group can deploy ACME Web Portal projects to the Production environment.
- All users in the ACME Web Portal Developers group can deploy ACME Web Portal projects to the Development environment.
This release I've also tried to improve the user experience for common tasks. In previous releases of Octopus, editing variables used to be quite cumbersome - each variable opened in a new dialog and had to be saved as you went. The new editor lets you edit the variables in bulk, and saves them when you are done, making it much easier to edit a large number of variables in one sitting.
A few changes have also been made to Tentacle:
- The directory structure used by Tentacle is much cleaner (card)
- Using "force" has been improved (card)
- Environment names are part of the path
So for example, if you deploy MyApp.Web version 1.0.0 to a Production machine, you'll get a path like:
If you deploy it again with the "force" flag set, you'll get:
This change makes it much easier to have a machine that serves dual roles (for example, a machine that doubles as both a dev and test machine).
Web site changes
I've also been working on a new version of the OctopusDeploy.com website. The site currently does a terrible job of explaining what Octopus does, and the documentation and support is scattered in a bunch of different places.
When the next release of Octopus is ready, I'll also release a new website that brings the documentation and a blog onto a single site, and does a much better job of explaining the product. I'm also going to record a couple of videos showing what Octopus does, and how to get started with it.
The "in progress" column in the Trello board gives a rough idea of what's left to do before this release ships. Most of the work revolves around fixing up the installer to work with RavenDB, and making the final UI changes so that everything works with RavenDB properly, so I'm hoping this release won't be more than a couple of weeks away.
This release was originally just supposed to be about adding security. Instead, it has seen a database change, a UI refresh and a host of new features. Perhaps it's a good example of scope creep, but on the other hand, when making such a fundamental change in how a project works, maybe taking a couple of months to get it done isn't bad - time will tell. After this release I'll try to stick to the goal of small, incremental changes every couple of weeks. Promise! :)
Hello, I'm Paul Stovell
I'm a Brisbane-based software developer, and founder of Octopus Deploy, a DevOps automation software company. This is my personal blog where I write about my journey with Octopus and software development.
I write new blog posts about once a month. Subscribe and I'll send you an email when I publish something new.Subscribe