As you deploy your projects, you can assign releases of projects to specific channels. This is useful when you want releases of a project to be treated differently depending on the criteria you've set. Without channels, you could find yourself duplicating projects in order to implement multiple release strategies. This would, of course, leave you trying to manage multiple duplicated projects. Channels let's you use one project, with multiple release strategies.

Channels can be useful in the following scenarios:

When you are implementing a deployment process that uses channels you can scope the following to specific channels:

You can also define versioning rules per channel to ensure that only versions which meet specific criteria are deployed to specific channels.

The Channels Walkthrough blog post and accompanying video, goes through the process of implementing some of the channel strategies mentioned above.

Managing Channels

Every project has a default channel.

Channels are managed from the Project overview page by selecting the specific project you are working with and clicking Channels.

Create a New Channel

Design the Version Rules

Version rules assist in selecting the correct versions of packages for the Channel.  They are only used when creating a release, either manually or via Automatic Release Creation.

Version Rules will work best when you follow Semantic Versioning (SemVer 2.0.0) for your versioning strategy.

You can use the full semantic version as part of your version range specification. For example: [2.0.0-alpha.1,2.0.0) will match all 2.0.0 pre-releases (where the pre-release component is >= alpha.1), and will exclude the 2.0.0 release.

Following the standard 2.0.0 SemVer syntax, a pre-release tag is the alpha numeric text that can appear after the standard major.minor.patch pattern immediately following a hyphen. Providing a regex pattern for this field allows the channel to filter packages based on their tag in a very flexible manner. Some examples are.

If adding a pre-release tag to Channels, you will also need to add the tag ^$ to your default channel

The Design Version Rule window will show a list of the packages that will deployed as part of the deploy package step selected earlier. The versions of the packages that will deployed in this channel with the version rules you've designed will be highlighted in green, and the versions of the packages that will not be deployed with be shown in red. You can continue to edit the version rules in this window. Using Channels

Once a project has more than one Channel, there a number of places they may be used.

Controlling Deployment Lifecycle

Each Channel defines which Lifecycle to use when promoting Releases between Environments. You can choose a Lifecycle for each Channel, or use the default Lifecycle defined by the Project.

For instance, when you ship pre-release software to your early access users, you can use an early access (or beta) channel which uses a Lifecycle that deploys the software to an environment your early access users have access to. Modifying Deployment Process

Deployment Steps can be restricted to only run on specific Channels.

For instance, you might decide you'd like to notify your early access users by email when an update version of the software is available. This can be achieved by adding an email step to your deployment process and scoping the step to the early access channel. That way the step will only run when a release is deployed to the early access channel and your early access users will only receive emails about relevant releases. As you release software to different Channels, it's likely that some of the variables in those Channels will need to be different. Variables can be scoped to specific Channels. Deploying to Tenants

You can control which Releases will be deployed to certain Tenants using Channels. In this example, Releases in this Channel will only be deployed to Tenants tagged with Early access program/2.x Beta. Creating Releases

Every Release in Octopus Deploy must be placed into a Channel. Wherever possible Octopus will choose the best possible Channel for your Release, or you can manually select a Channel for your Release.

Manually Creating Releases

When you are creating a Release, you can select a Channel. Selecting the Channel will cause the Release to use the Lifecycle associated with the Channel (or the Project default, if the Channel does not have a Lifecycle).  It will also cause the Deployment Process and Variables to be modified as specified above.

The package list allows you to select the version of each package involved in the deployment.  The latest column displays the latest packages that match the version rules defined for the Channel (see version rules for more information).

Using Build Server Extensions or Octo.exe

When using one of the build server extensions or octo.exe to create releases, you can either let Octopus automatically choose the correct Channel for your Release (this is the default behavior), or choose a specific Channel yourself.

Automatic Release Creation

When enabling Automatic Release Creation for your project, you are required to select a Channel (if the project has more than one). Any releases created automatically will use the configured channel.  Additionally, any Version Rules configured for the Channel will be used to decide whether a release is automatically created.

For example, if version 3.1.0 of a package Acme.Web is pushed to the Octopus internal NuGet repository, and the channel selected for Automatic Release Creation has a version rule range that doesn't include 3.1.0, then no release will be created. Was this page helpful?

That's great!

Is there anything we can do to improve it?

Now that you mention it...

Thanks so much for taking the time to give us feedback!
[null, {"document_url": "https://octopus.com/docs/deployment-process/channels", "unformatted_src": "https://i.octopus.com/docs/images/3048999/5865686.png", "src": "https://i.octopus.com/docs/images/3048999/5865686.png", "rendered_width": 500, "rendered_height": "100%"}, null, {"document_url": "https://octopus.com/docs/deployment-process/channels", "unformatted_src": "https://i.octopus.com/docs/images/3048999/5865685.png", "src": "https://i.octopus.com/docs/images/3048999/5865685.png", "rendered_width": 500, "rendered_height": "100%"}, null, {"document_url": "https://octopus.com/docs/deployment-process/channels", "unformatted_src": "https://i.octopus.com/docs/images/3048999/3278459.png", "src": "https://i.octopus.com/docs/images/3048999/3278459.png", "rendered_width": 500, "rendered_height": "100%"}, null, {"document_url": "https://octopus.com/docs/deployment-process/channels", "unformatted_src": "https://i.octopus.com/docs/images/3048999/3278460.png", "src": "https://i.octopus.com/docs/images/3048999/3278460.png", "rendered_width": 500, "rendered_height": "100%"}, null, {"document_url": "https://octopus.com/docs/deployment-process/channels", "unformatted_src": "https://i.octopus.com/docs/images/3048999/5865683.png", "src": "https://i.octopus.com/docs/images/3048999/5865683.png", "rendered_width": 500, "rendered_height": "100%"}, null, {"document_url": "https://octopus.com/docs/deployment-process/channels", "unformatted_src": "https://i.octopus.com/docs/images/3048999/3278463.png", "src": "https://i.octopus.com/docs/images/3048999/3278463.png", "rendered_width": 500, "rendered_height": "100%"}, null, {"document_url": "https://octopus.com/docs/deployment-process/channels", "unformatted_src": "https://i.octopus.com/docs/images/3048999/3278462.png", "src": "https://i.octopus.com/docs/images/3048999/3278462.png", "rendered_width": 500, "rendered_height": "100%"}, null, {"document_url": "https://octopus.com/docs/deployment-process/channels", "unformatted_src": "https://i.octopus.com/docs/images/3048999/3278461.png", "src": "https://i.octopus.com/docs/images/3048999/3278461.png", "rendered_width": 500, "rendered_height": "100%"}, null]