VSTS Build Task Development - Now that is a misleading error message !
I have been working on a new Node.JS based VSTS Build Extension, so loads of Node learning going on as it is a language I have not done much with in the past. I expect to get caught out in places, but I have just wasted a good few hours on this one!
I am working in VS Code using Typescript to generate my Node based task. Whilst hacking around I have been just running the script in the VS Code debugger, getting the logic right before packaging it up and testing within a VSTS Build extension.
Everything was working until I did a big refactor, basically moving functions to a module. I suddenly started getting the following error trying to make a REST call
Exception occured
Error: Error: Hostname/IP doesn't match certificate's altnames: "Host: richardfennell.vsrm.visualstudio.com. is not in the cert's altnames: DNS:*.vsrm.visualstudio.com, DNS:vsrm.visualstudio.com, DNS:*.app.vsrm.visualstudio.com, DNS:app.vsrm.visualstudio.com"
I looked for ages to see how I had broken the REST call, all to no avail. In the end I rolled back and had to step through the refactor in small steps (smaller steps I should probably have taken anyway)
In the end I found the issue. The problem was in my early testing I had hard coded my input parameters e.g.
var templateFile = "template.md”;
Whilst stating to wire up the code as a VSTS Task I had started to swap in calls to the VSTS task Library
import tl = require('vsts-task-lib/task');
Correction – all the tl.xxx calls seem to cause a problem, avoid them for local testing
Now for items such as logging this works fine whether the logic is running in VS Code’s debugger or on a VSTS Build Agent, so I could use the following line in VS Code or on a VSTS Build Agent.
tl.Debug(“My Message”);
Where it does not work is for Task inputs. I had assume that
var templateFile = tl.getInput("templatefile");
Would return null/undefined when running in the VS Code debugger, but no, it causes that strange exception.
Once I removed the all the getInput calls my error went away.
Hope this save someone else some time