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

Jenkins 环境搭建---基于 Docker

前期准备

提前安装jdk、maven、nodeJs(如果需要的话)

创建 jenkins 环境目录,用来当做挂载卷

/data/jenkins/

一:拉取 Jenkins  镜像

docker pull jenkins/jenkins:lts

二:设置 Jenkins挂载目录

mkdir -p ~/jenkins_home
sudo chown 1000:1000 ~/jenkins_home

三:启动 Jenkins 容器

docker run -p 80:8080 -p 81:50000 \--restart always \-e JAVA_OPTS="-Djava.io.tmpdir=/xxxx/tmp" \-v /data/jenkins/tmp:/xxxx/tmp \ -v /data/jenkins/data:/var/jenkins_home\-v /data/jenkins/apache-maven-3.8.8/:/opt/maven/apache-maven-3.8.8 \-v /data/jenkins/repository:/opt/maven/repository \-v /data/jenkins/jdk1.8.0_431:/opt/jdk/jdk1.8.0_431 \-v /data/jenkins/node-v18.18.0-linux-x64:/opt/node/node-v18.18.0-linux-x64 \-v /var/run/docker.sock:/var/run/docker.sock \-v /usr/bin/docker:/usr/bin/docker \-v /etc/localtime:/etc/localtime \--name jenkins \-d jenkins/jenkins:lts

1. 端口映射

-p 80:8080 -p 81:50000
  • -p 80:8080:将主机的 80 端口映射到容器的 8080 端口,这通常是 Jenkins 的 Web 界面端口。
  • -p 81:50000:将主机的 81 端口映射到容器的 50000 端口,这是 Jenkins 用于节点通信的端口。

2. 重启策略

--restart always

--restart always:确保容器在崩溃或重启后自动重启。此设置适用于生产环境中的容器,确保容器始终运行。

3. 环境变量

-e JAVA_OPTS="-Djava.io.tmpdir=/xxxx/tmp"

-e JAVA_OPTS="-Djava.io.tmpdir=/xxxx/tmp":设置 Java 启动参数,指定临时文件目录为 /xxxx/tmp。这对于自定义 Jenkins 临时文件存储位置很有用。

4. 挂载卷

-v /data/jenkins/tmp:/xxxx/tmp
-v /data/jenkins/data:/var/jenkins_home
-v /data/jenkins/apache-maven-3.8.8/:/opt/maven/apache-maven-3.8.8
-v /data/jenkins/repository:/opt/maven/repository
-v /data/jenkins/jdk1.8.0_431:/opt/jdk/jdk1.8.0_431
-v /data/jenkins/node-v18.18.0-linux-x64:/opt/node/node-v18.18.0-linux-x64
-v /var/run/docker.sock:/var/run/docker.sock
-v /usr/bin/docker:/usr/bin/docker
-v /etc/localtime:/etc/localtime
  • -v /data/jenkins/tmp:/xxxx/tmp:将宿主机 /data/jenkins/tmp 目录挂载到容器中的 /xxxx/tmp,用于存储临时文件。
  • -v /data/jenkins/data:/var/jenkins_home:将宿主机 Jenkins 数据存储目录 /data/jenkins/data 挂载到容器中的 Jenkins 主目录 /var/jenkins_home,用于持久化 Jenkins 配置和数据。
  • -v /data/jenkins/apache-maven-3.8.8/:/opt/maven/apache-maven-3.8.8:将 Maven 版本 3.8.8 的目录挂载到容器中,使 Jenkins 使用宿主机上的 Maven。
  • -v /data/jenkins/repository:/opt/maven/repository:将宿主机上的 Maven 本地仓库挂载到容器中的相应路径。
  • -v /data/jenkins/jdk1.8.0_431:/opt/jdk/jdk1.8.0_431:将宿主机上的 JDK 1.8 挂载到容器中,确保 Jenkins 使用正确的 JDK。
  • -v /data/jenkins/node-v18.18.0-linux-x64:/opt/node/node-v18.18.0-linux-x64:将 Node.js 18.x 挂载到容器中,使 Jenkins 可以使用此版本的 Node.js。
  • -v /var/run/docker.sock:/var/run/docker.sock:使容器能够与宿主机上的 Docker 守护进程通信,允许 Jenkins 运行 Docker 容器。
  • -v /usr/bin/docker:/usr/bin/docker:将宿主机的 Docker 二进制文件挂载到容器中,以便 Jenkins 使用宿主机的 Docker 运行命令。
  • -v /etc/localtime:/etc/localtime:同步容器的时间与宿主机的时间。

