最近我安装了 Jenkins 服务器,并想将其隐藏在 Nginx 代理后面。我的 Nginx 代理工作正常,我阅读了限制 Jenkins 的内容,127.0.0.1:8080因此,我编辑了配置文件/etc/default/jenkins并添加了以下代码行:
JENKINS_ARGS="--webroot=/var/cache/$NAME/war --httpPort=8080 --httpListenAddress=127.0.0.1"
Run Code Online (Sandbox Code Playgroud)
重新启动詹金斯后,我仍然可以访问端口上的詹金斯8080
环境:
乌班图20.04
OpenJDK 11
詹金斯2.332.1
网络统计输出:
sudo netstat -plnt
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:8080 0.0.0.0:* LISTEN 2313/java
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 970/nginx: master p
tcp 0 0 127.0.0.53:53 0.0.0.0:* LISTEN 708/systemd-resolve
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 946/sshd: /usr/sbin
tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN 757/cupsd
tcp6 0 0 :::80 :::* LISTEN 970/nginx: master p
tcp6 0 0 :::22 :::* LISTEN 946/sshd: /usr/sbin
tcp6 0 0 ::1:631 :::* LISTEN 757/cupsd
Run Code Online (Sandbox Code Playgroud)
PS 我在 EC2/Amazom linux 2 上尝试过,同样的问题
小智 5
从您表示正在运行的 Jenkins 版本 2.332.1 开始,Jenkins 从使用经典 SysV 初始化脚本作为服务运行切换为与支持它的 Linux 发行版(包括 Ubuntu 20.04)上的 systemd 完全集成。我没有看到任何迹象表明 Jenkins 的 systemd 单元文件曾经解析过/etc/default/jenkins,这意味着这些设置仅由 SysV init 脚本解析,这可以解释为什么您的配置在那里没有效果。
正如您所发现的,设置环境变量确实/lib/systemd/system/jenkins.service有效,但您的直觉绝对正确,直接编辑由打包系统管理的单元文件不是最佳实践。与 Linux 中的大多数内容一样,该/etc目录是管理员放置配置文件的位置,并且/lib是/usr/lib为包管理器保留的,因此幸运的是 systemd 也不例外,并提供了进行此类更改的机制。
Systemd 具有“插入”目录的概念,您可以在其中放置带有部分 systemd 单元配置的“.conf”文件,这些文件的指令将覆盖主单元文件中的指令。从systemd.unit 手册页:
除了单元文件之外,还可能存在
foo.service“插入”目录。foo.service.d/此目录中带有后缀“.conf”的所有文件将按字母数字顺序合并,并在解析主单元文件本身后进行解析。这对于更改或添加单元的配置设置非常有用,而无需修改单元文件。每个嵌入式文件必须包含适当的节标题。
验证 Jenkins 正在运行并侦听所有地址/接口:
$ sudo ss -tlnp | grep 8080
LISTEN 0 50 *:8080 *:* users:(("java",pid=2688,fd=116))
Run Code Online (Sandbox Code Playgroud)
为 Jenkins 创建一个 systemd 放置目录:
$ sudo mkdir /etc/systemd/system/jenkins.service.d
Run Code Online (Sandbox Code Playgroud)
使用您喜欢的编辑器创建覆盖文件。您可以随意命名它,只要它有.conf扩展名即可。就我个人而言,我更喜欢描述性的内容并以数字开头,这样我就可以控制解析文件的字典顺序,如果我最终得到多个覆盖文件的话。鉴于此,我创建了一个/etc/systemd/system/jenkins.service.d/50-listen-address-override.conf包含以下内容的文件:
[Service]
Environment="JENKINS_LISTEN_ADDRESS=127.0.0.1"
Run Code Online (Sandbox Code Playgroud)
现在,我们所要做的就是告诉 systemd 我们做了一些更改,希望它重新解析:
$ sudo systemctl daemon-reload
Run Code Online (Sandbox Code Playgroud)
我们可以重新启动 Jenkins 以为其提供新的配置:
$ sudo systemctl restart jenkins
Run Code Online (Sandbox Code Playgroud)
如果我们验证我们的工作,我们现在可以看到 Jenkins 仅绑定到 127.0.0.1:
$ sudo ss -tlnp | grep 8080
LISTEN 0 50 [::ffff:127.0.0.1]:8080 *:* users:(("java",pid=31636,fd=116))
Run Code Online (Sandbox Code Playgroud)
对于它的价值,您还可以使用该命令systemctl edit jenkins来创建覆盖,systemd 会自动为您创建嵌入目录和覆盖文件,并将您放入默认编辑器中以写入文件内容,但是它不会为您提供可以自由地为覆盖文件选择您自己的名称,而是为其指定一个通用名称override.conf.
| 归档时间: |
|
| 查看次数: |
2670 次 |
| 最近记录: |