Как решить код состояния Git fetch 128 с помощью "Ваш аккаунт заблокирован"
У меня есть мастер Jenkins с двумя агентами сборки, один из которых - Windows, а другой - Mac. Следующий Jenkinsfile пытается извлечь git-репозиторий с сервера Github Enterprise.
properties([
parameters([
string(
name: 'GIT_URL',
defaultValue: params.GIT_URL?:'https://github.com/',
description: 'URL to clone the Git repo.'
),
string(
name: params.GIT_SELECTOR?:'GIT_SELECTOR',
defaultValue: params.GIT_SELECTOR?:'refs/heads/master',
description: 'Branch, tag or commit.'
),
[
$class: 'CredentialsParameterDefinition',
name: 'GIT_CREDENTIALS',
credentialType: 'com.cloudbees.plugins.credentials.impl.UsernamePasswordCredentialsImpl',
defaultValue: params.GIT_CREDENTIALS?:'',
description: 'User and password to clone the Git repository',
required: true
]
])
])
node('build'){
stage('Clean'){
cleanDir()
sh('''
pwd
ls -la
''')
}
stage('Identify host'){
def host = command("hostname")
def hostOS = isUnix()?'mac':'win'
currentBuild.description = " ${hostOS}-host"
}
stage('Check out'){
checkout([
$class: 'GitSCM',
branches: [
[name: params.GIT_SELECTOR]
],
extensions: [
[
$class: 'RelativeTargetDirectory',
relativeTargetDir: 'app'
]
],
userRemoteConfigs: [
[
credentialsId: params.GIT_CREDENTIALS,
url: GIT_URL
]
]
])
}
}
Это удается, когда сборка идет на Windows, но недавно на Mac произошел сбой без видимой причины. Я получаю ошибку:
Cloning the remote Git repository
Cloning repository https://github.acme.com/Acme/foo-project.git
> git init /Jenkins/workspace/.tests/test-checkout/app # timeout=10
Fetching upstream changes from https://github.acme.com/Acme/foo-project.git
> git --version # timeout=10
using GIT_ASKPASS to set credentials my-git-credentials
> git fetch --tags --progress https://github.acme.com/Acme/foo-project.git +refs/heads/*:refs/remotes/origin/*
ERROR: Error cloning remote repo 'origin'
hudson.plugins.git.GitException: Command "git fetch --tags --progress https://github.acme.com/Acme/foo-project.git +refs/heads/*:refs/remotes/origin/*" returned status code 128:
stdout:
stderr: remote: Your account is suspended. Please check with your installation administrator.
fatal: unable to access 'https://github.acme.com/Acme/foo-project.git/': The requested URL returned error: 403
at org.jenkinsci.plugins.gitclient.CliGitAPIImpl.launchCommandIn(CliGitAPIImpl.java:1877)
at org.jenkinsci.plugins.gitclient.CliGitAPIImpl.launchCommandWithCredentials(CliGitAPIImpl.java:1596)
at org.jenkinsci.plugins.gitclient.CliGitAPIImpl.access$300(CliGitAPIImpl.java:71)
at org.jenkinsci.plugins.gitclient.CliGitAPIImpl$1.execute(CliGitAPIImpl.java:348)
at org.jenkinsci.plugins.gitclient.CliGitAPIImpl$2.execute(CliGitAPIImpl.java:545)
at org.jenkinsci.plugins.gitclient.RemoteGitImpl$CommandInvocationHandler$1.call(RemoteGitImpl.java:153)
at org.jenkinsci.plugins.gitclient.RemoteGitImpl$CommandInvocationHandler$1.call(RemoteGitImpl.java:146)
at hudson.remoting.UserRequest.perform(UserRequest.java:153)
at hudson.remoting.UserRequest.perform(UserRequest.java:50)
at hudson.remoting.Request$2.run(Request.java:332)
at hudson.remoting.InterceptingExecutorService$1.call(InterceptingExecutorService.java:68)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at hudson.remoting.Engine$1$1.run(Engine.java:85)
at java.lang.Thread.run(Thread.java:745)
at ......remote call to Channel to /208.83.1.25(Native Method)
at hudson.remoting.Channel.attachCallSiteStackTrace(Channel.java:1545)
at hudson.remoting.UserResponse.retrieve(UserRequest.java:253)
at hudson.remoting.Channel.call(Channel.java:830)
at org.jenkinsci.plugins.gitclient.RemoteGitImpl$CommandInvocationHandler.execute(RemoteGitImpl.java:146)
at sun.reflect.GeneratedMethodAccessor1126.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.jenkinsci.plugins.gitclient.RemoteGitImpl$CommandInvocationHandler.invoke(RemoteGitImpl.java:132)
at com.sun.proxy.$Proxy75.execute(Unknown Source)
at hudson.plugins.git.GitSCM.retrieveChanges(GitSCM.java:1067)
at hudson.plugins.git.GitSCM.checkout(GitSCM.java:1107)
at org.jenkinsci.plugins.workflow.steps.scm.SCMStep.checkout(SCMStep.java:109)
at org.jenkinsci.plugins.workflow.steps.scm.SCMStep$StepExecutionImpl.run(SCMStep.java:83)
at org.jenkinsci.plugins.workflow.steps.scm.SCMStep$StepExecutionImpl.run(SCMStep.java:73)
at org.jenkinsci.plugins.workflow.steps.AbstractSynchronousNonBlockingStepExecution$1$1.call(AbstractSynchronousNonBlockingStepExecution.java:47)
at hudson.security.ACL.impersonate(ACL.java:260)
at org.jenkinsci.plugins.workflow.steps.AbstractSynchronousNonBlockingStepExecution$1.run(AbstractSynchronousNonBlockingStepExecution.java:44)
at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)
at java.util.concurrent.FutureTask.run(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
Обратите внимание на немного о GitException
и git fetch
ошибка с сообщением status code 128
а также The requested URL returned error: 403
, Конечно, так как он работает на Windows, я знаю, что это определенно не учетные данные. Что может быть причиной этого? На что мне смотреть?
Редактировать: я пытался поразить Github API от обоих ведомых, используя curl -X GET https://github.acme.com/api/v3/user -H 'Authorization: token *****...****'
и в то время как на коробке Windows все работало нормально, на Mac я получил:
{
"message": "Must authenticate to access this API.",
"documentation_url": "https://developer.github.com/enterprise/2.11/v3"
}
2 ответа
После долгих поисков и устранения проблем единственное, что мы обнаружили, что решает эту проблему, это полная перезагрузка агента сборки Mac. После отскока ящика все отправленные ему задания снова могут получить доступ к Git-серверу.
Я не смог найти причину, по которой это произошло, так что это лучший ответ на данный момент. Если у кого-то есть какие-либо предположения о том, что может быть причиной такого поведения, я бы склонялся отметить это как ответ вместо этого.
Есть несколько вещей, которые вы можете попробовать:
В вашем корпоративном экземпляре GitHub будут журналы с подробным описанием неудачной аутентификации. Спросите своего администратора об этом, поскольку у них может быть ответ немедленно.
Если у вас есть разрешения для этого с вашим пользователем, попробуйте подключиться к аутентифицированной конечной точке REST API GitHub из окна проблемы, используя базовую аутентификацию (например,
https://github.acme.com/api/v3/user
) - если это не помогает с 403, вы должны получить некоторую информацию о причине этого в теле ответа и заголовках.