July 13, 2012

Testing PowerShell scripts with Tentacle

Octopus allows you to embed PowerShell scripts in your packages that are executed automatically during a deployment. This is a great hook that allows you to:

  • Run custom executables
  • Configure Windows Services
  • Configure IIS
  • Execute database deployment scripts
  • Configure security settings of files and folders
  • Tons of other things

Variables defined in the Octopus portal will be automatically passed to your scripts, and since variables can be scoped to an environment or machine, this provides a nice way to parameterize your scripts for different environments.

The Tentacle agent hosts PowerShell in-process, which means there are sometimes differences between how a script will run in normal PowerShell, versus how they run in Octopus. Testing scripts was always difficult - you'd have to package them up, create a release, and deploy the release just to see if a small change to the script worked.

If you are having trouble getting a PowerShell script to run, you can now test the scripts directly using the Tentacle executable, which means they run in exactly the same context as they do in a deployment. You can do this from the command line using:

Tentacle.exe run-script -v Message="Hello world!" -v Repeat=5 -f MyScript.ps1

The -v argument allows you to pass variables (as if they were variables being used in the deployment). The -f argument specifies the script file to run. You can also use -w to set a custom working directory.

Assuming my script looked like this:

foreach ($i in (1..$Repeat))
    write-host $Message

The output would look like:

Output from Tentacle

This feature is available from build Hopefully it makes testing PowerShell scripts in a Tentacle context easier!

Learn more

FAQ Walkthrough

Welcome! We use cookies and data about how you use our website allow us to improve the website and your experience, and resolve technical errors. Our website uses cookies and shares some of your data with third party analytics companies for these purposes.

If you decline, we will respect your privacy. A single cookie will be used in your browser to remember your preference.