java.io.IOException:没有 X-Jenkins-CLI2-Port(jenkins cli 不工作)

Posted

技术标签:

【中文标题】java.io.IOException:没有 X-Jenkins-CLI2-Port(jenkins cli 不工作)【英文标题】:java.io.IOException: No X-Jenkins-CLI2-Port (jenkins cli not working ) 【发布时间】:2016-09-21 02:42:26 【问题描述】:

我正在尝试运行以下命令:

java -jar jenkins-cli.jar -s http://jenkins_URL/ --username myusername --password mypassword help

但我得到了错误:

java.io.IOException: No X-Jenkins-CLI2-Port 在 [null, X-Required-Permission, X-Jenkins, X-You-Are-In-Group, X-Hudson, Content-Length, Expires , X-You-Are-Authenticated-As, X-Permission-Impied-By, Set-Cookie, Server, X-Content-Type-Options, Date, X-Jenkins-Session, Content-Type] 在 hudson.cli.CLI.getCliTcpPort(CLI.java:284) 在 hudson.cli.CLI.(CLI.java:128) 在 hudson.cli.CLIConnectionFactory.connect(CLIConnectionFactory.java:72) 在 hudson.cli.CLI._main(CLI.java:473) 在 hudson.cli.CLI.main(CLI.java:384) 抑制:java.io.IOException:服务器返回 HTTP 响应代码:403 用于 URL:http://52.9.217.252:8888/cli 在 sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1628) 在 hudson.cli.FullDuplexHttpStream.(FullDuplexHttpStream.java:78) 在 hudson.cli.CLI.connectViaHttp(CLI.java:152) 在 hudson.cli.CLI.(CLI.java:132) ... 3 更多

我的 config.xml 文件

<?xml version='1.0' encoding='UTF-8'?>
<hudson>
  <disabledAdministrativeMonitors/>
  <version>1.0</version>
  <numExecutors>2</numExecutors>
  <mode>NORMAL</mode>
  <useSecurity>true</useSecurity>
  <authorizationStrategy class="hudson.security.FullControlOnceLoggedInAuthorizationStrategy">
    <denyAnonymousReadAccess>false</denyAnonymousReadAccess>
  </authorizationStrategy>
  <securityRealm class="hudson.security.HudsonPrivateSecurityRealm">
    <disableSignup>true</disableSignup>
    <enableCaptcha>false</enableCaptcha>
  </securityRealm>
  <disableRememberMe>false</disableRememberMe>
  <projectNamingStrategy class="jenkins.model.ProjectNamingStrategy$DefaultProjectNamingStrategy"/>
  <workspaceDir>$ITEM_ROOTDIR/workspace</workspaceDir>
  <buildsDir>$ITEM_ROOTDIR/builds</buildsDir>
  <jdks/>
  <viewsTabBar class="hudson.views.DefaultViewsTabBar"/>
  <myViewsTabBar class="hudson.views.DefaultMyViewsTabBar"/>
  <clouds/>
  <scmCheckoutRetryCount>0</scmCheckoutRetryCount>
  <views>
    <hudson.model.AllView>
      <owner class="hudson" reference="../../.."/>
      <name>All</name>
      <filterExecutors>false</filterExecutors>
      <filterQueue>false</filterQueue>
      <properties class="hudson.model.View$PropertyList"/>
    </hudson.model.AllView>
  </views>
  <primaryView>All</primaryView>
  <slaveAgentPort>-1</slaveAgentPort>
  <label></label>
  <crumbIssuer class="hudson.security.csrf.DefaultCrumbIssuer">
    <excludeClientIPFromCrumb>false</excludeClientIPFromCrumb>
  </crumbIssuer>
  <nodeProperties/>
  <globalNodeProperties/>
</hudson>

【问题讨论】:

【参考方案1】:

Jenkins Wiki Page for CLI有官方解决方案。

解决方案

转到管理 Jenkins(在 Jenkins UI 中) -> 配置全局安全 ->“JNLP 代理的 TCP 端口”:选择固定或随机

【讨论】:

【参考方案2】:

对于那些正在寻找如何以编程方式(无人值守)进行这项工作的人。 你必须改变

    <jenkins.CLI>
      <enabled>false</enabled>
    </jenkins.CLI>

    <jenkins.CLI>
      <enabled>true</enabled>
    </jenkins.CLI>

在 /var/lib/jenkins/jenkins.CLI.xml 并重启 jenkins

【讨论】:

这将允许 -remoting 选项而不启用安全性,而不是手动更改任何内容。【参考方案3】:

为确保不是用户名和/或密码错误,请更改此行:

<denyAnonymousReadAccess>true</denyAnonymousReadAccess>

进入:

<denyAnonymousReadAccess>false</denyAnonymousReadAccess>

在您的 config.xml 文件中。

现在您可以连接到您的 jenkins 界面来调试您的凭据

不要忘记将其重置为 true。

【讨论】:

我可以看到jenkins界面。我无法运行 CLI 命令。我试着按照你说的做,我仍然无法运行 CLI 命令/ 您遇到 403 错误,如果不是凭证问题,可能与您的 Web 服务器配置有关。你可以把你的网络服务器配置?更多信息(端口、代理端口等...) 我已将我的 config.xml 添加到说明中。 你能把你的 jenkins 网络服务器配置一下吗? (apache或nginx等...) 对不起,我无法理解...为什么要安装 apache 或 nginx 服务器?【参考方案4】:

如果不清楚为什么会失败,请在strace/dtruss 调试器下运行,例如

$ strace -fs1000 -e trace=network java -jar jenkins-cli.jar -s http://localhost:8080/ help

如果你有:

HTTP/1.1 403 请求中没有包含有效的 crumb

错误,那么您需要在请求中提供 crumb,或者禁用 CSRF Protection。

在启用 crumb issuer 时使用 Jenkins CLI it's not working yet,因此您可以改用 curl。例如(将 localhost 替换为您的 Jenkins 地址):

    记下您的用户 API 令牌 (/user/USER/configure)。

    得到你的面包屑:

    CRUMB=$(curl -s 'http://USER:TOKEN@localhost:8080/crumbIssuer/api/xml?xpath=concat(//crumbRequestField,":",//crumb)')
    

    调用一些命令(例如列出作业):

    curl -H $CRUMB http://USER:TOKEN@localhost:8080/api/json
    

相关:Jenkins REST API Create job

【讨论】:

以上是关于java.io.IOException:没有 X-Jenkins-CLI2-Port(jenkins cli 不工作)的主要内容,如果未能解决你的问题,请参考以下文章

火花:java.io.IOException:设备上没有剩余空间[再次!]

Android Studio - ProGuard“java.io.IOException ...bin\classes(没有这样的文件或目录)”

安装没有成功。无法安装应用程序。 java.io.IOException:仅在内部请求,但空间不足

导入失败:java.io.IOException:无法运行程序“hive”:错误=2,没有这样的文件或目录

ant jar 错误:执行失败:java.io.IOException:无法运行程序...$aapt":错误=2,没有这样的文件或目录

java.io.IOException : 未找到身份验证挑战