Java调用Jenkins API触发任务:本地正常远程连接超时
问题描述
本地运行Java程序调用Jenkins API触发名为terraform-example的任务时一切正常,但切换指向远程Jenkins服务器(地址http://192.168.1.207:8080/)后,虽端口已开放且网页可远程访问,却抛出连接超时异常。
代码示例
import java.net.URI; import com.offbytwo.jenkins.JenkinsServer; import com.offbytwo.jenkins.model.BuildWithDetails; public class Main { public static void main(String args) { try { JenkinsServer jenkinsServer = new JenkinsServer(new URI("http://localhost:8080/"),"admin","apitoken"); // JenkinsServer jenkinsServer = new JenkinsServer( // URI.create("http://192.168.1.207:8080/") // ,"admin","apitoken"); JenkinsTriggerHelper triggerHelper = new JenkinsTriggerHelper(jenkinsServer); BuildWithDetails details = triggerHelper.triggerJobAndWaitUntilFinished("terraform-example"); if (details!=null) System.out.println("LOGS " + details.getConsoleOutputText()); else System.out.println("details not found "); } catch (Exception e) { e.printStackTrace(); } } }
异常信息
org.apache.http.conn.HttpHostConnectException: Connect to 192.168.1.207:8080 [/192.168.1.207] failed: Connection timed out: connect
排查与解决方案
- 检查Jenkins API访问权限与跨域设置:登录远程Jenkins后台,进入「系统管理」→「全局安全配置」,确认「代理模式」设为「兼容」或「宽松」;开启「跨域资源共享(CORS)」,添加客户端IP到允许列表。网页能访问不代表API接口默认开放外部调用。
- 验证API Token有效性:重新生成admin用户的API Token(路径:用户设置→API Token→添加新Token),替换代码中的旧Token后测试,确保Token拥有触发任务、读取构建日志的权限。
- 排查网络隐性拦截:在客户端执行
telnet 192.168.1.207 8080或curl http://192.168.1.207:8080/api/json测试连通性。如果curl也超时,说明是服务器/客户端防火墙、安全组、代理等网络层面的拦截,需开放对应规则。 - 确认Jenkins绑定地址:检查Jenkins启动参数,确保没有
--httpListenAddress=127.0.0.1这类仅允许本地访问的配置,应绑定0.0.0.0以允许所有IP访问。 - 修正代码语法错误:
- 主方法参数应为
String[] args,原代码String args是语法错误,可能在远程环境触发异常。 - 替换代码中所有中文引号「“”」为英文引号「""」,避免编译或运行时解析错误。
- 主方法参数应为
内容的提问来源于stack exchange,提问作者Sudipta Ghosh
相关产品推荐
相关产品推荐

