初始设置

大多数 Jenkins 配置的修改可以通过 Jenkins 用户界面或通过 配置即代码插件, configuration as code plugin 进行。有一些配置值只能在 Jenkins 启动时修改。本节描述了这些设置以及咱们使用他们。

Jenkins 的参数

Jenkins 的初始化也可以由作为参数传递的运行时参数控制。命令行参数可以调整网络、安全、监控和其他设置。

网络参数

Jenkins网络配置一般由命令行参数控制。网络配置的参数有:

命令行参数说明
--httpPort=$HTTP_PORT使用标准 http 协议在端口 $HTTP_PORT 上运行 Jenkins 监听器。默认是 8080 端口。要禁用(因为咱们使用着 https),就使用端口 -1。 这个选项不影响在 Jenkins 逻辑(UI、入站的 agent 文件等)中生成的根 URL。他是由全局配置中指定的 Jenkins URL 定义的。
--httpListenAddress=$HTTP_HOST将 Jenkins 绑定到 $HTTP_HOST 表示的 IP 地址。默认是 0.0.0.0 - 即监听所有可用接口。例如,要只监听来自 localhost 的请求,咱们可以使用: --httpListenAddress=127.0.0.1
--httpsPort=$HTTPS_PORT使用 HTTPS 协议,端口为 $HTTPS_PORT。这个选项不影响在 Jenkins 逻辑(UI,入站 agent 文件等)中生成的根 URL。他是由全局配置中指定的 Jenkins URL 定义的。
--httpsListenAddress=$HTTPS_HOST绑定 Jenkins 以监听 $HTTPS_HOST 所表示 IP 地址上的 HTTPS 请求。
--http2Port=$HTTP_PORT使用 HTTP/2 协议,端口为 $HTTP_PORT。这个选项不影响在 Jenkins 逻辑(UI、入站 agent 文件等)中生成的根 URL。他是由全局配置中指定的 Jenkins URL 定义的。
--http2ListenAddress=$HTTPS_HOST绑定 Jenkins 以监听 $HTTPS_HOST 所表示 IP 地址上的 HTTP/2 请求。
--prefix=$PREFIX运行 Jenkins,在 URL 的末尾包括 $PREFIX。例如,设置 --prefix=/jenkins,使 Jenkins 可以在 http://myServer:8080/jenkins 处访问到。
--sessionTimeout=$SESSION_TIMEOUT设置 http 会话超时值为 $SESSION_TIMEOUT 分钟。默认为 webapp 指定的值,然后是 60 分钟。

表 1 - Jenkins 网络方面的命令行参数

杂项参数

其他 Jenkins 初始化选项也由命令行参数控制。杂项配置参数有:

命令行参数说明
--argumentsRealm.passwd.$USER=$PASS为用户 $USER 指定密码。如果启用了 Jenkins 的安全功能,咱们必须以拥有 admin 角色的用户身份登录来配置 Jenkins。
--argumentsRealm.roles.$USER=admin指定用户 $USER 为管理员角色。即使在 Jenkins 中启用了安全功能,该用户也可以配置 Jenkins。更多信息请参考 加固 Jenkins
--paramsFromStdIn从标准输入(stdin)读取参数。当参数通过命令行传递时,只要进程继续运行,就可以用 Unix 的 ps(1) 或 Windows 的 Process Explorer 查看他们。当传递敏感参数如 --httpsKeyStorePassword 时,这是不可取的。有了 --paramsFromStdIn 参数,咱们就可以用
echo '--httpPort=-1 --httpsPort=443 --httpsKeyStore=path/to/keystore --httpsKeyStorePassword=keystorePassword' | java -jar jenkins.war --paramsFromStdIn
取代
java -jar jenkins.war --httpPort=-1 --httpsPort=443 --httpsKeyStore=path/to/keystore --httpsKeyStorePassword=keystorePassword
--useJmx启用 Jetty Java 管理扩展(JMX)

表 2 - Jenkins 杂项命令行参数

Jenkins 的属性

一些 Jenkins 的行为是用 Java 属性配置的。Java 属性是由启动 Jenkins 的命令行设置的。属性分配使用 -DsomeName=someValue 的形式,将值 someValue 分配给名为 someName 的属性。例如,如果要给属性 testName 赋值为 true,命令行参数为 -DtestName=true

更多信息请参考 Jenkins 属性 的详细列表。

配置 HTTP

使用现有证书的 HTTPS

如果咱们正在使用内置的 Winstone 服务器设置 Jenkins,并想使用现有的 HTTPS 证书:

--httpPort=-1 \
--httpsPort=443 \
--httpsKeyStore=path/to/keystore \
--httpsKeyStorePassword=keystorePassword

使用 HTTP/2

HTTP/2 协议 允许网络服务器通过管道化请求、多路复用请求来减少加密连接的延迟,并允许服务器在某些情况下,在收到客户对数据的请求之前进行推送。Jenkins 使用的 Jetty 服务器通过添加应用层协议协商 (Application-Layer Protocol Negotiation, ALPN) 的 TLS 扩展来支持 HTTP/2。

即使没有设置 HTTPS 端口,启用 HTTP/2 也会隐式地启用 TLS,从使用 Winstone 5.23 的 Jenkins 2.339 开始,咱们还必须指定一个 HTTPS 密钥存储文件。

--httpPort=-1 \
--http2Port=9090 \
--httpsKeyStore=path/to/keystore \
--httpsKeyStorePassword=keystorePassword

Windows 下的 HTTPS 证书问题

<略>, 请参考 HTTPS certificates with Windows