OctopusDeploy / Issues

| Public | Bug reports and known issues for Octopus Deploy and all related tools
https://octopus.com
161 stars 20 forks source link

Running a script from a package with a long folderpath returns an unrelated error. #7923

Open danefalvo opened 1 year ago

danefalvo commented 1 year ago

Team

Severity

Not Blocking

Version

2023.1 (build 686-hotfix 1630)

Latest Version

No response

What happened?

If you have a Nuget package with a powershell script at the location: content\App\helloworld.ps1 the script will run as expected however running a script from a location with many characters:

content\App\pXpVfbqAQksSSAPXwbTQVtKxOCgxrcdfMtWbqbBFBNpJnYrDKvKVQQNerWfKAcqUovXDmVYcVMCnCpJTHJeUyBpHDEfuYWVokNfH\kBOcwsKGTabUbQjdcACQKtPSaApnzBEWhzjkvKfjQzkxQuAQjysDAkwNnNwRskUFNvDcsWsWMaAefAJjohkyZWAPxtmbNFtwMBtS\AYhbjhguKAbVfVrYegeqQwfCMMhDmJodrJHDKMMrEKAfEVsSSKWKMzGZOaMCHkHubmOEaPNtVbgbfhUYyxfedQmrPfCWFPkgJHjV\helloworld.ps1

will result in an error finding 'Powershell'.

This issue has been ongoing with several

Reproduction

Steps 3 and 4 of https://danefalvo.octopus.app/app#/Spaces-1/projects/deploylongpackage/deployments/process/steps?actionId=d21f920e-9e56-4879-99c7-a815f4f4b177

Step 3 and 4 use the same package, same worker, etc. Step 4's powershell script is located in a long folder path.

Error and Stacktrace

Step 3 

23:18:10   Verbose  |       Extracting package to: C:\Octopus\Tentacle\Work\20221122231806-111088-36\staging
23:18:10   Verbose  |       Extracted 10 files
23:18:10   Info     |       Extracting package 'C:\Octopus\Tentacle\Files\ContosoLong@S4.1.2@F021AC3268F02A438AB385932213938A.nupkg' to 'C:\Octopus\Tentacle\Work\20221122231806-111088-36\staging'
23:18:10   Verbose  |       Performing variable substitution on 'C:\Octopus\Tentacle\Work\20221122231806-111088-36\staging\content\AppData\Test File.ps1'
<REDACTED FOR BREVITY>
23:18:33   Verbose  |       Successfully authenticated with the Azure CLI
23:18:33   Verbose  |       Invoking target script C:\Octopus\Tentacle\Work\20221122231806-111088-36\staging\content\AppData\Octopus.FunctionAppenderContext.ps1 with  parameters
23:18:33   Verbose  |       Invoking target script C:\Octopus\Tentacle\Work\20221122231806-111088-36\staging\content\AppData\Test File.ps1 with  parameters.
23:18:38   Info     |       hey

Step 4 

