Skip to content

Jenkins

部署选择

Jenkins 官方同时支持 Linux 包管理器安装和容器安装。本文使用 Docker 部署 Jenkins Controller,便于隔离 Java 运行环境,并通过镜像统一升级和回滚方式。

Jenkins 的配置、插件、凭据和任务数据都位于 /var/jenkins_home。容器可以重建,该目录必须持久化。

Docker Compose

创建部署目录:

bash
mkdir -p ~/apps/jenkins
cd ~/apps/jenkins

创建 compose.yml

yaml
services:
  jenkins:
    image: jenkins/jenkins:lts-jdk21
    container_name: jenkins
    restart: unless-stopped
    ports:
      - '8080:8080'
      # 仅使用入站 TCP Agent 时开放
      # - '50000:50000'
    volumes:
      - jenkins_home:/var/jenkins_home

  backup:
    image: alpine
    profiles:
      - tools
    volumes:
      - jenkins_home:/var/jenkins_home:ro
      - ./:/backup
    command:
      - tar
      - -czf
      - /backup/jenkins_home.tar.gz
      - -C
      - /var/jenkins_home
      - .

volumes:
  jenkins_home:
    name: jenkins_home

使用 Docker 命名卷可以避免宿主机目录与容器内 jenkins 用户之间的权限冲突。只有需要直接管理数据文件时,才考虑 bind mount,并显式将目录所有者设置为容器使用的 UID。

启动

bash
docker compose up -d
docker compose ps
docker compose logs --tail 100 jenkins

访问 http://<服务器地址>:8080。首次启动时获取初始化密码:

bash
docker compose exec jenkins cat /var/jenkins_home/secrets/initialAdminPassword

在初始化页面填写密码,随后安装所需插件并创建管理员账户。

更新

更新前先备份 jenkins_home。为了获得一致的备份,备份期间停止 Jenkins:

bash
cd ~/apps/jenkins
docker compose stop jenkins
docker compose run --rm backup
docker compose start jenkins

拉取新的 LTS 镜像并重建容器:

bash
docker compose pull
docker compose up -d
docker compose logs --tail 100 jenkins

构建节点

Jenkins Controller 主要负责调度,不建议同时承担大量构建任务。构建环境应放在独立 Agent 中,便于隔离工具链和限制权限。

不要默认将宿主机 /var/run/docker.sock 挂载到 Controller。访问该 Socket 通常等同于获得宿主机 root 级控制能力。需要构建容器镜像时,优先使用隔离的 Agent,并根据环境选择受控的远程 Docker Engine、Docker-in-Docker 或专用构建工具。

参考

基于 MIT 许可发布