Docker 部署 Jenkins持续集成(CI)工具

@[TOC](Docker 部署 Jenkins持续集成(CI)工具)


前言

Jenkins 是一个流行的开源自动化工具,广泛应用于持续集成(CI)和持续交付(CD)的环境中。通过 Docker 部署 Jenkins,可以简化安装和配置过程,并让你方便地管理 Jenkins 容器。

本文将介绍如何使用 Docker 部署 Jenkins,并对比两种端口配置方式:使用 host 网络模式 和使用 port 映射来设置 Jenkins 容器的访问端口。


一、准备工作

首先,确保你的系统上已经安装了 Docker。

Linux上进行Docker安装有两种方式:

  1. Docker自动化安装
  2. Docker手动安装

可以根据该文章的步骤进行安装:https://blog.csdn.net/weixin_44876263/article/details/136714078?spm=1001.2014.3001.5502

二、设置变量和目录结构

在部署 Jenkins 之前,首先设置一些变量并创建相关目录,以确保 Jenkins 数据和日志能够持久化存储。

bash 复制代码
#!/bin/bash

# 设置变量
PORT=8081
PROJECT_DIR="/opt/docker/jenkins"

# 创建目录结构
mkdir -p "$PROJECT_DIR/jenkins_home"
mkdir -p "$PROJECT_DIR/logs"
  • PORT=8081 设置 Jenkins 容器暴露的端口。可以根据需求修改为其他端口。
  • PROJECT_DIR 是 Jenkins 配置和数据存储的根目录。
  • 创建 jenkins_home 目录来存储 Jenkins 的数据。
  • 创建 logs 目录来存储 Jenkins 的日志文件。

三、配置 Docker 权限和网络

运行 Jenkins 容器时,我们可能需要赋予它一些特权和网络设置,具体如下:

  • --privileged=true:该选项赋予容器管理员权限,这样容器可以执行更多操作。需要评估是否赋予这个权限。
  • --network=host:使容器与主机共享网络堆栈,而不进行端口映射。Jenkins 将直接使用主机的端口。
  • --cap-add=NET_ADMIN:允许容器管理网络接口,某些 Jenkins 插件可能需要此权限。
  • --cap-add=SYS_PTRACE:允许容器内的进程进行调试,通常用于调试工具或监控进程。

四、启动 Jenkins 容器

1. 使用 host 网络模式(共享主机网络)

通过设置 --network host,容器将直接使用宿主机的网络堆栈。此时,不需要端口映射,容器会占用主机上的端口 8080。因此,访问 Jenkins 的 URL 会直接是宿主机的 IP 地址。

bash 复制代码
# 运行 Jenkins 容器(使用 host 网络)
docker run -d \
  --restart=always \
  --cap-add=SYS_PTRACE \
  --cap-add=NET_ADMIN \
  --name jenkins \
  -u root \
  -e JENKINS_OPTS="--httpPort=$PORT" \
  -v "$PROJECT_DIR/jenkins_home:/var/jenkins_home" \
  -v "$PROJECT_DIR/logs:/var/log/jenkins" \
  -v "/var/run/docker.sock:/var/run/docker.sock" \
  -v "/etc/localtime:/etc/localtime" \
  --network host \
  jenkins/jenkins:lts-alpine-jdk17

修改 host模式下 Jenkins 端口的正确方法:

如果你需要更改 Jenkins URL端口 ,可以直接修改 jenkins.model.JenkinsLocationConfiguration.xml 文件。

这个文件通常位于 Jenkins 的数据目录中(即 /var/jenkins_home)。

  • 找到并打开 /var/jenkins_home/jenkins.model.JenkinsLocationConfiguration.xml 文件。

  • 修改 标签中的端口部分,例如:

    bash 复制代码
    <jenkinsUrl>http://localhost:8081/</jenkinsUrl>

优点:

  • 不需要额外的端口映射,容器和主机共享网络堆栈。
  • 对于没有多个容器的简单环境,配置非常方便。

