The -AcceptEula Gotcha

Maybe we’re an edge case, but our ‘legacy’ Deployments through OctopusDeploy are based on an older batch process, which uses Junction.exe from Sysinternals to refer IIS from a ‘current’ folder to an “application.version.x.x.xx” folder. It’s a pretty common, if a little old-school technique. The original was a batch file, which was replaced by some powershell, which was enhanced a lot end then ended up ported into Octopus. It now deploys the new code, removes the box from the load balancer, switches to the new code using Junction.exe, resets IIS, warms up the new code and finally adds the box back to the load balancer. It’s pretty seamless, if a bit convoluted.

Well recently we had a little change pushed through which rolled back a few system settings on the web servers. And when it came to deploy with Octopus, we saw multiple catastrophic failures.

Luckily, none of these failures resulted in a public outage, because the code has graceful failure designed-in, but still, it was a bit of work to put right.

First of all, the identity running the Tentacle had been changed from a custom service account to the default LocalSystem, and that service account’s group memberships had been dropped, resulting in some relatively easy-to-diagnose failures. I reset those across the server farm with some powershell remoting, which got things running again. So far so good.

And then we reached a point where Octopus ran fine up to the Junction.exe call, and then just got stuck waiting… and waiting.. and… well, you get the picture

No output, no diagnostics. No error messages. Nothing. Just an informational message saying “switching junction points” and then basically a low-CPU hang. Using Process Explorer and Process Monitor showed the junction.exe process sitting there, doing very little indeed.

Weird.

Anyway, to get right to the point, it turns out that when the servers were rolled back, they were rolled back to a point before the Octopus Service Account had ever used the Junction tool.

So Junction’s first-run “please accept the EULA” behaviour had kicked in, even though we were running unattended.

And it was never getting past that

The solution? Change this

junction.exe -d e:\websites\www.site.com\current
junction.exe e:\websites\www.site.com\current e:\wwwroot\www.site.com\$NewVersion

To this

junction.exe -d e:\websites\www.site.com\current -accepteula
junction.exe e:\websites\www.site.com\current e:\wwwroot\www.site.com\$NewVersion

Problem solved.

Leave a Reply

Your email address will not be published. Required fields are marked *