修复常见问题
本页面主要面向新的GoCD用户,以帮助解决故障问题。
GoCD 代理未与 GoCD 服务器注册
此问题表现为“代理”页面上没有显示代理,或者显示状态为“缺失”。如果发生这种情况,请通过查看代理日志文件开始故障排查。
查看安装文档页的底部找到的末尾部分,根据您的操作系统找到日志文件的位置。将有代理、代理启动器和代理启动程序的日志文件。这些文件末尾的任何错误都可能值得关注。一些常见错误是:
-
无法到达GoCD服务器
这种情况会在go-agent-launcher.log的日志中出现类似以下内容的行:
ERROR go.agent.launcher.ServerCall:69 - Couldn't access Go Server with base url: http://YOUR_SERVER:8153/go/admin/agent-launcher.jar: java.net.ConnectException: Connection refused ERROR go.agent.launcher.ServerBinaryDownloader:116 - Couldn't update admin/agent-launcher.jar. Sleeping for 1m. Error: java.lang.Exception: Couldn't access Go Server with base url: http://YOUR_SERVER:8153/go/admin/agent-launcher.jar: java.net.ConnectException: Connection refused INFO apache.commons.httpclient.HttpMethodDirector:438 - I/O exception (java.net.ConnectException) caught when processing request: Connection refused INFO apache.commons.httpclient.HttpMethodDirector:444 - Retrying request
这里的问题是代理无法连接到服务器,可能是网络问题,或者是由于防火墙限制导致服务器使用的端口不可访问。GoCD服务器默认使用HTTP的8153端口,但如果已配置反向代理来终止TLS,则应确保代理配置了正确的协议/主机/端口来连接服务器。
-
无法连接 - SSL握手错误或连接重置
这种情况会在go-agent-bootstrapper.out.log的日志中出现类似以下内容的行:
180679 [main] ERROR com.thoughtworks.go.agent.launcher.ServerCall - Couldn't access Go Server with base url: https://YOUR_SERVER/go/admin/agent-launcher.jar: javax.net.ssl.SSLHandshakeException: Remote host closed connection during handshake java.lang.Exception: Couldn't access Go Server with base url: https://YOUR_SERVER/go/admin/agent-launcher.jar: javax.net.ssl.SSLHandshakeException: Remote host closed connection during handshake at com.thoughtworks.go.agent.launcher.ServerCall.invoke(ServerCall.java:78) at com.thoughtworks.go.agent.launcher.ServerBinaryDownloader.headers(ServerBinaryDownloader.java:130) at com.thoughtworks.go.agent.launcher.ServerBinaryDownloader.downloadIfNecessary(ServerBinaryDownloader.java:106) at com.thoughtworks.go.agent.launcher.AgentLauncherImpl.launch(AgentLauncherImpl.java:78) at com.thoughtworks.go.agent.bootstrapper.AgentBootstrapper.go(AgentBootstrapper.java:72) at com.thoughtworks.go.agent.bootstrapper.AgentBootstrapper.main(AgentBootstrapper.java:54) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) at java.lang.reflect.Method.invoke(Unknown Source) at com.simontuffs.onejar.Boot.run(Boot.java:306) at com.simontuffs.onejar.Boot.main(Boot.java:159) Caused by: javax.net.ssl.SSLHandshakeException: Remote host closed connection during handshake at sun.security.ssl.SSLSocketImpl.readRecord(Unknown Source) at sun.security.ssl.SSLSocketImpl.performInitialHandshake(Unknown Source) at sun.security.ssl.SSLSocketImpl.startHandshake(Unknown Source) at sun.security.ssl.SSLSocketImpl.startHandshake(Unknown Source) at org.apache.http.conn.ssl.SSLConnectionSocketFactory.createLayeredSocket(SSLConnectionSocketFactory.java:394) at org.apache.http.conn.ssl.SSLConnectionSocketFactory.connectSocket(SSLConnectionSocketFactory.java:353) at org.apache.http.impl.conn.DefaultHttpClientConnectionOperator.connect(DefaultHttpClientConnectionOperator.java:141) at org.apache.http.impl.conn.PoolingHttpClientConnectionManager.connect(PoolingHttpClientConnectionManager.java:353) at org.apache.http.impl.execchain.MainClientExec.establishRoute(MainClientExec.java:380) at org.apache.http.impl.execchain.MainClientExec.execute(MainClientExec.java:236) at org.apache.http.impl.execchain.ProtocolExec.execute(ProtocolExec.java:184) at org.apache.http.impl.execchain.RetryExec.execute(RetryExec.java:88) at org.apache.http.impl.execchain.RedirectExec.execute(RedirectExec.java:110) at org.apache.http.impl.client.InternalHttpClient.doExecute(InternalHttpClient.java:184) at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:82) at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:107) at com.thoughtworks.go.agent.launcher.ServerCall.invoke(ServerCall.java:55) ... 11 more Caused by: java.io.EOFException: SSL peer shut down incorrectly at sun.security.ssl.InputRecord.read(Unknown Source) ... 28 more
或者这个:
2986 [main] ERROR com.thoughtworks.go.agent.launcher.ServerCall - Couldn't access Go Server with base url: https://YOUR_SERVER/go/admin/agent-launcher.jar: java.net.SocketException: Connection reset java.lang.Exception: Couldn't access Go Server with base url: https://YOUR_SERVER/go/admin/agent-launcher.jar: java.net.SocketException: Connection reset at com.thoughtworks.go.agent.launcher.ServerCall.invoke(ServerCall.java:78) ...
这里的问题是代理无法安全地连接到服务器,这表明证书无效或代理不信任该证书。
如果您正在使用完整的端到端传输安全性带有反向代理或负载均衡器来终止TLS,此错误可能意味着服务器的证书已更改,或者需要更新代理的配置以信任服务器当前的证书。
-
不兼容的Java版本
这种情况会在go-agent-bootstrapper.log的日志中出现类似以下内容的行:
242 [main] INFO com.thoughtworks.go.util.PerfTimer - Performance: Downloading new admin/agent-launcher.jar with md5 signature: e9SXM6cdV5kSkpVEmymHIg== took 37ms Exception in thread "main" java.lang.reflect.InvocationTargetException at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:622) at com.simontuffs.onejar.Boot.run(Boot.java:306) at com.simontuffs.onejar.Boot.main(Boot.java:159) Caused by: java.lang.UnsupportedClassVersionError: com/thoughtworks/cruise/agent/launcher/AgentLauncherImpl : Unsupported major.minor version 51.0 at java.lang.ClassLoader.defineClass1(Native Method) at java.lang.ClassLoader.defineClass(ClassLoader.java:643) at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
这里的问题是代理使用的Java版本太旧。在此示例中,代理使用的是Java 6,而
16.2.0
GoCD服务器需要Java 7。 -
代理令牌已被失效或您正尝试切换到另一台服务器
您已经在服务器上成功启用了代理,但如今不再在服务器上显示代理。
go-agent.log的内容如下所示:
java.lang.RuntimeException: org.apache.http.client.ClientProtocolException: The server returned status code 403. Possible reasons include: - This agent has been deleted from the configuration - This agent is pending approval
情景1:您从头重新安装了服务器或清理了服务器上的某些文件。因此,您使所有代理的令牌失效,没有任何代理可以连接到服务器。
情景2:您正尝试将代理连接到不同的服务器。当然,代理的令牌对新服务器无效。
不幸的是,代理不能简单地丢弃无效的令牌,因为它可能是上述其他原因之一 - 而丢弃令牌并不是一个好主意。
相反,您必须手动删除无效的令牌。找到代理的配置目录(Linux下默认为/var/lib/go-agent/config),并删除文件
guid.txt
和token
.
命令未找到(git、svn、mvn、ant 或其他)
此问题会以以下三种方式之一出现,如下所示。对于所有三个问题的解决方法相同 – 确保PATH
环境变量正确无误。
-
在“检查连接”期间
其他版本控制系统如SVN、TFS等也可能出现这种情况。
解决方案:检查GoCD
PATH
代理的Server的java进程环境变量。确保命令可用的目录在列表中。在Windows上,Microsoft Windows SysInternals的procexp工具可能有助于检查这一点。它以简单的方式显示每个进程的环境变量。 -
在材料轮询期间
在任何页面的右下角查找错误消息,看起来像这样:
单击它时会显示类似的错误:
GoCD服务器日志,go-server.log(位置可以在安装文档页的底部找到,针对您操作系统的部分)会有这样的消息:
其他版本控制系统如SVN、TFS等也可能出现这种情况。
解决方案:检查GoCD
PATH
代理的Server的java进程环境变量。确保命令可用的目录在列表中。在Windows上,Microsoft Windows SysInternals的procexp工具可能有助于检查这一点。它以简单的方式显示每个进程的环境变量。 -
在任务运行期间,在控制台输出中
这会出现在控制台输出中的消息,如下所示:
其他版本控制系统如SVN、TFS等也可能出现这种情况。它还可以发生在任务中使用的任何其他命令中,例如Maven、Ant、Rake或甚至其他找不到的shell脚本中。
PATH
.解决方案:检查GoCD
PATH
代理的Agent’sjava进程环境变量。确保命令可用的目录在列表中。在Windows上,Microsoft Windows SysInternals的procexp工具可能有助于检查这一点。它以简单的方式显示每个进程的环境变量。
代理未被分配或“没有任何构建”
这将显示为一个长时间停留在“构建中”(黄色)状态的流水线:

