Каталог системных профилей Windows, отображаемый по-разному в зависимости от пользователя

Контекст:

Я пытаюсь настроить сервер сборки Jenkins (2.223) (в данном случае сборка с использованием msbuild) на Windows Server 2012 R2. Jenkins настроен как служба и работает как Local System.

Проблема:

Я столкнулся с проблемой, при которой я могу запустить сценарий сборки, когда RDP зашел в качестве администратора, но не могу запустить тот же сценарий через Jenkins. Покопавшись, я обнаружил, что каталог с необходимыми ссылками на сборку (C:\Windows\System32\config\systemprofile\.nuget\packages) не находит Jenkins. Проведя небольшое исследование, я обнаружил, что каталог C:\Windows\System32\config\systemprofile кажется несовместимым.

Я могу запустить команду dir C:\Windows\System32\config\systemprofile через свою учетную запись администратора и получить:

     Directory: C:\Windows\System32\config\systemprofile


Mode                LastWriteTime     Length Name
----                -------------     ------ ----
d----         3/11/2020   9:43 AM            .dotnet
d----         3/11/2020   2:27 PM            .nuget
d----          3/9/2020   1:49 PM            .ssh
d----         8/22/2013   6:36 AM            AppData
-a---          3/2/2020   3:41 PM     262144 ntuser.dat

Я могу запустить ту же команду (dir C:\Windows\System32\config\systemprofile) через Jenkins и получить:

    Directory: C:\Windows\System32\config\systemprofile


Mode                LastWriteTime     Length Name                              
----                -------------     ------ ----                              
d----          3/9/2020   1:49 PM            .config                           
d----          3/6/2020   2:50 PM            .groovy                           
d----         8/22/2013   8:39 AM            AppData

Мне нужно, чтобы ссылки в ...\systemprofile\.nuget\packages\ были видны Jenkins для завершения сборки (ссылки помещаются туда командой nuget restore, выполняемой службой Jenkins, поэтому мне это кажется разумным). И, честно говоря, я не знаком с концепцией dir, дающей разные результаты. Я подозреваю махинации с Windows, но мне любопытно, что на самом деле происходит - почему я получаю разные результаты в зависимости от того, какой пользователь запускает команду?

Дополнительная информация:

  • Я смог заставить это работать на моем локальном рабочем столе Windows 10 без каких-либо проблем. Я по-прежнему получаю разные результаты при выполнении команды dir от имени моего пользователя и службы Jenkins, но у них обоих есть доступный каталог systemprofile\.nuget\packages.

  • На сервере 2012 года $ env: UserName моего пользователя Admin и $ env: ComputerName равны Administrator и WIN-64VG7CF1QK3 соответственно. Локальная система Jenkin $ env: UserName и $ env: ComputerName оба WIN-64VG7CF1QK3.


person axbin    schedule 12.03.2020    source источник
comment
Симптом предполагает, что один процесс является 64-битным, а другой - 32-битным. Такие процессы видят отдельные каталоги как C:\Windows\System32, хотя технически вы можете получить доступ к соответствующему другому каталогу как C:\Windows\SysWOW64 (32-битный каталог из 64-битного процесса) и C:\Windows\SysNative (64-битный каталог из 32-битного процесса).   -  person mklement0    schedule 12.03.2020
comment
Я рекомендую заменить 32-разрядную среду выполнения Java версии Jenkins для Windows по умолчанию на 64-разрядную, чтобы избежать этих проблем. См. этот ответ.   -  person zett42    schedule 12.03.2020
comment
@ zett42 - спасибо вам двоим! Очень полезная информация. Я бы поддержал ваши комментарии, но у меня есть такая привилегия.   -  person axbin    schedule 13.03.2020


Ответы (1)


Два комментария к моему вопросу (mklement0 и zett42) дали хороший ответ, и, используя их, я смог лучше понять и решить свою проблему.

Оказывается, Дженкинс по умолчанию устанавливает 32-разрядную JRE, которая в конечном итоге молча смотрит на SysWOW64 вместо System32 (но только во время выполнения команды msbuild, а не команды nuget restore?).

В любом случае, решение состоит в том, чтобы настроить Jenkins для использования 64-битной JRE, как предлагает zett42. См. этот ответ < / а>.

person axbin    schedule 13.03.2020