四:Jenkins 相关配置

1. 解锁 Jenkins

首次登录 Jenkins 控制台时,你需要解锁 Jenkins,通常会显示一个页面提示你输入解锁密钥。

  • 步骤:
    • 查找解锁密钥文件,通常文件位于宿主机的 /var/jenkins_home/secrets/initialAdminPassword
    • 可以通过以下命令查看密钥:
      cat /data/jenkins/data/secrets/initialAdminPassword
      

2. 安装推荐插件

解锁后,Jenkins 会引导你选择是否安装推荐的插件,建议选择安装 推荐插件,它包括许多常用的插件,如 Git、Maven 等。

  • 步骤:
    • 在解锁后页面中选择 Install suggested plugins,Jenkins 会自动下载并安装所有推荐插件。

3. 创建管理员用户

在安装完插件后,Jenkins 会让你创建一个管理员用户。

  • 步骤:
    • 填写管理员用户名、密码、全名和电子邮件地址。
    • 如果不想创建用户,可以选择 Continue as Admin(以管理员身份继续)。

4. 配置系统设置

接下来,你可以配置 Jenkins 的一些全局系统设置,包括 JDK、Maven 和 Node.js 等工具的路径。

配置 JDK
  1. 进入 Jenkins 控制台,点击 Manage Jenkins(管理 Jenkins)。
  2. 选择 Global Tool Configuration(全局工具配置)。
  3. JDK 部分,配置你在 Docker 中挂载的 JDK 1.8 路径:
    • JDK name:给 JDK 取个名字,比如 jdk1.8
    • JAVA_HOME:填写 JDK 路径,例如 /opt/jdk/jdk1.8.0_431
  4. 点击保存。
配置 Maven
  1. Global Tool Configuration 页面,找到 Maven 部分。
  2. 配置你挂载的 Maven 3.8.8 目录:
    • Maven name:可以设为 maven3.8.8
    • MAVEN_HOME:填写 Maven 的路径,例如 /opt/maven/apache-maven-3.8.8
  3. 点击保存。
配置 Node.js
  1. Global Tool Configuration 页面,找到 NodeJS 部分。
  2. 配置你挂载的 Node.js 版本:
    • Name:可以设为 node-v18.18.0
    • NodeJS installation directory:填写 Node.js 路径,例如 /opt/node/node-v18.18.0-linux-x64
  3. 点击保存

5. 配置 Jenkins 插件

根据你的需求,你可能需要安装一些特定的插件,下面是常见的一些插件配置:

安装常用插件

你可以在 Manage Jenkins -> Manage Plugins 中安装以下插件:

  • Git Plugin:用于 Git 仓库的集成。
  • Docker Plugin:如果你打算在 Jenkins 中运行 Docker 容器。
  • Maven Integration Plugin:用于支持 Maven 构建。
  • NodeJS Plugin:支持 Node.js 构建。

配置 Docker 插件

  1. Manage Jenkins -> Configure System 中找到 Docker 配置部分。
  2. Docker Hosts 部分,添加 Docker 主机连接配置,通常配置如下:
    • Docker Host URIunix:///var/run/docker.sock(这是你在 docker run 命令中挂载的路径)。
    • 点击 Test Connection 测试连接是否成功

