SSH Deploy hangs on variables.json

I am trying to deploy to an SSH endpoint and the process is hanging on the step that says “Using variables from: ****/variables.json”. I do not see any logs any errors to give a direction to troubleshoot. Anyone else seen this and have a solution?

Hi David,

Thanks for getting in touch. Could you provide a bit more information about your environment? What version of Octopus are you running, what kind of SSH endpoint (is it linux, what flavor, etc)?

Have you ever been able to deploy to that endpoint? Do you have similar endpoints that are working/failing?

Thanks,
Shane

We are running Octopus 3.0.23.0 and deploying to a Centos 7 endpoint. We are setting up octo for the first time and have never had this working.

To add more color to the issue, It looks like the deployment is downloading the .nupkg onto the server, unpacking the files into the /home/{user}/.octopus/OctopusServer/Files/{nupkg name} directory and then hanging. The deployment will sit there indefinitely with the spinner for the icon in a deploying status until I cancel it. Also, I added 3 .sh scripts to test the Pre/Deploy/Post feature. These just do an echo with a “hello” message and I am not seeing any evidence that these scripts are running.

Here is the verbose logs if it helps:

Deploying package ‘.octopus/OctopusServer/Files/{{nupkg}}’ to machine 'ssh://{ipaddr}}/'
Requesting upload…
Establishing SSH connection…
SSH connection established
Beginning streaming transfer of calamari-deploy-package.sh to .octopus\OctopusServer\Work{{timestamp}}
Establishing SFTP connection…
SSFTP connection established
Stream transfer complete
Requesting upload…
Beginning streaming transfer of variables.json to .octopus\OctopusServer\Work{timestamp}}
Stream transfer complete
Deploying package: /home/{{user}}/.octopus/OctopusServer/Files/{{nupkg}}
Using variables from: /home/{{user}}/.octopus/OctopusServer/Work/{{timestamp}}/variables.json

Hi David,

Thanks for the logs and extra information. What version of mono do you have on that endpoint?
Are you able to deploy the package without any script steps?
Could you try deploying with only a script step that does an echo?

The thing that does all the work on your endpoint is called ‘Calamari’. It looks like Calamari is not being invoked on that endpoint. You should have Calamari.exe located in the Octopus path on that endpoint. You could try:

mono Calamari.exe

It should return a help page, but hopefully there will be an error/exception that will help us figure out what’s going on.

Cheers,
Shane

The mono command runs fine and I think I have mono installed properly since the box passes the health check. I started digging through the code on the server and tried this to manually run ./calamari-deploy-package.sh
which output the following:

##octopus[stdout-default]
Deploying package: /home/{{user}}/.octopus/OctopusServer/Files/{{nupkg}}

and never returned. I think there is something in the DeployPackageCommand that is not completing properly. I guess I will start digging through the Calamari source.

I have been digging through the code and it seems that the deployment is freezing on line 35 in the LightweightPackageExtractor.cs. Here is the line of code:

var packageRelationship =
package.GetRelationshipsByType(“http://schemas.microsoft.com/packaging/2010/07/manifest”)
.SingleOrDefault();

I think this is related to the following bug:

https://bugzilla.xamarin.com/show_bug.cgi?id=31347

Hi David,

Thanks for the extra information and going above and beyond to figure it out.

Are you able to deploy a simple package with one file in it?

If you can do that, an option would be to zip your files before you package them and unzip in your pre-deploy script. It’s a hacky workaround but unfortunately NuGet support in mono is not very good at the moment.

Cheers,
Shane