Я использую Terraform с Google Cloud для создания хостов Windows Server Core 2019 для использования с Jenkins. Я хочу установить некоторое программное обеспечение, например Git, OpenJDK и другие, используя Совок, и запустите Агент Дженкинс JAR как системная служба, работающая под локальным jenkins
пользователь.
Я настраиваю их с помощью сценариев PowerShell, предоставленных через metadata
ключи как sysprep-specialize-script-ps1
и windows-startup-script-ps1
:
https://cloud.google.com/compute/docs/startupscript#providing_a_startup_script_for_windows_instances
Моя проблема в том, что я создаю локальных пользователей с помощью Powershell следующим образом:
New-LocalUser -Name $Username `
-Description $Description `
-Password $Password `
-PasswordNeverExpires `
-AccountNeverExpires
И я создаю службу агента Jenkins с помощью Windows Service Wrapper: https://github.com/winsw/winsw
Но когда я пытаюсь запустить его, не входя сначала в учетную запись пользователя Jenkins, я возвращаюсь:
2020-08-26 14:49:57,760 INFO - Starting the service with id 'JenkinsAgent'
2020-08-26 14:49:57,823 FATAL - WMI Operation failure: ServiceLogonFailure
WMI.WmiException: ServiceLogonFailure
at WMI.WmiRoot.BaseHandler.CheckError(ManagementBaseObject result)
at WMI.WmiRoot.InstanceHandler.Invoke(Object proxy, MethodInfo method, Object[] arguments)
at WinSW.Program.<Run>g__Start|2_2(<>c__DisplayClass2_0& )
at WinSW.Program.Run(String[] argsArray, IWinSWConfiguration descriptor)
at WinSW.Program.Main(String[] args)
Эта проблема не возникает, если я сначала войду в jenkins
пользователь, использующий RDP, который создает профиль пользователя при первом входе в систему. Я предполагаю, что это то, что позволяет службе запускаться правильно.
Я пытаюсь понять, как создать пользователя и его профиль без необходимости вручную входить в систему для этого пользователя, чтобы служба могла запускаться правильно. Скрипты PS для установки и запуска выполняются как SYSTEM
пользователь, что может быть причиной использования чего-то вроде Start-Process
, Invoke-Command
, или Start-Job
с участием -Credential
флаг для запуска команды как jenkins
пользователю не удается создать свой профиль.
У меня были проблемы с попыткой запустить команду или просто exit
так как jenkins
пользователю нравится так:
[localhost] The background process reported an error with the following message: .
+ CategoryInfo : OpenError: (localhost:String) [], PSRemotingTransportException
+ FullyQualifiedErrorId : 2100,PSSessionStateBroken
Что я делаю не так?
Есть ли лучший способ достичь того, что я пытаюсь сделать?
Как мне создать локального пользователя с участием свой профиль, чтобы запускалась созданная мной служба?