6:创建连接Git 凭据,用于拉取代码用

五:创建任务

1:点击 Dashboard 新视图

比如开发环境视图

2:点击 Dashboard 新建任务

新建后端maven任务

3:选择git凭据

4:选择代码url和分支

6:代码构建完成后,执行相关shell

根据每个项目不同,执行不同的命令

比如传统服务直接执行 java -jar 等命令直接启动服务

比如K8S、Docker这种云服务,可写打包镜像、推送镜像到 Docker 仓库、执行k8s相关命令拉取镜像进行容器启动等

然后点击完成

7:构建代码

右键找到刚才新建的任务,即可进行构建

相关文章:

Jenkins 环境搭建---基于 Docker

前期准备 提前安装jdk、maven、nodeJs(如果需要的话) 创建 jenkins 环境目录,用来当做挂载卷 /data/jenkins/ 一:拉取 Jenkins 镜像 docker pull jenkins/jenkins:lts 二:设置 Jenkins挂载目录 mkdir -p ~/jen…...

如何在自定义组件中使用v-model实现双向绑定

在 Vue 2 中,v-model 是双向数据绑定的语法糖,它默认将 value 作为 prop 传入组件,并通过监听 input 事件来更新父组件的数据。若要在自定义组件中实现 v-model 的双向绑定,需遵循以下步骤: 1. 基本实现:va…...

Ubuntu 下 nginx-1.24.0 源码分析 - ngx_pool_t 类型

