Windows systemprofile Каталог, отображаемый по-разному в зависимости от пользователя - PullRequest
1 голос
/ 12 марта 2020

Контекст:

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

Проблема:

Я столкнулся с проблемой, когда я могу запустить скрипт сборки, когда RDP Вы являетесь администратором, но не можете запустить тот же сценарий через Jenkins. После некоторых копаний я обнаружил, что Дженкинс не находит каталог с необходимыми ссылками на сборку (C:\Windows\System32\config\systemprofile\.nuget\packages). Проведя небольшое расследование, я обнаружил, что каталог 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\, чтобы Дженкинс увидел их для завершения сборки ( ссылки помещаются туда командой nuget restore, запускаемой службой Jenkins, поэтому мне это кажется разумным). И, честно говоря, я не знаком с концепцией dir, дающей разные результаты. Я подозреваю Windows shenanigans, но мне любопытно, что на самом деле происходит - почему я получаю разные результаты в зависимости от пользователя, выполняющего команду?

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

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

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

1 Ответ

1 голос
/ 13 марта 2020

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

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

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

...