缺点:

  • 端口直接共享主机端口,因此如果主机上有其他服务占用了相同的端口,可能会导致冲突。
  • 不能灵活配置容器的端口映射。

2. 使用 port 映射(绑定特定端口)

如果你想控制容器的端口映射,或者在一台机器上运行多个 Docker 容器,可以使用 -p 参数将宿主机的端口映射到容器的端口。在这种情况下,Jenkins 容器会绑定到宿主机的指定端口,而不是共享整个主机的网络。

bash 复制代码
# 运行 Jenkins 容器(使用端口映射)
docker run -d \
  --restart=always \
  --cap-add=SYS_PTRACE \
  --cap-add=NET_ADMIN \
  --name jenkins \
  -u root \
  -p "$PORT:8080" \
  -v "$PROJECT_DIR/jenkins_home:/var/jenkins_home" \
  -v "$PROJECT_DIR/logs:/var/log/jenkins" \
  -v "/var/run/docker.sock:/var/run/docker.sock" \
  -v "/etc/localtime:/etc/localtime" \
  jenkins/jenkins:lts-alpine-jdk17

优点:

  • 容器和宿主机的网络堆栈相互隔离,避免了端口冲突。
  • 可以灵活设置宿主机与容器之间的端口映射。
  • 适合在单台机器上运行多个容器时使用不同的端口。

缺点:

  • 需要手动设置端口映射(如果有多个容器)。

五、Docker 内安装 Docker 环境

如果你需要在 Jenkins 容器内执行 Docker 命令(例如,构建 Docker 镜像),你可以通过在容器中安装 Docker 客户端来实现:

bash 复制代码
# 安装 Docker CLI 工具
apk add docker-cli

这将允许 Jenkins 在容器内部调用 Docker 命令。

六、访问 Jenkins

无论你选择了哪种端口配置方式,你都可以通过浏览器访问 Jenkins Web 界面:

  • 使用 host 网络模式 :访问 http://<your-server-ip>:8080,直接通过主机的 IP 地址。
  • 使用 port 映射 :访问 http://<your-server-ip>:8081,通过宿主机上映射的端口(在这里是 8081)。

首次访问时,Jenkins 会要求你输入解锁密钥。你可以在容器日志中找到该密钥:

复制并粘贴日志中的密钥,完成 Jenkins 的初始设置。


总结

通过 Docker 部署 Jenkins 容器并设置端口映射或共享主机网络堆栈,都是部署 Jenkins 的有效方式。选择哪种方式,取决于你的具体需求:

  • 如果你希望容器与宿主机共享网络,避免端口映射,选择 host 网络模式
  • 如果你需要灵活地控制容器与宿主机的端口映射,选择 port 映射 方式。

通过这种方式,你可以轻松地在 Docker 中管理 Jenkins 环境,提升持续集成和持续交付的效率。

相关推荐
练小杰18 分钟前
【Linux】Ubuntu服务器的安装和配置管理
linux·运维·服务器·经验分享·学习·ubuntu·系统安全
AustinCien1 小时前
2.3做logstash实验
运维·elk
雪下的那么认真1 小时前
Docker 搭建 Gitlab 服务器 (完整详细版)
容器
reddingtons3 小时前
在Ubuntu下通过Docker部署Redis服务器
服务器·ubuntu·docker
秋の水3 小时前
使用Docker Desktop部署GitLab
docker·gitlab
CloudWeGo3 小时前
2025年,微服务架构和大模型能“玩出”什么新花样?
微服务·云原生·llm
秋淮安3 小时前
Web核心、HTTP
运维·服务器
容器魔方3 小时前
「挚文集团」正式加入 Karmada 用户组!携手社区共建多集群生态
云原生·容器·云计算
闲人编程3 小时前
HBase集群搭建与性能测试指南
大数据·docker
阿里云云原生3 小时前
使用 Apache Dubbo 释放 DeepSeek R1 的全部潜力
云原生·dubbo