23:18:44   Verbose  |       Extracting package to: C:\Octopus\Tentacle\Work\20221122231840-111088-38\staging
23:18:44   Verbose  |       Extracted 10 files
23:18:44   Info     |       Extracting package 'C:\Octopus\Tentacle\Files\ContosoLong@S4.1.2@F021AC3268F02A438AB385932213938A.nupkg' to 'C:\Octopus\Tentacle\Work\20221122231840-111088-38\staging'
23:18:44   Verbose  |       Performing variable substitution on 'C:\Octopus\Tentacle\Work\20221122231840-111088-38\staging\content\AppData\pXpVfbqAQksSSAPXwbTQVtKxOCgxrcdfMtWbqbBFBNpJnYrDKvKVQQNerWfKAcqUovXDmVYcVMCnCpJTHJeUyBpHDEfuYWVokNfH\kBOcwsKGTabUbQjdcACQKtPSaApnzBEWhzjkvKfjQzkxQuAQjysDAkwNnNwRskUFNvDcsWsWMaAefAJjohkyZWAPxtmbNFtwMBtS\AYhbjhguKAbVfVrYegeqQwfCMMhDmJodrJHDKMMrEKAfEVsSSKWKMzGZOaMCHkHubmOEaPNtVbgbfhUYyxfedQmrPfCWFPkgJHjV\test.ps1'
23:18:44   Verbose  |       Executing 'C:\Octopus\Tentacle\Work\20221122231840-111088-38\staging\content\AppData\pXpVfbqAQksSSAPXwbTQVtKxOCgxrcdfMtWbqbBFBNpJnYrDKvKVQQNerWfKAcqUovXDmVYcVMCnCpJTHJeUyBpHDEfuYWVokNfH\kBOcwsKGTabUbQjdcACQKtPSaApnzBEWhzjkvKfjQzkxQuAQjysDAkwNnNwRskUFNvDcsWsWMaAefAJjohkyZWAPxtmbNFtwMBtS\AYhbjhguKAbVfVrYegeqQwfCMMhDmJodrJHDKMMrEKAfEVsSSKWKMzGZOaMCHkHubmOEaPNtVbgbfhUYyxfedQmrPfCWFPkgJHjV\test.ps1'
23:18:44   Verbose  |       Setting Proxy Environment Variables
23:18:44   Error    |       Unable to execute C:\Windows\system32\WindowsPowershell\v1.0\PowerShell.exe, please ensure that C:\Windows\system32\WindowsPowershell\v1.0\PowerShell.exe is installed and is in the PATH.
23:18:44   Error    |       System.Exception: Error when attempting to execute C:\Windows\system32\WindowsPowershell\v1.0\PowerShell.exe: An error occurred trying to start process 'C:\Windows\system32\WindowsPowershell\v1.0\PowerShell.exe' with working directory 'C:\Octopus\Tentacle\Work\20221122231840-111088-38\staging\content\AppData\pXpVfbqAQksSSAPXwbTQVtKxOCgxrcdfMtWbqbBFBNpJnYrDKvKVQQNerWfKAcqUovXDmVYcVMCnCpJTHJeUyBpHDEfuYWVokNfH\kBOcwsKGTabUbQjdcACQKtPSaApnzBEWhzjkvKfjQzkxQuAQjysDAkwNnNwRskUFNvDcsWsWMaAefAJjohkyZWAPxtmbNFtwMBtS\AYhbjhguKAbVfVrYegeqQwfCMMhDmJodrJHDKMMrEKAfEVsSSKWKMzGZOaMCHkHubmOEaPNtVbgbfhUYyxfedQmrPfCWFPkgJHjV'. The directory name is invalid.
23:18:44   Error    |       ---> System.ComponentModel.Win32Exception (267): An error occurred trying to start process 'C:\Windows\system32\WindowsPowershell\v1.0\PowerShell.exe' with working directory 'C:\Octopus\Tentacle\Work\20221122231840-111088-38\staging\content\AppData\pXpVfbqAQksSSAPXwbTQVtKxOCgxrcdfMtWbqbBFBNpJnYrDKvKVQQNerWfKAcqUovXDmVYcVMCnCpJTHJeUyBpHDEfuYWVokNfH\kBOcwsKGTabUbQjdcACQKtPSaApnzBEWhzjkvKfjQzkxQuAQjysDAkwNnNwRskUFNvDcsWsWMaAefAJjohkyZWAPxtmbNFtwMBtS\AYhbjhguKAbVfVrYegeqQwfCMMhDmJodrJHDKMMrEKAfEVsSSKWKMzGZOaMCHkHubmOEaPNtVbgbfhUYyxfedQmrPfCWFPkgJHjV'. The directory name is invalid.
23:18:44   Error    |       at System.Diagnostics.Process.StartWithCreateProcess(ProcessStartInfo startInfo)
23:18:44   Error    |       at System.Diagnostics.Process.Start()
23:18:44   Error    |       at Calamari.Common.Features.Processes.SilentProcessRunner.ExecuteCommand(String executable, String arguments, String workingDirectory, Dictionary`2 environmentVars, String userName, SecureString password, Action`1 output, Action`1 error) in C:\BuildAgent\work\e0cefbed4ad11812\source\Calamari.Common\Features\Processes\SilentProcessRunner.cs:line 158
23:18:44   Error    |       --- End of inner exception stack trace ---
23:18:44   Error    |       at Calamari.Common.Features.Processes.SilentProcessRunner.ExecuteCommand(String executable, String arguments, String workingDirectory, Dictionary`2 environmentVars, String userName, SecureString password, Action`1 output, Action`1 error) in C:\BuildAgent\work\e0cefbed4ad11812\source\Calamari.Common\Features\Processes\SilentProcessRunner.cs:line 173
23:18:44   Error    |       at Calamari.Common.Features.Processes.CommandLineRunner.Execute(CommandLineInvocation invocation) in C:\BuildAgent\work\e0cefbed4ad11812\source\Calamari.Common\Features\Processes\CommandLineRunner.cs:line 28
23:18:44   Error    |       The command that caused the exception was: "C:\Windows\system32\WindowsPowershell\v1.0\PowerShell.exe" -NoLogo -NonInteractive -ExecutionPolicy Unrestricted -Command "Set-PSDebug -Trace 0;Try {. {. 'C:\Octopus\Tentacle\Work\20221122231840-111088-38\staging\content\AppData\pXpVfbqAQksSSAPXwbTQVtKxOCgxrcdfMtWbqbBFBNpJnYrDKvKVQQNerWfKAcqUovXDmVYcVMCnCpJTHJeUyBpHDEfuYWVokNfH\kBOcwsKGTabUbQjdcACQKtPSaApnzBEWhzjkvKfjQzkxQuAQjysDAkwNnNwRskUFNvDcsWsWMaAefAJjohkyZWAPxtmbNFtwMBtS\AYhbjhguKAbVfVrYegeqQwfCMMhDmJodrJHDKMMrEKAfEVsSSKWKMzGZOaMCHkHubmOEaPNtVbgbfhUYyxfedQmrPfCWFPkgJHjV\Bootstrap.Octopus.AzureContext.ps1' -OctopusKey '50TmmlGZRH5swzEAGgagEw=='; if ((test-path variable:global:lastexitcode)) { exit $LastExitCode }};} catch { throw }"

