Jenkins

概述

Jenkins 是一个开源的自动化服务器,广泛用于持续集成(CI)和持续交付(CD)过程。它能够帮助开发团队自动化构建、测试和部署软件,从而提高开发效率和软件质量。

核心能力

  • 持续集成:代码提交后自动触发构建和测试
  • 持续交付/部署:自动化部署至测试或生产环境
  • 插件生态:支持 1800+ 插件,可与 Git、Maven、Docker、Kubernetes 等工具集成
  • 流水线即代码:通过 Jenkinsfile 定义完整构建流程

部署准备

1. 系统要求

项目 最低配置 推荐配置
CPU 1 核 2 核+
内存 1 GB 2 GB+
硬盘 10 GB 20 GB+

2. 创建 Docker Compose 编排文件

docker-compose.yaml

services:
  jenkins:
    image: jenkins/jenkins:2.478-jdk17
    container_name: jenkins
    restart: always
    user: root
    environment:
      - TZ=Asia/Shanghai
    ports:
      - "8080:8080"
    volumes:
      - ./jenkins/data:/var/jenkins_home
    deploy:
      resources:
        limits:
          cpus: "1"
          memory: "2G"

3. 参数说明

参数 说明
user: root 以 root 用户运行,避免容器内权限不足
./jenkins/data 本地挂载目录,用于持久化 Jenkins 数据

启动服务

docker compose up -d

查看启动日志:

docker logs jenkins -f --tail=50

验证访问

curl http://127.0.0.1:8080

在浏览器中打开 http://<服务器IP>:8080 即可访问 Jenkins。


初始配置

1. 获取初始管理员密码

Jenkins 首次启动后会生成一个初始管理员密码,查看方式如下:

docker logs jenkins 2>&1 | grep -A 10 "Jenkins initial setup is required"

或在容器内直接查看:

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

输出示例:a371e758bc1f44f4960a5f53358f1070

2. 解锁 Jenkins

  1. 在浏览器访问 http://<服务器IP>:8080
  2. 输入上述获取的初始密码
  3. 点击「继续」

3. 安装推荐插件

选择「安装推荐的插件」,Jenkins 将自动安装常用插件(Git、Pipeline、Docker 等),过程约 5-10 分钟。

4. 创建管理员用户

按提示创建管理员账户,用于后续登录 Jenkins。

5. 完成配置

点击「保存并完成」,即可进入 Jenkins 主界面。


常用管理命令

操作 命令
启动 Jenkins docker compose up -d
停止 Jenkins docker compose stop
重启 Jenkins docker compose restart
查看状态 docker compose ps
查看日志 docker logs jenkins -f --tail=100
进入容器 docker exec -it jenkins /bin/bash

常用 Jenkins 命令(容器内)

进入容器后,可使用以下命令管理 Jenkins:

# 查看 Jenkins 版本
cat /var/jenkins_home/jenkins.install.UpgradeWizard.state

# 重启 Jenkins(在 Jenkins 界面中也可操作)
# 访问 http://<IP>:8080/restart

# 查看 Jenkins 系统信息
java -jar /usr/share/jenkins/jenkins.war --version

常见问题

Q:启动后浏览器访问 502 或连接被拒绝?

  1. 确认容器是否正常运行:
docker ps | grep jenkins
  1. 查看启动日志排查错误:
docker logs jenkins --tail=50
  1. 检查端口 8080 是否被其他服务占用:
netstat -tlnp | grep 8080

Q:忘记管理员密码怎么办?

停止 Jenkins,修改配置启用安全跳过:

docker stop jenkins
# 编辑 jenkins 数据目录下的 config.xml
vim ./jenkins/data/config.xml

找到 <useSecurity>true</useSecurity> 改为 false,重启 Jenkins 后无需密码登录,重置密码后改回配置。

Q:插件安装失败或网络超时?

  1. 修改 Jenkins 插件源为国内镜像:
docker exec jenkins sed -i 's#https://updates.jenkins.io/download#https://mirrors.tuna.tsinghua.edu.cn/jenkins#g' /var/jenkins_home/updates/default.json
  1. 重启 Jenkins 后重新尝试安装插件。

Q:容器内无法使用 Docker 命令?

如需在 Jenkins 容器内执行 Docker 命令,可使用以下方式:

方式一:挂载 Docker Socket

volumes:
  - ./jenkins/data:/var/jenkins_home
  - /var/run/docker.sock:/var/run/docker.sock
  - /usr/bin/docker:/usr/bin/docker

方式二:使用 Jenkins 官方 Docker 镜像

image: jenkins/jenkins:2.478-jdk17

注意:方式一存在安全风险,生产环境需谨慎使用。

Q:如何备份 Jenkins 数据?

备份 ./jenkins/data 目录即可:

# 停止 Jenkins 后备份
docker compose down
tar -czf jenkins_backup.tar.gz ./jenkins/data
docker compose up -d

恢复时解压到 ./jenkins/data 目录并重启。


快速配置 Pipeline 示例

创建一个简单的 Pipeline 任务:

  1. 点击「新建任务」→ 输入名称 → 选择「流水线」
  2. 在流水线脚本中输入:
pipeline {
    agent any
    stages {
        stage('Build') {
            steps {
                echo 'Building...'
            }
        }
        stage('Test') {
            steps {
                echo 'Testing...'
            }
        }
        stage('Deploy') {
            steps {
                echo 'Deploying...'
            }
        }
    }
}
  1. 点击「保存」并「立即构建」

参考链接