单击阶段栏,然后单击作业以查看控制台日志,您可能会看到一个状态为“已计划”的构建,而代理状态为“尚未分配”,如下所示:

解决方案:如果发生这种情况,这意味着没有找到适合此作业的代理。原因可能是:
-
没有可用的代理(空闲且未执行构建)。检查“代理”页面以查看所有代理是否都处于忙碌状态。如果是,一旦其中一个空闲,此构建就会开始。
-
如果您确实看到了可用的代理,请检查该作业在其配置中是否定义了资源。如果是,则意味着该作业正在寻找具有这些资源的代理。请检查“代理”页面以查看是否有具有作业所需资源并且可用(未构建)的代理。
-
如果前两个选项无法解决问题,请检查流水线是否是某个环境的一部分(在“环境”页面或配置中)。如果是,则能够从该流水线拾取作业的任何代理也必须属于该环境。
GoCD SPA 页面 - 执行操作时发生了未知错误。可能的原因(超时)
GoCD SPA 页面会定期通过 AJAX API 调用以获取实体的当前状态并刷新页面,这是为了确保页面上的信息不会过时。
AJAX API 请求的超时设置为 5000 毫秒,如果服务器在此期间内未响应,则请求将被取消,并在页面上显示错误。

解决方案:如果发生这种情况,请考虑通过指定go.spa.timeout
应用程序未监听端口 8154(HTTPS)
从 GoCD20.2.0
起,GoCD 服务器将不再生成任何自签名的 SSL/TLS 证书,也不会监听端口 8154(HTTPS)默认情况下。从 GoCD20.5.0
服务器不再包含任何用于配置服务器上 TLS 的功能。
预期用户将在其他地方终止 TLS,例如使用反向代理或负载均衡器。
版本之间20.2.0
和20.5.0
允许回退以使用之前的配置作为临时措施。更多信息可以参见问题 #7872.
端口 8153(HTTP)无法打开
在启动 GoCD 服务器时,此问题会出现错误:
Port 8153 could not be opened. Please Check if it is available
如果端口 8153 已被占用,可能会发生这种情况。为了更改默认端口,请在文件中将系统属性设置cruise.server.port
设置为适当的值wrapper-properties.conf
在GoCD服务器上。有关的位置,请参阅安装文档。wrapper-properties.conf
参考资料:
展开 shell 配置文件
GoCD 代理使用受限的 shell 配置文件。当代理启动或运行 shell 命令时,不会加载 go 用户的配置文件。这可能导致 GoCD 代理无法运行安装在非默认位置的应用程序。
为了扩展 PATH 变量,应更新 wrapper-properties.conf 文件以包含所需的 PATH 位置。下面的示例展示了如何扩展 PATH 以支持 rbenv。
# On Unix/Linux/macOS. Note that you must use %PATH%, and not $PATH, as you'd normally do on this platform
set.PATH=var/go/.rbenv/plugins/ruby-build/bin:/var/go/.rbenv/shims:%PATH%