More Information

This issue has been ongoing with various steps to fix this permanently.

To recap: This was one of the first issues - which is easily followable: https://github.com/OctopusDeploy/Issues/issues/4204

Although this rectified part of the issue - there was still an issue with extracting the package and it was chalked down to 'SharpCompress' not handling longfilepaths.

Additionally, all Dynamic Workers had 'LongFilePath compatibility' enabled.

This was rectified recently with a SharpCompress update. On trying the repro again, I have ended up with this error. So hopefully it's the last part of the fix, required to handle long paths correctly.

Workaround

Shorten the folder path.

auziel commented 1 year ago

I encounter similar issue. Assuming your Tentacle is running on Windows machine, there is a limit of 260 characters for file name. https://learn.microsoft.com/en-us/windows/win32/fileio/maximum-file-path-limitation?tabs=registry

This limitation can be disabled on Windows 10, Version 1607, and Later. You can find the details in the link above.

valurz commented 1 week ago

I encounter similar issue. Assuming your Tentacle is running on Windows machine, there is a limit of 260 characters for file name. https://learn.microsoft.com/en-us/windows/win32/fileio/maximum-file-path-limitation?tabs=registry

This limitation can be disabled on Windows 10, Version 1607, and Later. You can find the details in the link above.

According to the docs:

Understand that enabling this registry setting will only affect applications that have been modified to take advantage of the new feature.

Can the Octopus team confirm that the tentacle agent is indeed modified to take advantage of the longPathAware feature, and that the 260 char limit can be bypassed with this workaround when deploying?