Deploying to linux without mono / custom tentacle

In regard to discussion 7839-deploying-to-linuxaix-without-mono-custom-tentacle.

Was there any output from the private email exchange?

We would be very interested in a simple SSH endpoint without any requirements other than SSH.

A custom deploy script to upload package and execute command through ssh would be perfect for us.

Sysadmins are not eager to install a 500Mb dependency (with maintenance cost) on a production server since it is only required to deploy the package.

Is it in the roadmap to have “custom” tentacles?

Hi Charles,

In 3.9 we quietly released a feature we call Naked Scripting ( which allows you to run scripts directly on SSH endpoints without needing Mono. Combined with the Transfer a Package step this should provide what you need.

The missing piece was that health checks on those endpoints would still fail, since the health check checks for things like Mono. In 3.10.1 we shipped an option to skip this check on machines where you know you are only going to use them with naked scripts.

We have an announcement blog post and some more documentation around this coming out in the next few days.

We don’t have any other plans around custom tentacles, although do plan to expand the features available on SSH endpoints that don’t have Mono, and to improve the user experience around using them.

I hope that helps.

Hi Mark,

I’m a coworker with Charles Villemure.

Thanks for your quick response, it was really useful and it unblocked us.

We hit another obstacle while implementing while going without mono. We lost the Octopus Variable replacement that ship with the “Deploy Package” step and the “Configuration Variables” feature. Is there a known workaround we could use while using Transfer Package and Run Script steps?


Hi Maxime,

Unfortunately that’s the price you pay for not having Mono installed at the moment. We do do variable substitution on your script on the server before sending it to the target, so you can substitute the values you need into your script and do updates yourself in your script, or something I have done is had a script where most of the body was just a json blob that got written to a config.json file when it ran (again after Octopus had substituted in the relevant values server-side). Then my app knew to read config from that file.


Hi Mark,

thanks for your response.  That is what we began to do today.  We manually set the variables in the scripts so it can be replaced on the target side using bash scripting.

One nice feature that you could add (that would really simplify our task) is to create a global variable that contains all the variables and their value as a JSON (or other form of key/value pair) that we could inject in our script and play with on the target side. That would eliminate the burden of keeping the variable list in sync with the script and reduce error.

We’ve seen an article that was doing a for loop of all variables but it stated that Octopus only supports Bash 3 and that Dictionnary values aren’t available until Bash 4.

In summary not have the auto replacement of the deploy script wouldn’t be so bad if we could easily have access to all variables and create a script that is future proof!

Let us know if this could fit in your improvements for naked scripting!