-
Type:
Bug
-
Resolution: Unresolved
-
Priority:
Minor
-
Component/s: durable-task-plugin
-
Environment:Jenkins 2.252
Durable Task Plugin 1.3.4
Windows Server 2019
PowerShell 5.1.17763.1007
Adopt OpenJDK 11
The PowerShell command Set-PSDebug -Strict makes PowerShell throw an error if an undefined variable is referenced.
The $LASTEXITCODE automatic variable returns the exit code of the last external executable that was run in the PowerShell session. If no external executables have been run, then $LASTEXITCODE does not exist.
The PowerShell Pipeline step apparently wraps the content of the specified script in some additional code, which checks the $LASTEXITCODE variable.
If no external executables have been run in the script, and Set-PSDebug -Strict is enabled, then the PowerShell Pipeline step throws an error like this:
powershell.exe : The variable '$LASTEXITCODE' cannot be retrieved because it has not been set.
At D:\Jenkins.jenkins\workspace\test-pipeline@tmp\durable-0edceab5\powershellWrapper.ps1:3 char:1
+ & powershell -NoProfile -NonInteractive -ExecutionPolicy Bypass -Comm ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (The variable '$...s not been set.:String) [], RemoteException
+ FullyQualifiedErrorId : NativeCommandError
At D:\Jenkins.jenkins\workspace\test-pipeline@tmp\durable-0edceab5\powershellScript.ps1:9 char:6
+ exit $LASTEXITCODE;
+ ~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (LASTEXITCODE:String) [], RuntimeException
+ FullyQualifiedErrorId : VariableIsUndefined
The variable '$LASTEXITCODE' cannot be retrieved because it has not been set.
At line:1 char:96
+ ... eline@tmp\durable-0edceab5\powershellScript.ps1'; exit $LASTEXITCODE;
+ ~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (LASTEXITCODE:String) [], RuntimeException
+ FullyQualifiedErrorId : VariableIsUndefined
Here is a demonstration script:
node ('master') { powershell(label: "test", script: ''' Set-PSDebug -Strict "Either of the commented out lines below will make the error below go away." | Out-Host # cmd.exe /c :: Running cmd.exe will make PowerShell define the LASTEXITCODE variable # Set-PSDebug -Strict:$false "Does the LASTEXITCODE variable exist?" | Out-Host Test-Path Variable:LASTEXITCODE ''') }