Octopus 1.2.2 includes support for variable substitutions, which allows parts of a variable to reference another variable.
For example, prior to Octopus 1.2.2, I had this variable defined:
After upgrading to 1.2.2 I can now use a single variable that references one of the pre-defined variables.
Resolution
Variables can reference other variables, which can reference other variables, and so on. During deployment, the Octopus Server will select the variables that are "in-scope" (based on the environment being deployed to, etc.) and push them to the Tentacle. The Tentacle will then set some additional special variables (such as OctopusOriginalPackageDirectoryPath
), and then it will resolve the value of all variables by applying any substitutions. During this process, it will check for cyclic dependencies and throw an exception if a cycle is detected.
Customizing how substitutions work
If a variable references another variable that isn't defined, the default behavior is to throw. You can customize this by setting the special variable OctopusIgnoreMissingVariableTokens
to true
to simply ignore the expression.
If you want to opt out of this feature entirely, set OctopusNoVariableTokenReplacement
to true
.
By default, Octopus expects variables to be in the form of #{Name}
. If that syntax doesn't work for you, you can customize it by setting a custom regex in the variable OctopusVariableTokenRegex
. The default regex used is \#\{(?<variable>.+?)\}
.
If you need to check whether your variables are being substituted correctly, set the two special variables PrintVariables
and PrintEvaluatedVariables
to true
to print the values before/after resolving.
Hopefully this feature will make defining variables much easier.