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

news2025/2/27 9:51:21

@[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.coloradmin.cn/o/2306825.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

布署elfk-准备工作

建议申请5台机器部署elfk&#xff1a; filebeat(每台app)--> logstash(2台keepalived)--> elasticsearch(3台)--> kibana(部署es上)采集输出 处理转发 分布式存储 展示 ELK中文社区: 搜索客&#xff0c;搜索人自己的社区 官方…

微软推出Office免费版,限制诸多,只能编辑不能保存到本地

易采游戏网2月25日独家消息&#xff1a;微软宣布推出一款免费的Office版本&#xff0c;允许用户进行基础文档编辑操作&#xff0c;但限制颇多&#xff0c;其中最引人关注的是用户无法将文件保存到本地。这一举措引发了广泛讨论&#xff0c;业界人士对其背后的商业策略和用户体验…

《ArkTS鸿蒙应用开发入门到实战》—新手小白学习鸿蒙的推荐工具书!

《ArkTS鸿蒙应用开发入门到实战》—新手小白学习鸿蒙的推荐工具书&#xff01; 在科技日新月异的今天&#xff0c;鸿蒙操作系统&#xff08;HarmonyOS&#xff09;作为华为推出的全新操作系统&#xff0c;正迅速进入越来越多的智能设备&#xff0c;成为物联网和智能硬件领域的…

DeepSeek 提示词:高效的提示词设计

&#x1f9d1; 博主简介&#xff1a;CSDN博客专家&#xff0c;历代文学网&#xff08;PC端可以访问&#xff1a;https://literature.sinhy.com/#/?__c1000&#xff0c;移动端可微信小程序搜索“历代文学”&#xff09;总架构师&#xff0c;15年工作经验&#xff0c;精通Java编…

html中的css

css &#xff08;cascading style sheets&#xff0c;串联样式表&#xff0c;也叫层叠样式表&#xff09; css规范一般约定&#xff1a; 1.存放CSS样式文件的目录一般命名为style或css。 2.在项目初期&#xff0c;会把不同类别的样式放于不同的CSS文件&#xff0c;是为了CSS编…

JAVA面试常见题_基础部分_Dubbo面试题(上)

Dubbo 支持哪些协议&#xff0c;每种协议的应用场景&#xff0c;优缺点&#xff1f; • dubbo&#xff1a; 单一长连接和 NIO 异步通讯&#xff0c;适合大并发小数据量的服务调用&#xff0c;以及消费者远大于提供者。传输协议 TCP&#xff0c;异步&#xff0c;Hessian 序列化…

Binder通信协议

目录 一,整体架构 二,Binder通信协议 一,整体架构 二,Binder通信协议

解决应用程序 0xc00000142 错误:完整修复指南

&#x1f4a5; 0xc00000142 错误出现的场景 你是不是遇到这样的情况&#xff1a; &#x1f539; 点击某个软件&#xff0c;突然弹出“应用程序无法正确启动(0xc00000142)” &#xff1f; &#x1f539; 明明安装了所有必要组件&#xff0c;软件却始终打不开&#xff1f; &…

游戏引擎学习第125天

仓库:https://gitee.com/mrxiao_com/2d_game_3 回顾并为今天的内容做准备。 昨天&#xff0c;当我们离开时&#xff0c;工作队列已经完成了基本的功能。这个队列虽然简单&#xff0c;但它能够执行任务&#xff0c;并且我们已经为各种操作编写了测试。字符串也能够正常推送到队…

DeepSeek R1满血+火山引擎详细教程

DeepSeek R1满血火山引擎详细教程 一、安装Cherry Studio。 Cherry Studio AI 是一款强大的多模型 AI 助手,支持 iOS、macOS 和 Windows 平台。可以快速切换多个先进的 LLM 模型,提升工作学习效率。下载地址 https://cherry-ai.com/ 认准官网&#xff0c;无强制注册。 这…

前端依赖nrm镜像管理工具

npm 默认镜像 &#xff1a;https://registry.npmjs.org/ 1、安装 nrm npm install nrm --global2、查看镜像源列表 nrm ls3、测试当前环境下&#xff0c;哪个镜像源速度最快。 nrm test4、 切换镜像源 npm config get registry # 查看当前镜像源 nrm use taobao # 等价于 npm…

ES的简单讲解

功能 &#xff1a; 文档存储 与 文档搜索 特点&#xff1a;比如有一个文档名 “你好” 可以用‘你‘&#xff0c;好&#xff0c;你好都可以搜索到这个文档 ES核心概念 类似于数据库中表的概念&#xff0c;在表的概念下又对数据集合进行了细分 ​ ES_Client查询接口 cpr::R…

进程间通信(一)

1.进程间通信介绍 数组传输&#xff1a;一个进程需要将它的数据发送给另一个进程 资源共享&#xff1a;多个进程之间共享同样的资源 通知事件&#xff1a;一个进程需要向另一个或者一组进程发送信息&#xff0c;通知发送了某种事件(如进程终止时要通知父进程) 进程控制&…

adb的安装

1、概念 &#xff08;1&#xff09;adb&#xff08;android debug bridge&#xff09;安卓调试桥&#xff0c;用于完成电脑和手机之间的通信控制。 &#xff08;2&#xff09;xcode来完成对于ios设备的操控&#xff0c;前提是有个mac电脑。 2、adb的安装 &#xff08;1&…

Nginx 平滑升级/回滚

平滑升级和回滚的前提条件是 nginx 已经安装好&#xff0c;源码安装 nginx 可参考上一篇文章。在上一篇文章的基础上&#xff0c;nginx 已安装好且已启动&#xff0c;目前是 1.24 版本。 一、平滑升级 Nginx 的平滑升级&#xff08;热升级&#xff09;是一种 不中断服务 即可更…

强化学习演进:GRPO 从何而来

强化学习&#xff08;Reinforcement Learning, RL&#xff09;是机器学习的一个分支&#xff0c;其核心是让智能体&#xff08;Agent&#xff09;通过与环境&#xff08;Environment&#xff09;的交互&#xff0c;学习如何采取最优行动&#xff08;Action&#xff09;以最大化…

AOP进阶-02.通知顺序

一.通知顺序 当有多个切面类中的切入点表达式一样时&#xff0c;这些切面类的执行顺序是怎样的呢&#xff1f;如图我们将定义两个切面类&#xff0c;一个MyAspect2&#xff0c;一个MyAspect3&#xff0c;一个MyAspect4。执行后我们发现&#xff0c; 对于目标方法前的通知方法&…

深入探讨K8s资源管理和性能优化

#作者&#xff1a;曹付江 文章目录 前言&#xff1a;1&#xff0e;监控 Kubernetes 集群的资源利用率1.1 Prometheus1.2 Kubernetes 度量服务器1.3 Grafana1.4 自定义指标 2. 识别资源瓶颈2.1. 监控工具2.2. 性能剖析2.3 Kubernetes 事件和日志2.4. 群集自动扩展2.5. 负载测试…

Buildroot 添加自定义模块-内置文件到文件系统

目录 概述实现步骤1. 创建包目录和文件结构2. 配置 Config.in3. 定义 cp_bin_files.mk4. 添加源文件install.shmy.conf 5. 配置与编译 概述 Buildroot 是一个高度可定制和模块化的嵌入式 Linux 构建系统&#xff0c;适用于从简单到复杂的各种嵌入式项目. buildroot的源码中bui…

形式化数学编程在AI医疗中的探索路径分析

一、引言 1.1 研究背景与意义 在数字化时代,形式化数学编程和 AI 形式化医疗作为前沿领域,正逐渐改变着我们的生活和医疗模式。形式化数学编程是一种运用数学逻辑和严格的形式化语言来描述和验证程序的技术,它通过数学的精确性和逻辑性,确保程序的正确性和可靠性。在软件…