Deploying Updates via Octopus

kira.resari's Avatar

kira.resari

19 Jan, 2018 12:08 PM

Hello everyone,

I wanted to ask if it is possible to use octopus to automatically deploy updates for installed software.

My company's premise is as follows:

We are installing our software on our clients' servers, and would like to have an easy way of updating it. Ideally, the whole process would be automated from the time a commit is made.

I have already gathered some experience and can see that Octopus provides a number of useful components to do just this, such as environments to enable us to group our clients and only deploy updates to clients of a certain group. I have also already adjusted our software's installer to automatically install and update an Octopus Tentacle on the target machine.

However, the next step is where I struggle: How can I deploy and install updates via Octopus? Ideally, the deployment of updates should require as little resources as possible, such as only updating individual .dlls if those are all that changed. Is there a way we can achieve this using Octopus Deploy?

For the record, we are using Advanced Installer to create the Installer for our Products.

Thanks in advance,
Kira Resari

  1. Support Staff 1 Posted by Daniel Fischer on 22 Jan, 2018 01:00 AM

    Daniel Fischer's Avatar

    Hi Kira,

    Thanks for getting in touch! While Octopus can not exactly only update a several .dll's in your deployment, it does take advantage of delta compression during the transfer. The following documentation page outlines how we handle this. So technically if the new package has <80% difference, only those changes will be pushed to the Tentacle to be deployed. However, the entire package will still be deployed once the file differences are transferred to the Tentacle.

    Let me know if the above helps or if you have any further questions.

    Best regards,
    Daniel

  2. 2 Posted by kira.resari on 22 Jan, 2018 06:47 AM

    kira.resari's Avatar

    Hi Daniel,

    thanks for the reply.

    So, let me try to assess how a pipeline for that would work. Please correct me if any of my assumptions are wrong, or if there is an easier way to do things.

    In essence, that would mean we'd install the software on our client's servers and manually configure the environments for those servers. Simultaneously, we'd have TeamCity create a "mirror" installation on our build server which looks just like a full installation, having all the files in the same places. Then, we'd add the mirror installation folder into a package (Is that even possible? And if so, what package type would be suitable for this?), and push it to Octopus. Octopus would finally deploy the package to the configured environments and overwrite the files in the installation folders with the newer versions.

    Is that something that would work? Or am I getting the wrong idea here?

    On a related topic, assuming we were to install our software on different drives on different servers that are part of the same environment (so the installation path is different), how would we best handle the deployment process? The installation path of our product is registered in the registry on installation. Is that something we can use when deploying packages with Octopus?

    Thanks in advance,
    Kira Resari

  3. Support Staff 3 Posted by Daniel Fischer on 22 Jan, 2018 10:28 PM

    Daniel Fischer's Avatar

    Hi Kira,

    Thanks for the information! I believe Octopus can help you out a lot with automating this process. First thing to note is that Octopus excels at automating the configuration of your deployments, once you have configured your projects, variables, environments, targets and Lifecycles.

    You can configure pretty much every aspect of your deployment through various steps available in Octopus, if we do not have a step for it then you can use a Custom Script.

    Generally you would have a single application per a package, build your build with any dependent files it need including any configuration files or custom scripts(this can also be handles by Octopus as per above documentation). In order to separate your deployments between certain machines in the same environment you can use the target roles feature. These act as logic separators in Octopus, letting you scope different variables in your deployment to different machines, or multiple.

    An example would be your final question about installing Octopus to different drives. This can be achieved with a combination of our custom installation directory feature and target roles.

    Your project could have some variables like the following:
    Name | Value | Scope

    CustomInstallationDirectory | C:\application | web-target
    CustomInstallationDirectory | D:\application | sql-target
    

    Taking advantage of our custom scripts and project variable alongside target role scoping, you are able to achieve automation for the majority of the deployment.

    I may not have answered all of your questions, and I may have some unhelpful information here. Let me know if I have missed anything or if you still have questions. :)

    Best regards,
    Daniel

  4. 4 Posted by kira.resari on 23 Jan, 2018 05:31 AM

    kira.resari's Avatar

    Hi Daniel,

    thank you for the advice and inspiration. I feel I have a good idea of how I would do this now.

    Cheers,
    Kira

  5. Support Staff 5 Posted by Daniel Fischer on 24 Jan, 2018 04:46 AM

    Daniel Fischer's Avatar

    Hi Kira,

    Thanks for the update! Please feel free to let me know if you run into any issues down the track or have any further questions. :)

    Best regards,
    Daniel

Reply to this discussion

Internal reply

Formatting help / Preview (switch to plain text) No formatting (switch to Markdown)

Attaching KB article:

»

Attached Files

You can attach files up to 10MB

If you don't have an account yet, we need to confirm you're human and not a machine trying to post spam.

Keyboard shortcuts

Generic

? Show this help
ESC Blurs the current field

Comment Form

r Focus the comment reply box
^ + ↩ Submit the comment

You can use Command ⌘ instead of Control ^ on Mac