Ведомое устройство Jenkins Windows: сбой аутентификации при работе в качестве службы

У меня есть подчиненный Jenkins, работающий в Windows 10 (1607). Если я запускаю подчиненное устройство напрямую как JNLP, это подчиненное устройство может клонироваться из репозитория git (аутентификация с использованием имени пользователя и пароля).

Если я запускаю то же подчиненное устройство в качестве службы, git clone завершается с ошибкой Authentication failed for ....

Служба создается в меню «Файл» подчиненного устройства и работает как «Учетная запись локальной системы».

Что происходит не так?

Вот вывод Дженинса:

00:00:00.003 Started by user <commit-user>
00:00:00.005 ln -s builds/lastSuccessfulBuild /var/jenkins_home/jobs/Xamarin/jobs/MyProject/jobs/CIBuild/lastSuccessful failed: 95 Not supported
00:00:00.005 ln -s builds/lastStableBuild /var/jenkins_home/jobs/Xamarin/jobs/MyProject/jobs/CIBuild/lastStable failed: 95 Not supported
00:00:00.005 Building remotely on Win10Xamarin (Win10 Xamarin Git NetCore) in workspace c:\Jenkins\workspace\Xamarin\iRec Common\iRecy Common CI
00:00:00.025 Cloning the remote Git repository
00:00:00.031 Cloning repository http://git-server/MyGroup/test-project
00:00:00.032  > C:\Program Files\Git\cmd\git.exe init c:\Jenkins\workspace\Xamarin\iRec Common\iRecy Common CI # timeout=10
00:00:00.252 Fetching upstream changes from http://git-server/MyGroup/test-project
00:00:00.255  > C:\Program Files\Git\cmd\git.exe --version # timeout=10
00:00:00.351  > C:\Program Files\Git\cmd\git.exe -c core.askpass=true fetch --tags --progress http://git-server/MyGroup/test-project +refs/heads/*:refs/remotes/origin/*
00:00:01.148 ERROR: Error cloning remote repo 'origin'
00:00:01.149 hudson.plugins.git.GitException: Command "C:\Program Files\Git\cmd\git.exe -c core.askpass=true fetch --tags --progress http://git-server/MyGroup/test-project +refs/heads/*:refs/remotes/origin/*" returned status code 128:
00:00:01.149 stdout: 
00:00:01.149 stderr: fatal: Authentication failed for 'http://git-server/MyGroup/test-project/'
00:00:01.149 
00:00:01.149    at org.jenkinsci.plugins.gitclient.CliGitAPIImpl.launchCommandIn(CliGitAPIImpl.java:1740)
00:00:01.149    at org.jenkinsci.plugins.gitclient.CliGitAPIImpl.launchCommandWithCredentials(CliGitAPIImpl.java:1476)
00:00:01.149    at org.jenkinsci.plugins.gitclient.CliGitAPIImpl.access$300(CliGitAPIImpl.java:63)
00:00:01.149    at org.jenkinsci.plugins.gitclient.CliGitAPIImpl$1.execute(CliGitAPIImpl.java:314)
00:00:01.149    at org.jenkinsci.plugins.gitclient.CliGitAPIImpl$2.execute(CliGitAPIImpl.java:506)
00:00:01.149    at org.jenkinsci.plugins.gitclient.RemoteGitImpl$CommandInvocationHandler$1.call(RemoteGitImpl.java:152)
00:00:01.149    at org.jenkinsci.plugins.gitclient.RemoteGitImpl$CommandInvocationHandler$1.call(RemoteGitImpl.java:145)
00:00:01.149    at hudson.remoting.UserRequest.perform(UserRequest.java:153)
00:00:01.149    at hudson.remoting.UserRequest.perform(UserRequest.java:50)
00:00:01.149    at hudson.remoting.Request$2.run(Request.java:332)
00:00:01.149    at hudson.remoting.InterceptingExecutorService$1.call(InterceptingExecutorService.java:68)
00:00:01.149    at java.util.concurrent.FutureTask.run(Unknown Source)
00:00:01.150    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
00:00:01.150    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
00:00:01.150    at hudson.remoting.Engine$1$1.run(Engine.java:85)
00:00:01.150    at java.lang.Thread.run(Unknown Source)
00:00:01.150    at ......remote call to Win10Xamarin(Native Method)
00:00:01.150    at hudson.remoting.Channel.attachCallSiteStackTrace(Channel.java:1416)
00:00:01.150    at hudson.remoting.UserResponse.retrieve(UserRequest.java:253)
00:00:01.150    at hudson.remoting.Channel.call(Channel.java:781)
00:00:01.150    at org.jenkinsci.plugins.gitclient.RemoteGitImpl$CommandInvocationHandler.execute(RemoteGitImpl.java:145)
00:00:01.150    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
00:00:01.150    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
00:00:01.150    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
00:00:01.150    at java.lang.reflect.Method.invoke(Method.java:498)
00:00:01.153    at org.jenkinsci.plugins.gitclient.RemoteGitImpl$CommandInvocationHandler.invoke(RemoteGitImpl.java:131)
00:00:01.153    at com.sun.proxy.$Proxy65.execute(Unknown Source)
00:00:01.153    at hudson.plugins.git.GitSCM.retrieveChanges(GitSCM.java:1046)
00:00:01.153    at hudson.plugins.git.GitSCM.checkout(GitSCM.java:1086)
00:00:01.153    at hudson.scm.SCM.checkout(SCM.java:495)
00:00:01.153    at hudson.model.AbstractProject.checkout(AbstractProject.java:1269)
00:00:01.153    at hudson.model.AbstractBuild$AbstractBuildExecution.defaultCheckout(AbstractBuild.java:604)
00:00:01.153    at jenkins.scm.SCMCheckoutStrategy.checkout(SCMCheckoutStrategy.java:86)
00:00:01.153    at hudson.model.AbstractBuild$AbstractBuildExecution.run(AbstractBuild.java:529)
00:00:01.153    at hudson.model.Run.execute(Run.java:1741)
00:00:01.153    at hudson.model.FreeStyleBuild.run(FreeStyleBuild.java:43)
00:00:01.153    at hudson.model.ResourceController.execute(ResourceController.java:98)
00:00:01.153    at hudson.model.Executor.run(Executor.java:410)
00:00:01.153 ERROR: null
00:00:01.153 Skipped archiving because build is not successful
00:00:01.154 Recording NUnit tests results
00:00:01.160 FATAL: No NUnit test report files were found. Configuration error?
00:00:01.165 Build step 'Publish NUnit test result report' marked build as failure
00:00:01.180 Finished: FAILURE