ngx_pool_t 定义在 src/core/ngx_core.h typedef struct ngx_pool_s ngx_pool_t; ngx_pool_s 定义在 src/core/ngx_palloc.h struct ngx_pool_s {ngx_pool_data_t d;size_t max;ngx_pool_t *current;ngx_chain_t *chain;ng…...

如何在 ubuntu 上使用 Clash 与 docker 开启代理拉起

如何在 ubuntu 上使用 Clash https://github.com/doreamon-design/clash/releases上面是clash 的地址 clash_2.0.24_linux_386.tar.gz 下载 386 的 如果你的电脑是inter tar -xzvf clash_2.0.24_linux_386.tar.gz 启动 ./clash 然后会在电脑上生成一个config的文件 /home/xxx/…...

linux tcpdump抓包

参数说明: -i 指定网卡 -w 指定保存文件 -s0 完整抓包 -G 指定间隔时长(秒) -C 指定每个文件大小(M) 用法1: 指定端口输出到指定文件 tcpdump -i em3 -w 182910.pcap 用法2: 指定端口每10分钟输出到不同文件 tcpdump -i em3 -s0 -G 600 -w %Y_%m%d_%H%M_%S.pcap 用法3: 指…...

PLSQL连接Oracle 19c报错ORA-28040

PLSQL连接Oracle 19c报错ORA-28040 原因解析解决办法原因解析 使用PLSQL Developer连接19c数据库报错: ORA-28040: No matching authentication protocol报错信息解析: [oracle@ora19c ~]$ oerr ora 2804028040, 0000, "No matching authentication protocol" /…...

汽车免拆诊断案例 | 2010 款路虎揽胜车空调偶尔出风异常

故障现象  一辆2010款路虎揽胜车,搭载5.0 L发动机,累计行驶里程约为16万km。车主反映,接通空调开关后,有时出风忽大忽小,有时不出风,有时要等2 min左右才出风;有时两三天出现一次,…...

音视频入门基础:RTP专题(9)——FFmpeg接收RTP流的原理和内部实现

一、引言 由《音视频入门基础:RTP专题(2)——使用FFmpeg命令生成RTP流》可以知道,推流端通过下面FFmpeg命令可以将一个媒体文件转推RTP,生成RTP流: ffmpeg -re -stream_loop -1 -i input.mp4 -vcodec cop…...

Nginx 安装及配置教程(Windows)【安装】

文章目录 一、 Nginx 下载 1. 官网下载2. 其它渠道 二、 Nginx 安装三、 配置四、 验证五、 其它问题 1. 常用命令2. 跨域问题 软件 / 环境安装及配置目录 一、 Nginx 下载 1. 官网下载 安装地址:https://nginx.org/en/download.html 打开浏览器输入网址 htt…...

《跟李沐学 AI》AlexNet论文逐段精读学习心得 | PyTorch 深度学习实战

前一篇文章,使用 AlexNet 实现图片分类 | PyTorch 深度学习实战 本系列文章 GitHub Repo: https://github.com/hailiang-wang/pytorch-get-started 本篇文章内容来自于学习 9年后重读深度学习奠基作之一:AlexNet【下】【论文精读】】的心得。 《跟李沐…...

嵌入式0xDEADBEEF

在嵌入式系统中,0xDEADBEEF 是一个常见的“魔数”(magic number),通常用于调试和内存管理。它的含义和用途如下: 1. 调试用途 未初始化内存的标记:在调试时,0xDEADBEEF 常用于标记未初始化或已…...

B+树作为数据库索引结构的优势对比

MySQL作为数据库,它的功能就是做数据存储和数据查找;使用B树作为索引结构是为了实现高效的查找、插入和删除操作。 B树的查找、插入、删除的复杂度都为 O(log n),它是一个多叉树的结构,能兼顾各种操作的效率的数据结构。如果使用…...

自适应SQL计划管理(Adaptive SQL Plan Management)在Oracle 12c中的应用

在Oracle Database 12c Release 1 (12.1)版本中,引入了对SQL计划管理(SPM)功能的增强,特别是关于SQL计划基线的自动进化机制。这一改进允许数据库更加智能地管理和优化SQL查询的执行计划,确保即使数据分布发生变化&…...

什么是DeFi (去中心化金融)

DeFi (去中心化金融) 概述 💰 1. DeFi 基础概念 1.1 什么是 DeFi? DeFi 是建立在区块链上的金融服务生态系统,它: 无需中心化中介开放且透明无需许可即可参与代码即法律 1.2 DeFi 的优势 开放性:任何人都可以参与…...

计算机毕业设计Python农产品推荐系统 农产品爬虫 农产品可视化 农产品大数据(源码+LW文档+PPT+讲解)

温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 作者简介:Java领…...

LLM论文笔记 15: Transformers Can Achieve Length Generalization But Not Robustly

Arxiv日期:2024.2.14机构:Google DeepMind / University of Toronto 关键词 长度泛化位置编码数据格式 核心结论 1. 实验结论:十进制加法任务上的长度泛化最佳组合: FIRE位置编码 随机化位置编码 反向数据格式 索引提示&…...

SpringAI做对了什么

开发|界面|引擎|交付|副驾——重写全栈法则:AI原生的倍速造应用流 你好,这里是nine[谈架构]系列。 欢迎关注评论私信交流~ SpringAI 在 AI 编程领域延续了Spring的诸多优势,从易于集成、到通用…...

DeepSeek预测25考研分数线

25考研分数马上要出了。 目前,多所大学已经陆续给出了分数查分时间,综合往年情况来看,每年的查分时间一般集中在2月底。 等待出成绩的日子,学子们的心情是万分焦急,小编用最近爆火的“活人感”十足的DeepSeek帮大家预…...

C++笔记之标准库中的std::copy 和 std::assign 作用于 std::vector

C++笔记之标准库中的std::copy 和 std::assign 作用于 std::vector code review! 文章目录 C++笔记之标准库中的std::copy 和 std::assign 作用于 std::vector1. `std::copy`1.1.用法1.2.示例2.`std::vector::assign`2.1.用法2.2.示例3.区别总结4.支持assign的容器和不支持ass…...

文件IO(20250217)

1. 文件IO 系统调用Linux内核提供的文件操作接口 1. 打开文件 open 2. 读写文件 read/write 3. 关闭文件 close 1.1 open函数 #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h>int open(const char *pathname, int flags); int ope…...

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造&#xff0c;完美适配AGV和无人叉车。同时&#xff0c;集成以太网与语音合成技术&#xff0c;为各类高级系统&#xff08;如MES、调度系统、库位管理、立库等&#xff09;提供高效便捷的语音交互体验。 L…...

基于距离变化能量开销动态调整的WSN低功耗拓扑控制开销算法matlab仿真

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.算法仿真参数 5.算法理论概述 6.参考文献 7.完整程序 1.程序功能描述 通过动态调整节点通信的能量开销&#xff0c;平衡网络负载&#xff0c;延长WSN生命周期。具体通过建立基于距离的能量消耗模型&am…...

如何在看板中体现优先级变化

在看板中有效体现优先级变化的关键措施包括&#xff1a;采用颜色或标签标识优先级、设置任务排序规则、使用独立的优先级列或泳道、结合自动化规则同步优先级变化、建立定期的优先级审查流程。其中&#xff0c;设置任务排序规则尤其重要&#xff0c;因为它让看板视觉上直观地体…...

YSYX学习记录(八)

C语言&#xff0c;练习0&#xff1a; 先创建一个文件夹&#xff0c;我用的是物理机&#xff1a; 安装build-essential 练习1&#xff1a; 我注释掉了 #include <stdio.h> 出现下面错误 在你的文本编辑器中打开ex1文件&#xff0c;随机修改或删除一部分&#xff0c;之后…...

ServerTrust 并非唯一

NSURLAuthenticationMethodServerTrust 只是 authenticationMethod 的冰山一角 要理解 NSURLAuthenticationMethodServerTrust, 首先要明白它只是 authenticationMethod 的选项之一, 并非唯一 1 先厘清概念 点说明authenticationMethodURLAuthenticationChallenge.protectionS…...

3403. 从盒子中找出字典序最大的字符串 I

3403. 从盒子中找出字典序最大的字符串 I 题目链接&#xff1a;3403. 从盒子中找出字典序最大的字符串 I 代码如下&#xff1a; class Solution { public:string answerString(string word, int numFriends) {if (numFriends 1) {return word;}string res;for (int i 0;i &…...

Redis数据倾斜问题解决

Redis 数据倾斜问题解析与解决方案 什么是 Redis 数据倾斜 Redis 数据倾斜指的是在 Redis 集群中&#xff0c;部分节点存储的数据量或访问量远高于其他节点&#xff0c;导致这些节点负载过高&#xff0c;影响整体性能。 数据倾斜的主要表现 部分节点内存使用率远高于其他节…...

处理vxe-table 表尾数据是单独一个接口,表格tableData数据更新后,需要点击两下,表尾才是正确的

修改bug思路&#xff1a; 分别把 tabledata 和 表尾相关数据 console.log() 发现 更新数据先后顺序不对 settimeout延迟查询表格接口 ——测试可行 升级↑&#xff1a;async await 等接口返回后再开始下一个接口查询 ________________________________________________________…...

腾讯云V3签名

想要接入腾讯云的Api&#xff0c;必然先按其文档计算出所要求的签名。 之前也调用过腾讯云的接口&#xff0c;但总是卡在签名这一步&#xff0c;最后放弃选择SDK&#xff0c;这次终于自己代码实现。 可能腾讯云翻新了接口文档&#xff0c;现在阅读起来&#xff0c;清晰了很多&…...

华为OD机试-最短木板长度-二分法(A卷,100分)

此题是一个最大化最小值的典型例题&#xff0c; 因为搜索范围是有界的&#xff0c;上界最大木板长度补充的全部木料长度&#xff0c;下界最小木板长度&#xff1b; 即left0,right10^6; 我们可以设置一个候选值x(mid)&#xff0c;将木板的长度全部都补充到x&#xff0c;如果成功…...