我刚刚在我的 openshift 帐户中安装了一个新的(也是第一个)Jenkins。
我自动选择了 manven(来自 apache,版本 3.2.2)安装在(jenkins->coinfiguration)中。
然后,我从自己的 git 存储库创建了一份新作业。
但是,当我运行这个作业时,出现了以下异常:
Fetching upstream changes from XXX
Seen branch in repository origin/HEAD
Seen branch in repository origin/master
Commencing build of Revision bde393352dfdf3c5b097bc3e80f4631191499b80 (origin/HEAD, origin/master)
Checking out Revision bde393352dfdf3c5b097bc3e80f4631191499b80 (origin/HEAD, origin/master)
No change to record in branch origin/HEAD
No change to record in branch origin/master
Parsing POMs
Discovered a new module br.com.accurati:icheck icheck
Discovered a new module br.com.accurati.icheck:icheck-commons core project classes
Discovered a new module br.com.accurati.icheck:icheck-desktop core project classes
Modules changed, recalculating dependency graph
ERROR: Failed to parse POMs
java.net.BindException: Permission denied
at java.net.PlainSocketImpl.socketBind(Native Method)
at java.net.AbstractPlainSocketImpl.bind(AbstractPlainSocketImpl.java:376)
at java.net.ServerSocket.bind(ServerSocket.java:376)
at java.net.ServerSocket.bind(ServerSocket.java:330)
at hudson.maven.AbstractMavenProcessFactory$SocketHandler$AcceptorImpl.<init>(AbstractMavenProcessFactory.java:178)
at hudson.maven.AbstractMavenProcessFactory$SocketHandler.call(AbstractMavenProcessFactory.java:164)
at hudson.maven.AbstractMavenProcessFactory$SocketHandler.call(AbstractMavenProcessFactory.java:162)
at hudson.remoting.LocalChannel.call(LocalChannel.java:45)
at hudson.maven.AbstractMavenProcessFactory.newProcess(AbstractMavenProcessFactory.java:236)
at hudson.maven.ProcessCache.get(ProcessCache.java:235)
at hudson.maven.MavenModuleSetBuild$MavenModuleSetBuildExecution.doRun(MavenModuleSetBuild.java:749)
at hudson.model.AbstractBuild$AbstractBuildExecution.run(AbstractBuild.java:585)
at hudson.model.Run.execute(Run.java:1684)
at hudson.maven.MavenModuleSetBuild.run(MavenModuleSetBuild.java:519)
at hudson.model.ResourceController.execute(ResourceController.java:88)
at hudson.model.Executor.run(Executor.java:231)
Finished: FAILURE
任何想法?
答案1
Java 错误java.net.BindException: Permission denied
是一个通用错误(并非特定于 Jenkins),表示应用程序正在尝试监听不允许的端口。特别是在 Unix 上,如果用户不是 root,则该端口将低于 1024。通常,您的 Jenkins 实例配置为直接监听端口 80,如果 Java 进程未以 root 身份运行,则可能会出现问题。尝试将其设置为监听端口 8080。然后在浏览器中使用此端口,或者(更典型地)使用在端口 80 上以 root 身份运行的 Apache 实例作为 Jenkins 的前端,并在端口 8080 上为 Jenkins 提供代理。
答案2
默认情况下,“知名”端口(低于 1024)只能由 root 运行的进程监听。您可以通过设置CAP_NET_BIND_SERVICE
功能允许特定二进制文件绑定到“知名”端口setcap
:
sudo setcap CAP_NET_BIND_SERVICE=+eip /path/to/java
但是,如果使用 Jenkins,您必须将此功能设置为 JVM 二进制文件,即允许所有 Java 应用程序绑定到可能存在安全风险的“知名”端口。