person WebDucer    schedule 08.09.2016    source источник


Ответы (1)


Проверьте, как запускается ваша служба: если она использует учетную запись локальной системы, она не будет иметь такой же %USERPROFILE% и не принесет пользы. из той же конфигурации git (обычно хранится в %USERPROFILE%\.gitconfig)

Я обычно создаю свой сервис, используя учетную запись пользователя:

sc create JenkinsSlave binPath= d:\Jenkins_Slave\jenkins-slave.exe DisplayName= "Jenkins Slave xxx for https://<url>/jenkins" start= auto obj= DOMAIN\aUSER password= <password>

Обратите внимание на пробел после obj= и password=.

Обратите внимание, что он не работал с учетной записью локальной системы из-за проблемы с учетными данными Windows, как показано в JENKINS-34082.

Я удалил «git» на ведомой машине Windows и установил без использования «диспетчера учетных данных Windows».

OP WeDucer комментарии:

Работает: установленный диспетчер учетных данных предотвратил клонирование учетной записи локальной системы.

person VonC    schedule 08.09.2016
comment
Это работает, если я перехожу с учетной записи локальной системы на конкретного пользователя. Но я не понимаю почему. У конкретного пользователя также нет .gitconfig, и в обоих случаях учетные данные передаются от Jenkins. - person WebDucer; 08.09.2016
comment
@WebDucer URL-адрес в https или ssh? Я вижу: https. Дженкинс должен использовать учетные данные, связанные с пользователем, выполняющим задание. В вашем Jenkins должны храниться учетные данные для этого пользователя, но не будет учетных данных для учетной записи локальной системы. - person VonC; 08.09.2016
comment
Я использую http. Пользователь, с которым работает служба, отличается от пользователя, хранящегося в хранилище учетных данных. (например, пользователь службы — это агент сборки, а пользователь git — gitAgent). - person WebDucer; 08.09.2016
comment
@WebDucer Вы имеете в виду, что gitAgent нет в хранилище учетных данных Jenkins? Затем Git (на подчиненном устройстве) должен использовать помощник по учетным данным (сделайте, как gitAgent, git config -l, чтобы увидеть, так ли это) - person VonC; 08.09.2016
comment
Нет. Я имею в виду, что подчиненная служба работает с некоторым пользователем, а у Дженкинса (сервера) есть gitAgent в хранилище учетных данных. Локальный помощник по учетным данным git на подчиненной машине не установлен. - person WebDucer; 08.09.2016
comment
@WebDucer Может быть, git использует диспетчер учетных данных Windows? (issues.jenkins-ci.org/browse/) - person VonC; 08.09.2016
comment
Спасибо за ссылку. Я попробую решение. Звук как у меня. - person WebDucer; 08.09.2016
comment
Работает. Установленный диспетчер учетных данных предотвратил клонирование учетной записи локальной системы. - person WebDucer; 08.09.2016
comment
@WebDucer Молодец. Я включил ваш комментарий и проблему Дженкинса в ответ для большей наглядности. - person VonC; 08.09.2016