docker安装jenkins v2.504.1集群

1 概述

Jenkins是一款开源的、基于Java开发的持续集成(CI)与持续交付(CD)工具,旨在通过自动化构建、测试和部署流程,提升软件开发效率与质量。 ‌

1.1 核心功能与特点

  • 持续集成与交付‌
    Jenkins支持自动化构建、测试和部署,通过频繁集成代码(如每日多次)快速发现错误,确保软件质量。
    提供Pipeline功能,可定义完整的CI/CD流程,覆盖从代码提交到生产环境部署的全生命周期。
    ‌插件生态系统‌

  • 拥有数百个插件
    支持与Git、Maven、Docker等工具集成,扩展性强。插件涵盖版本控制、测试框架、部署平台等,满足多样化需求。

  • 易用性与可扩展性‌
    提供Web界面配置,无需数据库支持,安装简单(支持War包、RPM等方式)。
    支持分布式构建,可在多台机器上并行执行任务,提升效率。

  • 跨平台支持‌
    兼容Windows、Linux、macOS等操作系统,适应不同开发环境。

1.2 应用场景

‌大型项目与微服务架构‌:频繁更新的项目(如微服务)可通过Jenkins实现高效自动化部署。
‌敏捷开发与DevOps‌:作为CI/CD核心工具,支持团队协作与快速迭代。

2 环境

资源说明
jenkins master10.0.11.239、centos 7.9、docker运行、工作目录/home/jenkins/jenkins_home
jenkins slave110.0.3.64、centos 7.9、docker运行、工作目录/home/jenkins/agent

在这里插入图片描述


3 部署

通过docker容器部署一个jenkins master节点和一个jenkins slave节点。部署成功后,可在web控制台看见一个集群。

3.1 jenkins master部署

3.1.1 安装docker

yum install -y yum-utils device-mapper-persistent-data lvm2
yum install yum-utils -y
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum list docker-ce --showduplicates
yum install docker-ce-cli-20.10.5-3.el7 docker-ce-20.10.5-3.el7 -ymkdir -p /etc/docker
cat > /etc/docker/daemon.json << EOF
{"max-concurrent-downloads": 10,"log-driver": "json-file","log-level": "warn","log-opts": {"max-size": "100m","max-file": "3"},"live-restore": true,"exec-opts": ["native.cgroupdriver=systemd"]
}
EOFsystemctl daemon-reload
systemctl enable docker
systemctl restart docker

3.1.2 安装docker-compose

docker run --privileged --rm -v /usr/local/bin/:/dest registry.cn-hangzhou.aliyuncs.com/lwmacct/file:docker-compose-linux-x86_64-v2.2.3-t2022020101
docker-compose -v

3.1.3 安装jenkins master

工作目录宿主机的/home/jenkins/jenkins_home,需要从容器里映射出来。
生成docker-compose.yml文件:

mkdir -p /home/jenkins
cd /home/jenkinscat > docker-compose.yml << EOF
version: "3.8"
services:jenkins:image: jenkins/jenkins:ltscontainer_name: jenkinsrestart: alwaysprivileged: trueuser: rootvolumes:- /home/jenkins/jenkins_home:/var/jenkins_home- /var/run/docker.sock:/var/run/docker.sockports:- "8080:8080"- "50000:50000"environment:TZ: Asia/Shanghai
EOF
docker-compose up -d

在这里插入图片描述

浏览器访问:服务器IP:8080端口。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

[ Manage Jenkins ] —> [ Appearance]中,设置语言为中文。

3.1.4 新增jenkins工作节点的预配置

工作节点的名称设置为slave01,工作目录设置为:/home/jenkins/agent。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
从上图可以看见,工作节点加入jenkins集群的命令很简单。记住这些命令的参数,稍后,参数信息会放到容器的环境变量中。


3.2 jenkins slave部署

slave服务器也需要安装docker组件,命令参考上面的步骤。

3.2.1 创建jenkins slave容器镜像

下载Agent的API如下:

GET /jnlpJars/agent.jar

使用curl命令即可下载:

mkdir -p /tmp/jenkins-agent
cd /tmp/jenkins-agent
export master=10.0.11.239:8080
curl -sO http://$master/jnlpJars/agent.jar

在这里插入图片描述

Dockerfile内容如下:

FROM jenkins/agent:latest-jdk17USER root
ENV TZ=Asia/Shanghai
COPY agent.jar /home/jenkins
RUN chown jenkins:jenkins /home/jenkins/agent.jarRUN sed -i "s@http://\(deb\|security\).debian.org@https://mirrors.aliyun.com@g" /etc/apt/sources.list.d/debian.sources
RUN apt-get update && apt-get install -y \git \maven \curl \&& rm -rf /var/lib/apt/lists/*USER jenkins
CMD java -jar agent.jar -url $JENKINS_MASTER_URL -secret $JENKINS_SECRET -name $JENKINS_AGENT_NAME -webSocket -workDir $JENKINS_WORKDIR

在这里插入图片描述
使用docker build命令即可,这里有一个现成的容器镜像:

docker pull swr.cn-south-1.myhuaweicloud.com/migrator/jenkins-agent:latest-jdk17

3.2.2 创建jenkins slave容器

将slave01工作节点加入jenkins集群,依据节点加入的预配置信息填充下面的环境变量:

useradd -u 1000 -s /sbin/nologin jenkins
mkdir -p /home/jenkins/agent
chown -R jenkins:jenkins /home/jenkinsexport JENKINS_MASTER_URL=http://10.0.11.239:8080/
export JENKINS_SECRET=**************在web控制台复制得到的密钥**************
export JENKINS_AGENT_NAME=slave01
export JENKINS_WORKDIR=/home/jenkins/agentdocker run -d \--name jenkins-agent-test \-e JENKINS_MASTER_URL=$JENKINS_MASTER_URL \-e JENKINS_SECRET=$JENKINS_SECRET \-e JENKINS_AGENT_NAME=$JENKINS_AGENT_NAME \-e JENKINS_WORKDIR=$JENKINS_WORKDIR \
swr.cn-south-1.myhuaweicloud.com/migrator/jenkins-agent:latest-jdk17

在这里插入图片描述
slave容器启动后依据环境变量的信息加入jenkins集群,在jenkins控制台可见slave工作节点已成功连接到master节点:
在这里插入图片描述

4 小结

本文通过实战介绍利用docker容器部署jenkins集群。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/903890.shtml

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

相关文章

5月2日日记

今天看了爸爸推荐的书&#xff0c;叫&#xff1a;“高效能人士的七个习惯” 现在刚看完50页&#xff0c;感觉确实有点东西&#xff0c; 七个习惯分别是&#xff1a; 个人层面1积极主动 2要事第一 3以终为始 社交层面 4知彼解己5 统效综合 6双赢思维 7不断更新 目前还没有…

Aws S3上传优化

上传大约 3.4GB 的 JSON 文件&#xff0c;zip算法压缩后约为 395MB&#xff0c;上传至 S3 效率优化&#xff0c;有一些优化方案可以提高上传速率。下面是几种可能的优化方式&#xff0c;包括选择压缩算法、调整上传方式、以及其他可能的方案。 方案 1. 选择更好的压缩算法 压…

CAD(计算机辅助设计)基础知识点整理

以下是CAD&#xff08;计算机辅助设计&#xff09;的基础知识点整理&#xff0c;涵盖核心概念、操作技巧和行业规范&#xff0c;适合新手学习和参考&#xff1a; 一、CAD基本概念 什么是CAD • 利用计算机技术进行设计和绘图的工具&#xff0c;广泛应用于机械、建筑、电子等领…

重构之道:识别并替换不合适使用的箭头函数

1、引言 JavaScript 自 ES6 引入了箭头函数(Arrow Function)后,因其简洁的语法和对 this 的词法绑定机制,迅速成为开发者喜爱的写法之一。然而,并不是所有场景都适合使用箭头函数。 在实际开发中,我们常常会因为追求代码简洁而忽视其潜在问题,例如: this 指向错误不适…

[英语单词] from under

最近在看RCU的资料&#xff0c;读到下面的一句&#xff0c;感觉总是特别怪怪的&#xff0c;就是从单词的组合角度&#xff0c;记录一下。 Use rcu_read_lock() and rcu_read_unlock() to ensure that the structure does not get deleted out from under us。 意思是我们还在使…

Python 中 DAO 层使用泛型的探索

方法一&#xff1a; from types import UnionType from typing import TypeVar, Generic, TypeModelT TypeVar(ModelT)def _new_cls_with_grm_generic_args(cls, __item):new_cls type(f"{cls.__name__}[{__item.__name__}]", (cls,), {})new_cls._grm_generic_ar…

Cesium 环境搭建

一、前提条件 1. **安装 Node.js** - 访问 [Node.js 官方网站](https://nodejs.org/)&#xff0c;下载并安装适合你操作系统的版本。Node.js 用于运行本地开发服务器和安装依赖。 2. **安装 Vue CLI** - Vue CLI 是一个用于快速开发 Vue.js 项目的工具。在终端中运行以下…

DarkGS:论文解读与全流程环境配置及数据集测试【基于Ubuntu20.04 】【2025最新实战无坑版!!】

一、背景及意义 DarkGS是一个创新性的研究项目&#xff0c;旨在解决机器人在黑暗或低光照环境中探索的问题。传统的3D重建和视觉定位系统在光照条件不佳时表现不佳&#xff0c;这严重限制了机器人在黑暗环境中的应用&#xff0c;如夜间救援、深海探索或洞穴勘测等场景。 这项工…

(八)RestAPI 毛子(Unit Testing/Integration)

文章目录 项目地址一、Unit Testing1.1 创建X unit 测试项目1. 创建项目目录2. 管理包1.2 创建CreateEntryDtoValidator测试1.3 创建CreateEntryDtoValidator测试二、Integration test2.1 创建Integration test环境1. 安装所需要的包2.2 配置基础设置1. 数据库链接DevHabitWebA…

设计模式--桥接模式详解

桥接模式&#xff08;bridge pattern&#xff09; 桥接模式时将抽象部分与它的实现部分分离&#xff0c;使他们可以独立的变化。它是一种对象结构型模式&#xff0c;又称为柄体&#xff08;Handle and Body&#xff09;模式或者接口&#xff08;interface&#xff09;模式&…

关于 live555延迟优化之缓存区优化“StreamParser::afterGettingBytes() warning: read”” 的解决方法

若该文为原创文章&#xff0c;转载请注明原文出处 本文章博客地址&#xff1a;https://hpzwl.blog.csdn.net/article/details/146354088 长沙红胖子Qt&#xff08;长沙创微智科&#xff09;博文大全&#xff1a;开发技术集合&#xff08;包含Qt实用技术、树莓派、三维、OpenCV…

Vite 动态导入静态资源与自动依赖发现实战解析

一、Vite 动态导入静态资源的实现方案 在 Vite 中&#xff0c;动态加载图片、JSON 等静态资源是高频需求&#xff0c;但动态路径拼接可能导致构建失败或资源未识别。以下结合示例代码&#xff0c;分析三种实现方案&#xff1a; 1. 方案一&#xff1a;new URL 动态路径转换 通…

在matlab中使用UAV123官方toolkits测试自己的数据集

一、前言 最近需要将自己的跟踪代码在自己拍摄的数据集上进行测试&#xff0c;这里我选择使用 UAV123 官方 toolkits 进行配置。首先需要搞清楚这部分代码是如何运行的&#xff0c;精度图和成功率图是如何绘制出来的&#xff0c;然后再将自己的数据集加进去进行测试。 二、UA…

9.idea中创建springboot项目_jdk1.8

9. idea中创建springboot项目_jdk1.8 步骤 1&#xff1a;打开 IntelliJ IDEA 并创建新项目 启动 IntelliJ IDEA。在欢迎界面&#xff0c;点击 New Project&#xff08;或通过菜单栏 File > New > Project&#xff09;。 步骤 2&#xff1a;选择 Maven 项目类型 在左侧…

SpringAI实现AI应用-搭建知识库

SpringAI实战链接 1.SpringAl实现AI应用-快速搭建-CSDN博客 2.SpringAI实现AI应用-搭建知识库-CSDN博客 概述 想要使用SpringAI搭建知识库&#xff0c;就要使用SpringAI中的TikaDocumentReader&#xff0c;它属于ETL&#xff08;提取、转换、加载&#xff09;框架中的提取&…

内网服务器映射到公网上怎么做?网络将内网服务转换到公网上

如何将内网映射到公网&#xff1f;本地局域网的网络下部署的内网服务地址转换到公网上连接访问是大家比较关注的问题&#xff0c;特别是在无公网IP使用的情况下&#xff0c;很多人不知道怎么做。 在没有公网 IP 的情况下&#xff0c;要将内网映射到公网&#xff0c;以便外网能…

intellij idea最新版git开启Local Changes

习惯了在idea的git插件里&#xff0c;查看项目已修改的文件&#xff0c;但是新版idea默认不展示了&#xff0c;用起来很难受。 参考网上教程开启方法如下&#xff1a; 1. 确保安装Git Modal Commit Interface插件并开启该插件 2. 在Advanced Settings开启Use Modal Commit In…

​​智能制造中的预测性维护:基于深度学习的设备故障预测​​

智能制造中的预测性维护:基于深度学习的设备故障预测 引言 在智能制造领域,设备突发故障可能导致巨大的经济损失。传统维护方式(如定期检修或事后维修)往往效率低下且成本高昂。预测性维护(Predictive Maintenance, PdM)通过实时监测设备状态并预测潜在故障,能够显著减…

DeepSeek+即梦:AI视频创作从0到1全突破

目录 一、开启 AI 视频创作大门&#xff1a;前期准备1.1 注册与登录1.2 熟悉工具界面1.3 硬件与网络要求 二、用 DeepSeek 构思视频脚本2.1 明确创作主题与目标2.2 编写优质提示词2.3 生成并优化脚本 三、即梦 AI 实现画面生成3.1 文生图基础操作3.2 调整参数提升画质3.3 保持人…

初始化列表详解

1.类中包含以下成员&#xff0c;必须放在初始化列表位置进行初始化&#xff1a; 1. 引用成员变量 2.const成员变量 3. 自定义类型成员(且该类没有默认构造函数时 ) 2. 成员变量在类中声明次序就是其在初始化列表中的初始化顺序&#xff0c;与其在初始化列表中的先后次序无关…