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

server/2025/2/28 1:33:50/

@[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 数据和日志能够持久化存储。

#!/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 地址。

# 运行 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 文件。

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

    <jenkinsUrl>http://localhost:8081/</jenkinsUrl>
    

优点:

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

缺点:

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

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

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

# 运行 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 客户端来实现:

# 安装 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 环境,提升持续集成和持续交付的效率。


http://www.ppmy.cn/server/171178.html

相关文章

在Anaconda的虚拟环境中安装R,并在vscode中使用

在 Anaconda 的虚拟环境中使用 R&#xff0c;并且希望在 VS Code 中同时使用 Python 和 R&#xff0c;确实需要同时安装 Python 和 R。这是因为 VS Code 的 Jupyter 插件和内核管理依赖于 Python&#xff0c;而 R 则作为 Jupyter 的另一个内核运行。 以下是具体的操作步骤和逻…

JavaWeb后端基础(1)

我直接从后端开始做笔记&#xff0c;前面的HTML、CSS、JS、Vue、Ajax先跳过&#xff0c;直接从maven开始 我只是简单的记录大致 帮助回想 不适合进行学习 Maven Maven的作用&#xff1a;依赖管理、项目构建、统一项目结构 依赖管理&#xff1a;方便快捷的管理项目依赖的资…

基于springboot+vue的拼夕夕商城

一、系统架构 前端&#xff1a;vue3 | ant-design 后端&#xff1a;springboot | mybatis-plus 环境&#xff1a;jdk1.8 | mysql | maven | nodejs 二、代码及数据 三、功能介绍 01. web端-注册 02. web端-登录 03. web端-商品列表页 04. web端-商品明…

angular使用IndexedDb实现增删改查sql

说明&#xff1a;我听说前端有一款数据库&#xff0c;叫IndexedDb数据库&#xff0c;可以存储超大的文件和数据&#xff0c;大约有250M&#xff0c;有了这个&#xff0c;就可以在浏览器里面&#xff0c;存储超大的数据&#xff0c; 事实上IndexedDb存储的数据&#xff0c;存在浏…

【Redis 原理】通信协议 内存回收

文章目录 通信协议--RESP内存回收内存过期策略惰性删除周期删除 内存淘汰策略 通信协议–RESP Redis是一个CS架构的软件&#xff0c;通信一般分两步&#xff08;不包括pipeline和PubSub&#xff09;&#xff1a; 客户端&#xff08;client&#xff09;向服务端&#xff08;se…

计算机主板南桥与北桥核心架构概论

在计算机主板的设计中&#xff0c;“南北桥”架构曾是非常重要的组成部分&#xff0c;它负责管理和协调各类硬件设备之间的通信与协作。随着技术的进步&#xff0c;南北桥架构逐渐被更先进的集成方案所取代&#xff0c;但了解其工作原理对于理解计算机硬件发展历史仍然非常有意…

基于Springboot的小说网站【附源码】

基于Springboot的小说网站 效果如下&#xff1a; 系统主页面 书库信息页面 书籍详情页面 推荐信息页面 小说推荐页面 书库信息页面 小说排行榜页面 系统管理页面 研究背景 随着互联网技术的快速发展&#xff0c;网络文学逐渐成为一种新兴的文学形式&#xff0c;吸引了大量读…

【无标题】docker-compose ps 和dokcer ps的区别

docker-compose ps 和 docker ps 是两个用于查看 Docker 容器状态的命令&#xff0c;但它们在功能和显示的信息上有所区别&#xff1a; docker ps 基本功能&#xff1a; Docker ps 是 Docker 的原生命令&#xff0c;用于列出当前主机上运行的所有 Docker 容器。 显示信息&…