当前位置: 首页 > article >正文

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

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

相关文章:

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

[TOC](Docker 部署 Jenkins持续集成(CI)工具) 前言 Jenkins 是一个流行的开源自动化工具&#xff0c;广泛应用于持续集成&#xff08;CI&#xff09;和持续交付&#xff08;CD&#xff09;的环境中。通过 Docker 部署 Jenkins&#xff0c;可以简化安装和配置过程&#xff0c;并…...

布署elfk-准备工作

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

uniapp 小程序如何实现大模型流式交互?前端SSE技术完整实现解析

文章目录 一、背景概述二、核心流程图解三、代码模块详解1. UTF-8解码器&#xff08;处理二进制流&#xff09;2. 请求控制器&#xff08;核心通信模块&#xff09;3. 流式请求处理器&#xff08;分块接收&#xff09;4. 数据解析器&#xff08;处理SSE格式&#xff09;5. 回调…...

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

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

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

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

销售成交九步思维魔方

销售成交九步思维魔方 点 一、确定需求 原则1&#xff1a;问题是需求的前身原则2&#xff1a;基于问题才做决定原则3&#xff1a;人只解决大的问题 二、塑造价值 USP 利益 快乐 痛苦 价值 线 三、销售准备 精神上的准备 体能上的准备 产品知识准备 彻底了解顾客背景 …...

橄榄球、棒球项目排名·棒球1号位

美国四大体育联盟按照规模、影响力等因素综合排名&#xff0c;通常认为是&#xff1a; 1. NFL&#xff08;国家橄榄球联盟&#xff09;&#xff1a;成立于1920年&#xff0c;是北美四大职业体育运动联盟之首&#xff0c;也是世界上最大的职业美式橄榄球联盟。由32支球队组成&am…...

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

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

AI硬件加速的核心:深入探讨AI加速芯片模组的设计与应用

随着人工智能应用的普及&#xff0c;传统的计算架构已无法满足大规模深度学习模型训练和推理的需求。为了加速计算过程并提高能效&#xff0c;AI加速芯片应运而生。本文将介绍AI加速芯片模组的关键技术、发展趋势以及在各类应用中的重要性。 AI加速芯片模组的定义与构成 AI加速…...

LangChain:Models、Prompts、Indexes、Memory、Chains、Agents。MaxKB

LangChain:Models、Prompts、Indexes、Memory、Chains、Agents 在LangChain框架中,Models、Prompts、Indexes、Memory、Chains、Agents是六大核心抽象概念,它们各自承担独特功能,相互协作以助力开发者基于大语言模型构建高效智能应用。 Models(模型):指代各类大语言模型…...

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;并且我们已经为各种操作编写了测试。字符串也能够正常推送到队…...

[免单统计]

免单统计 真题目录: 点击去查看 E 卷 100分题型 题目描述 华为商城举办了一个促销活动,如果某顾客是某一秒内最早时刻下单的顾客(可能是多个人),则可以获取免单。 请你编程计算有多少顾客可以获取免单。 输入描述 输入为 n 行数据,每一行表示一位顾客的下单时间 以(…...

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…...

【前端】Axios AJAX Fetch

不定期更新&#xff0c;建议关注收藏点赞。 目录 AxiosAJAXCORS 允许跨域请求 Fetch Axios axios 是一个基于 Promise 的 JavaScript HTTP 客户端&#xff0c;用于浏览器和 Node.js 中发送 HTTP 请求。它提供了一个简单的 API 来发起请求&#xff0c;并处理请求的结果。axios …...

【爬虫】request库

文章目录 发送请求响应对象响应数据的方式中文乱码问题响应对象的其他属性或方法 发送带参数的请求headers和查询参数 Requests——发送http请求&#xff0c;获取响应数据 首先&#xff0c;请确保&#xff1a; 已安装 RequestsRequests 是最新的 让我们从一些简单的示例开始…...

ES的简单讲解

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

进程间通信(一)

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

人工智能中的特征是什么?

什么是人工智能中的特征&#xff1f; 在人工智能中&#xff0c;特征&#xff08;feature&#xff09;是指从原始数据中提取出的、能够代表数据关键信息并用于模型训练的属性或变量。特征通常是对原始数据的抽象或转换&#xff0c;目的是捕捉数据中的模式、结构或相关性&#x…...

MongoDB私人学习笔记

俗话说“好记性不如烂笔头”&#xff0c;编程的海洋如此的浩大&#xff0c;养成做笔记的习惯是成功的一步&#xff01; 此笔记主要是ZooKeeper3.4.9版本的笔记&#xff0c;并且笔记都是博主自己一字一字编写和记录&#xff0c;有错误的地方欢迎大家指正。 一、基础知识&#xf…...

大数据SQL调优专题——调优切入

引入 我们都知道大数据的SQL优化&#xff0c;并非一蹴而就的简单任务&#xff0c;而是一个涉及多个环节的复杂过程。从需求提出到最终交付&#xff0c;任何一个环节的微小偏差都可能影响最终成果。 虽然我们的专栏名字叫大数据SQL调优&#xff0c;但是实际调优并不是简单对SQ…...

Idea java项目结构介绍

一般来说&#xff0c;一个典型的 IntelliJ IDEA Java 项目具有特定的结构&#xff0c;以下是对其主要部分的介绍&#xff1a; 项目根目录 项目的最顶层目录&#xff0c;包含了整个项目的所有文件和文件夹&#xff0c;通常以项目名称命名。在这个目录下可以找到.idea文件夹、.g…...

adb的安装

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

React + TypeScript 数据模型驱动数据字典生成示例

React TypeScript 数据模型驱动数据字典生成示例 引言&#xff1a;数据字典的工程价值 在现代化全栈开发中&#xff0c;数据字典作为业务实体与数据存储的映射桥梁&#xff0c;直接影响系统可维护性与团队协作效率。传统手动维护字典的方式存在同步成本高和版本管理混乱两大痛…...

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;以最大化…...