尝试从Jenkins访问Gmail API时出现SocketTimeoutException

jjjwad0x  于 2022-09-20  发布在  Jenkins
关注(0)|答案(1)|浏览(256)

我正在运行调用Gmail API的自动化测试。

我要说的是(你准备好了吗?):它在我的机器上工作

但是,当我通过Jenkins运行相同的测试时,我得到一个SocketTimeoutException: connect timed out错误。

一些地址已添加到代理的白名单中(但没有任何改进):

  • accounts.google.com
  • gmail.googleapis.com

在它失败的地方:

JsonFactory JSON_FACTORY = JacksonFactory.getDefaultInstance();
String APPLICATION_NAME = "TEST";

final NetHttpTransport HTTP_TRANSPORT = GoogleNetHttpTransport.newTrustedTransport();
// This one runs ok
Gmail service = new Gmail.Builder(HTTP_TRANSPORT, JSON_FACTORY, getCredentials(HTTP_TRANSPORT))
    .setApplicationName(APPLICATION_NAME)
    .build();
// It fails here:
ListMessagesResponse response = service.
    users().
    messages().
    list("me").
    setQ("subject:" + messageTitle).
    execute();

如有任何帮助,将不胜感激:)

np8igboo

np8igboo1#

我们终于找到了解决这个问题的办法。不出所料,这是一次代理发行。我的虚拟机在某个公司代理后面运行,而Jenkins示例在*另一个后面运行。

代替final NetHttpTransport HTTP_TRANSPORT = GoogleNetHttpTransport.newTrustedTransport();

我把一个定制的final NetHttpTransport HTTP_TRANSPORT = (NetHttpTransport) newProxyTransport();

其定义如下:

protected static Boolean isJenkinsMode = Boolean.getBoolean(System.getProperty("jenkinsMode"));

static HttpTransport newProxyTransport() throws GeneralSecurityException, IOException {
    NetHttpTransport.Builder builder = new NetHttpTransport.Builder();
    builder.trustCertificates(GoogleUtils.getCertificateTrustStore());
    String proxy = "default-proxy-address-which-works-on-my-machine.com";
    if(isJenkinsMode){
        proxy = "proxy-address-for-jenkins.com";
    }
    builder.setProxy(new Proxy(Proxy.Type.HTTP, new InetSocketAddress(proxy, 3128)));
    return builder.build();
}

然后,我从Jenkins使用-DjenkinsMode=true运行Maven命令。

相关问题