Jenkins 架构与生产部署

验证:未记录
适用版本
未记录
验证范围
尚未登记验证记录。

Controller(控制节点)保存配置、调度任务;Agent(执行节点)运行构建。控制节点的执行器数量设为 0,不挂 Docker socket、不执行应用构建。官方隔离要求

1. 准备平台目录与固定镜像#

实验:独立 Linux 虚拟机,Docker Compose、至少 2 核/4 GB、持久磁盘、私有管理网络。生产容量按任务数、插件、日志留存测量;单 Controller 加持久卷是可恢复部署,不是主动双活。不能启动两台 Controller 同时读写同一 Jenkins Home。

下载 Dockerfile、插件清单、Compose、初始化配置 到同一目录。插件清单是本次验证样本,部署前核对当前安全公告及核心兼容;完整版本管理见 配置即代码。

set -euo pipefail
export JENKINS_BASE='jenkins/jenkins:2.568.3-jdk21@sha256:REPLACE_VERIFIED_DIGEST'
docker build --build-arg JENKINS_BASE="$JENKINS_BASE" -t platform/jenkins:reviewed .

本次本地验证为 Jenkins 2.568.3、Java 21、所附插件清单;这是一组验证基线,并非自动跟踪最新版。先在官方镜像仓库核对该标签的 digest。LTS(Long-Term Support,长期支持)核心与 Java 运行时一起锁定。把自定义镜像推到企业仓库后,将其完整 digest 写入下面变量;仅本机试验可用刚构建的 platform/jenkins:reviewed 标签。

2. 初始化持久目录和管理员#

export JENKINS_IMAGE='REPLACE_REGISTRY/platform/jenkins@sha256:REPLACE_DIGEST'
export JENKINS_HOME_DIR='/srv/jenkins/home'
export JENKINS_URL='https://jenkins.example.com/'
export JENKINS_BOOTSTRAP_PASSWORD_FILE='/srv/jenkins/bootstrap/JENKINS_BOOTSTRAP_PASSWORD'
sudo install -d -m 0700 -o 1000 -g 1000 "$JENKINS_HOME_DIR" /srv/jenkins/bootstrap
# 从企业秘密管理器将初始密码交付到该文件,不能使用示例密码。
sudo chown 1000:1000 "$JENKINS_BOOTSTRAP_PASSWORD_FILE"
sudo chmod 0400 "$JENKINS_BOOTSTRAP_PASSWORD_FILE"
docker compose config --quiet
docker compose up -d
docker compose logs --tail 100 controller

首次打开 http://127.0.0.1:8080/login(远程主机用 SSH 安全隧道),以 bootstrap-admin 登录。配置预先关闭注册、不给匿名用户权限;初始密码通过挂载文件读取,不写 Git、镜像或命令参数。

3. 接入企业入口与身份#

前提:同机 Nginx 已安装,企业证书管理系统已交付证书/私钥并负责续期。以下保存到 /etc/nginx/conf.d/jenkins.conf(该目录必须在 http 块中 include),替换域名及证书路径:

map $http_upgrade $jenkins_connection_upgrade {
    default upgrade;
    '' '';
}
server {
    listen 443 ssl;
    server_name jenkins.example.com;
    ssl_certificate /etc/nginx/tls/jenkins-fullchain.pem;
    ssl_certificate_key /etc/nginx/tls/jenkins-key.pem;
    ssl_protocols TLSv1.2 TLSv1.3;
    ignore_invalid_headers off;
    client_max_body_size 50m;
    location / {
        proxy_pass http://127.0.0.1:8080;
        proxy_http_version 1.1;
        proxy_set_header Host $http_host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection $jenkins_connection_upgrade;
        proxy_request_buffering off;
        proxy_buffering off;
        proxy_read_timeout 3600s;
    }
}

执行 sudo nginx -t 成功后 sudo systemctl reload nginx。管理入口仅对企业网络开放;检查浏览器登录、回调 URL 和 WebSocket Agent 连接。HTTPS 使用 TLS(Transport Layer Security,传输层安全协议)保护 HTTP 流量。代理若在其他主机,需另配私网回源及防火墙,不直接暴露 8080。官方 Nginx 配置

访问控制见 身份与凭据。先验证企业登录、管理员组和应急恢复,再替换本地身份域;不要认为切到企业身份后本地管理员一定还能登录。验证 /login 正常,匿名不能读任务或执行管理 API(应用程序编程接口)。

4. 接入执行节点与验收#

先按 Agent 实验 建立一台执行节点,再运行 第一条流水线。确认控制节点 built-in node 执行器为 0,任务实际落在 Agent;重启 Controller 后任务配置保留,重建一个 Agent 后能够重新执行。

Controller 只放行必要的 Git、插件源、身份系统、Agent 和监控通信。磁盘配置使用率、inode、备份失败告警,日志不保存令牌。恢复演练见 生产运维。实验结束先备份,docker compose down 停止服务;不删除持久目录作为“清理”。

搜索文档

输入关键词,搜索所有文档。

↑ ↓ 选择 · Enter 打开 · Esc 关闭