Day119 持续集成docker+jenkins

Day119 docker+jenkins

1.Dockerfile

Dockerfile 可以用于项目部署。通过编写 Dockerfile,可以将整个项目及其所需的依赖项打包到一个 Docker 镜像中,然后在任何支持 Docker 的环境中部署和运行该镜像

Dockerfile 是用于构建 Docker 镜像的文本文件。它包含一系列的指令,用于描述如何从一个基础镜像构建一个新的镜像,并在其中安装和配置软件环境

1.1 编写Dockerfile

1.1.1 准备工作

1.idea中对springboot项目打包,生产一个jar文件

注意:先clean,再package

在这里插入图片描述

2.jar文件上传到Linux

在这里插入图片描述

1.1.2 创建Dockerfile文件
vim dockerfile

在这里插入图片描述

编写dockerfile ,保存

FROM openjdk:8
MAINTAINER pcb
ADD FrameworkLearn-0.0.1-SNAPSHOT.jar /FrameworkLearn.jar  #前一个是打包之后的名字,后面一个是重命名的名字
EXPOSE 1002  #要和后端项目的一致
ENTRYPOINT ["java","-jar","/FrameworkLearn.jar"]   #重命名的jar名字

在这里插入图片描述

1.1.3 构建镜像 images
docker build -t demo1234:latest -f Dockerfile .

如果没有安装docker,就看Day95 docker安装

1.1.4 查看创建的镜像
docker images

在这里插入图片描述

1.1.5 创建容器
docker run -id --name demo1234 -p 1002:1002 demo:latest   #:1002要和项目的端口一致,前面那个无所谓
docker ps
docker logs -f demo1234

1.2 文件详解

1.2.1 Dockerfile 文件
FROM openjdk:8
MAINTAINER pcb
ADD FrameworkLearn-0.0.1-SNAPSHOT.jar /FrameworkLearn.jar  #前一个是打包之后的名字,后面一个是重命名的名字
EXPOSE 1002  #要和后端项目的一致
ENTRYPOINT ["java","-jar","/FrameworkLearn.jar"]   #重命名的jar名字

1.FROM openjdk:8 :指定基础镜像为 openjdk:8 ,表示该镜像将以 OpenJDK 1.8 作为基础环境

2.MAINTAINER pcb :设置镜像的作者

3.ADD FrameworkLearn-0.0.1-SNAPSHOT.jar /FrameworkLearn.jar :将主机上的 FrameworkLearn-0.0.1-SNAPSHOT.jar 文件添加到镜像中,并指定目标路径为 FrameworkLearn.jar

4.EXPOSE 9999 :声明容器将监听的端口号为 9999,要和后端项目的一致

5.ENTRYPOINT [“java”,“-jar”,“/FrameworkLearn.jar”]:设置容器的入口点,指定在容器启动时要运行的命令。这里的配置表示以 Java 命令执行 /FrameworkLearn.jar 文件,即运行主类为 /FrameworkLearn.jar 的 Java 应用程序

1.2.2 构建镜像
docker build -t demo1234:latest -f Dockerfile .

-t 选项: 用于指定构建镜像后的镜像名称和标签,格式为 -t <镜像名称>:<标签> ,可以自定义镜像名称和标签

-f 选项: 用于指定要使用的 Dockerfile 文件

默认情况下, docker build 命令会在构建上下文中寻找名为 Dockerfile 的文件进行构建

使用 -f 选项可以指定其他名称的 Dockerfile 文件,以便构建时使用不同的 Dockerfile

. 选项: 表示 Dockerfile 文件所在的路径是当前路径

2.Docker Compose

Docker Compose 是一个用于定义和管理多个 Docker 容器的工具。Docker Compose 提供了一种声明性的方式来定义和管理多个 Docker 容器,从而实现服务编排。通过一个单独的 YAML 文件,您可以定义各个服务的配置、依赖关系、网络连接和卷挂载等信息

2.1 安装

第一种:docker-compose离线安装文件:docker-compose-linux-x86_64

下载地址:https://github.com/docker/compose/releases/download/v2.15.1/docker-compose-linux-x86_64

进入/usr/local/bin目录,上传文件,对文件重命名,然后赋予执行权限:

cd /usr/local/bin
mv docker-compose-linux-aarch64 docker-compose
sudo chmod +x docker-compose

查看docker-compose版本号:

docker-compose --version

第二种:sudo curl -L “https://github.com/docker/compose/releases/download/v2.2.2/docker-compose-(uname−s)−(uname -s)-(unames)(uname -m)” -o /usr/local/bin/docker-compose 安装

设置权限 sudo chmod +x /usr/local/bin/docker-compose

在这里插入图片描述

2.2 创建MySQL与Redis服务

目标:通过docker-compose创建MySQL与Redis容器

它允许用户通过一个单独的 docker-compose.yml 模板文件(YAML格式)来定义一组相关联的应用容器为一个项目(project)

1.先创建文件:docker-compose.yml

vim docker-compose.yml

2.编写文件(注意:格式缩进问题,yaml格式)

version: "3.0"services:mysqldb:image: mysql:8.0container_name: mysqlports:- "3306:3306"volumes:- /root/mysql/conf:/etc/mysql/conf.d- /root/mysql/logs:/logs- /root/mysql/data:/var/lib/mysqlenvironment:MYSQL_ROOT_PASSWORD: rootdepends_on:- redisredis:image: redis:6.2.7container_name: redis  ports:- "6379:6379"volumes:- /root/redis/data:/datacommand: redis-server

在这里插入图片描述

3.运行文件

# 默认运行当前目录下的 docker-compose.yml 文件;
# 如果 docker-compose.yml 文件不在当前目录,可以使用 -f 选项指定文件路径:
docker-compose up
# -d 将容器设置为在后台运行
docker-compose up -d
# -f 指定文件名
docker-compose -f /path/to/docker-compose.yml up -d

在这里插入图片描述

2.3 测试项目

1.创建一个 init.sql 文件,放在项目目录下

2.创建文件:vim docker-compose-project.yml

version: "3.0"
services:mysql:image: mysql:8.0restart: alwayscontainer_name: mysql8.0command: --default-authentication-plugin=mysql_native_password  # 解决外部无法访问volumes:- ./data:/var/lib/mysql #挂载目录,持久化存储- ./init.sql:/docker-entrypoint-initdb.d/init.sqlports:- "3306:3306" # 容器端口映射到宿主机的端口environment:MYSQL_ROOT_PASSWORD: 'root'   #设置密码是root,账号是rootMYSQL_ALLOW_EMPTY_PASSWORD: 'no'MYSQL_DATABASE: 'securityrabc'mydemo: # 自己单独的springboot项目container_name: demohostname: jetbuild: ./  # 需要构建的Dockerfile文件ports:- "8080:8080"depends_on:- mysqlframeworklearn:image: openjdk:8-jdk-alpine # 使用Alpine版本的OpenJDK镜像container_name: frameworklearnworking_dir: /root/pcb volumes:- ./FrameworkLearn-0.0.1-SNAPSHOT.jar:/root/pcb/FrameworkLearn-0.0.1-SNAPSHOT.jar command: ["java", "-jar", "/root/pcb/FrameworkLearn-0.0.1-SNAPSHOT.jar"] # 启动命令ports:- "1002:1002"   # 容器端口映射到宿主机的端口depends_on: # web服务依赖mysql服务,要等mysql服务先启动- mysql  

3.运行

docker-compose -f docker-compose-project.yml up -d

打印日志

docker-compose -f docker-compose-project.yml logs frameworklearn

注意: 服务器要开放1002端口

在这里插入图片描述

代码里面的yaml文件

server:# 服务端口port: 1002# 应用上下文路径servlet:context-path: /FrameworkLearntomcat:uri-encoding: UTF-8spring:# 数据源配置(Druid)datasource:type: com.alibaba.druid.pool.DruidDataSourcedriver-class-name: com.mysql.cj.jdbc.Driverdruid:url: jdbc:mysql://mysql:3306/securityrabc?characterEncoding=utf-8 #修改为mysql:3306username: rootpassword: root

运行 http://47.108.146.63:1002/FrameworkLearn/test1

在这里插入图片描述

3.CICD

3.1 概念

CICD:持续集成/持续发布—开发(git) --> git主库 –> jenkins(git+jdk+tomcat+maven打包+测试)–> 发布到tomcat服务器

Jenkins是一个功能强大的应用程序,允许持续集成和持续交付项目,无论用的是什么平台。这是一个免费的源代码,可以处理任何类型的构建或持续集成。集成Jenkins可以用于一些测试和部署技术,Jenkins是一种软件

3.2 CI / CD 方法简介

软件开发的连续方法基于自动执行脚本,以最大限度地减少在开发应用程序时引入错误的可能性。从新代码的开发到部署,它们需要较少的人为干预甚至根本不需要干预

它涉及在每次小迭代中不断构建,测试和部署代码更改,从而减少基于有缺陷或失败的先前版本开发新代码的机会

这种方法有三种主要方法,每种方法都根据最适合您的策略进行应用。

持续集成( CI):代码合并,构建,部署,测试都在一起,不断地执行这个过程,并对结果反馈

持续部署(CD):部署到测试环境、预生产环境/灰度环境、生产环境

持续交付(CD):将最终产品发布到生产环境、给用户使用

4.Jenkins 姐肯死

概述

Jenkins是帮我们将代码进行统一的编译打包、还可以放到tomcat容器中进行发布

我们通过配置,将以前:编译、打包、上传、部署到Tomcat中的过程交由Jenkins,Jenkins通过给定的代码地址URL(代码仓库地址),将代码拉取到其“宿主服务器”(Jenkins的安装位置),进行编译、打包和发布到Tomcat容器中

Jenkins目标

1.持续、自动地构建/测试软件项目

2.监控软件开放流程,快速问题定位及处理,提高开发效率

Jenkins特性

1.开源的java语言开发持续集成工具,支持CICD

2.易于安装部署配置:可通过yum安装或下载war包以及通过docker容器等快速实现安装部署,可方便web界面配置管理

3.消息通知及测试报告:集成RSS/E-mail通过RSS发布构建结果或当构建完成时通过e-mail通知,生成JUnit测试报告

4.分布式构建:支持Jenkins能够让多台计算机一起构建/测试

工作流程:

1.首先,开发人员将代码提交到 Git 仓库

2.然后 Jenkins 使用 Git 插件来拉取 Git 仓库的代码,然后配合 JDK、Maven 等软件完成代码编译, 测试、审查、测试和打包等工作

3.最后 Jenkins 将生成的 jar/war 推送到 测试/生产 服务器 ,供用户访问

4.整套步骤下来,作为开发人员我们只需要提交下代码,剩下的工作都交给了 Jenkins

在这里插入图片描述

4.1 环境准备

安装jdk、maven、git、docker、docker-compose

4.1.1 安装jdk
yum install java-1.8.0-openjdk.x86_64
java -version

在这里插入图片描述

4.1.2 安装maven

下载 maven linux版本

https://maven.apache.org/download.cgi

在这里插入图片描述

上传到linux 下面的opt下面的soft ,解压到/usr/local/

tar -xvf apache-maven-3.9.11-bin.tar.gz -C /usr/local

在这里插入图片描述

配置maven仓库,设置阿里镜像仓库

cd /usr/local
cd apache-maven-3.9.11
mkdir ck    #创建ck仓库存储目录

在这里插入图片描述

进入cd conf目录,编辑 vi settings.xml文件

配置maven的仓库位置

cd conf   # 进入conf目录
vi settings.xml  # settings.xm文件<localRepository>/usr/local/apache-maven-3.9.11/ck</localRepository><mirror><id>alimaven</id><name>aliyun maven</name><url>http://maven.aliyun.com/nexus/content/groups/public/</url><mirrorOf>central</mirrorOf>
</mirror>

在这里插入图片描述

在这里插入图片描述

配置maven环境变量

vi /etc/profileexport MAVEN_HOME=/usr/local/apache-maven-3.6.3
export PATH=$PATH:$MAVEN_HOME/binsource /etc/profile #重新加载,使新增配置生效

在这里插入图片描述

mvn -v

在这里插入图片描述

4.1.3 安装git
yum -y install git # 安装
git version # 安装是否成功

在这里插入图片描述

4.2 安装Jenkins

1.下载rpm文件:Index of jenkins-local/redhat,选择合适的版本。这里我选择了jenkins-2.344-1.1.noarch.rpm,因为低版本很多插件不支持,要更新版本

2.新建目录存放安装包

cd /optmkdir jenkins # 新建目录rpm -ivh jenkins-2.344-1.1.noarch.rpm # 上传.rpm文件之后,安装

在这里插入图片描述

3.查看Jenkins的相关目录:rpm -ql jenkins

在这里插入图片描述

4.修改配置文件 vim /usr/lib/systemd/system/jenkins.service

# 修改用户和权限
User=root
Group=root# 修改JDK路径
Environment="/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.462.b08-2.0.1.1.al8.x86_64/jre"  # 修改启动端口
Environment="JENKINS_PORT=36080"

在这里插入图片描述

在这里插入图片描述

5.刷新配置文件 systemctl daemon-reload

6.开启防火墙和指定端口

# 开启防火墙
systemctl start firewalld
# 开放指定端口
firewall-cmd --zone=public --add-port=36080/tcp --permanent
# 重启防火墙
firewall-cmd --reload
# 查看所有端口使用情况
netstat -ntlp   

7.服务器开放63080端口

在这里插入图片描述

8.启动Jenkins,访问

# 启动
systemctl start jenkins
# 停止
systemctl stop jenkins

9.启动完成后,输入服务器ip+端口访问,初次访问会有一个初始密码

cat /var/lib/jenkins/secrets/initialAdminPassword #查看初始密码

在这里插入图片描述

注意:记得下载中文插件及设置密码

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

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

相关文章

Vue3+Vite MPA多页面应用开发完整指南 – 从零搭建到部署优化

什么是 MPA 多页面应用 MPA&#xff08;Multi-Page Application&#xff09;是由多个独立的 HTML 页面组成的应用&#xff0c;每个页面都有独立的入口文件。与 SPA 不同&#xff0c;MPA 的每个页面都是独立的&#xff0c;页面间通过链接跳转&#xff0c;适合大型项目或需要 SE…

【企业级架构】企业战略到技术落地的全流程【第一篇】

目录 一、人生蓝图与企业罗盘&#xff1a;战略视角下的成长架构 1. 大学毕业迷茫期 → 企业未制定战略前&#xff1a;无方向、无目标​ 2. 制定职业规划 → 企业战略制定&#xff1a;明确 “去哪” 和 “分几步走”​ 3. 盘点自身能力差距 → 业务架构梳理&#xff1a;搞清…

(二) Python + 地球信息科学与技术 = 经典案例分析

目录 四、农业精准施肥与产量预测&#xff08;植被指数 机器学习&#xff09; 五、公共场所踩踏事故预警系统&#xff08;时空大数据 Web 开发&#xff09; 六、森林火灾智能识别与救援路径规划&#xff08;遥感 路径优化&#xff09; 七、海岸线侵蚀动态监测与防护&…

从需求到部署全套方案:餐饮服务许可证数据可视化分析系统的大数据技术实战

&#x1f393; 作者&#xff1a;计算机毕设小月哥 | 软件开发专家 &#x1f5a5;️ 简介&#xff1a;8年计算机软件程序开发经验。精通Java、Python、微信小程序、安卓、大数据、PHP、.NET|C#、Golang等技术栈。 &#x1f6e0;️ 专业服务 &#x1f6e0;️ 需求定制化开发源码提…

Qt 关于QString和std::string数据截断的问题- 遇到\0或者0x00如何处理?

Qt 关于QString和std::string数据截断的问题- 遇到\0或者0x00如何处理&#xff1f;引言一、解决方案二、使用QByteArray注意事项引言 在Qt开发中&#xff0c;使用QString或std::string获取、发送字符串时&#xff0c;遇到\0(空字符)或者0x00(十六进制表示)可能导致数据截断&am…

Spring Cloud LoadBalancer 最佳实践

Ribbon 曾经是 Spring Cloud 家族默认的客户端负载均衡工具&#xff0c;而 Spring Cloud LoadBalancer (SCLB) 是官方替换 Ribbon 的新实现。表面上它们都解决 “服务调用时选哪个实例” 的问题&#xff0c;但在理念、架构和生态上差异不小。一、Ribbon vs SCLB1. 定位和生态…

【STM32】SPI 与 Flash 笔记

1️⃣ SPI&#xff08;Serial Peripheral Interface&#xff0c;串行外设接口&#xff09;英文解释&#xff1a; Serial&#xff1a;串行Peripheral&#xff1a;外设Interface&#xff1a;接口用途&#xff1a;MCU 与外部设备&#xff08;Flash、传感器等&#xff09;高速数据通…

抽象工厂设计模式 Abstract Factory

抽象工厂抽象工厂设计模式是一种创建模式&#xff0c;它提供了一个用于创建相关或从属对象族的接口&#xff0c;而无需指定其具体类。 它在以下情况下特别有用&#xff1a; 您需要创建必须一起使用并且是一致系列的一部分的对象&#xff08;例如&#xff0c;按钮、复选框和菜单…

WSL 下的虚拟网卡配置

第一部分&#xff1a;Windows 虚拟网卡创建指南 1. 原理 在 Windows 里&#xff0c;“虚拟网卡”本质是由网络驱动在系统网络栈中创建的一个 软件网卡接口。它的作用和物理网卡类似&#xff0c;只不过不直接连接到物理硬件&#xff0c;而是通过内核网络驱动与宿主机网络进行交换…

Dify web前端源码本地部署详细教程

目录 1. 先启动API 2. 启动worker服务 3. 启动web 4. 访问登陆地址 在前面的文章中&#xff0c;Dify源码部署&#xff0c;搭建二次开发环境&#xff08;一&#xff09; 已经记录了如何在本地启动API、work、中间件。在本篇文章中&#xff0c;将概述如何启动dify web源码项…

CVPR 2025|英伟达联合牛津大学提出面向3D医学成像的统一分割基础模型

在 2D 自然图像和视频的交互式分割领域&#xff0c;基础模型已引发广泛关注&#xff0c;这也促使人们开始构建用于医学成像的 3D 基础模型。然而&#xff0c;3D 医学成像存在的领域差异以及临床应用场景&#xff0c;要求开发一种有别于现有 2D 解决方案的专用模型。具体而言&am…

解决“Win7共享文件夹其他电脑网络无法发现共享电脑名称”的问题

要让运行 Windows 7 的电脑被局域网中其他设备&#xff08;包括另一台电脑、手机、NAS 等&#xff09;“发现”&#xff0c;必须同时满足三个条件&#xff1a; 网络发现功能已启用&#xff1b;对应的后台服务已启动&#xff1b;防火墙规则放行。 下面给出最简、最稳妥的 3 步设…

Python pyzmq 库详解:从入门到高性能分布式通信

一、前言 在现代软件开发中&#xff0c;进程间通信&#xff08;IPC&#xff09;与分布式系统通信已经成为基础能力。无论是构建一个微服务架构的后端&#xff0c;还是实现大规模并行计算任务&#xff0c;如何让不同的进程或节点之间高效地传递消息&#xff0c;都是核心问题。 传…

CentOS 7更换国内镜像源

第一步&#xff1a;检查系统版本 在修改任何配置之前&#xff0c;先确定你的 CentOS 版本&#xff0c;因为不同版本的镜像源配置文件不同。 cat /etc/redhat-release这个命令会显示你的 CentOS 版本信息&#xff0c;例如 CentOS Linux release 7.9.2009 (Core)。从你的错误日志…

详解 doclayout_yolo:Python 文档布局检测

目录一、doclayout_yolo 核心功能二、安装方法1. 直接安装2. 通过 PDF-Extract-Kit 安装三、使用示例1. 快速体验&#xff08;HuggingFace Demo&#xff09;2. 本地推理代码3. 批量处理四、技术亮点五、应用场景六、其他说明1.相关资源2. 注意事项doclayout_yolo 是一个基于 Y…

猫头虎AI分享|一款Coze、Dify类开源AI应用超级智能体Agent快速构建工具:FastbuildAI

猫头虎AI分享&#xff5c;一款 Coze、Dify 类开源 AI 应用超级智能体快速构建工具&#xff1a;FastbuildAI 区别在于它的易用度和商业闭环功能 摘要&#xff1a;FastbuildAI 是一个开源的 AI 应用“快速构建 商业化闭环”工具。它让个人开发者与小团队用 可视化 零代码 的方…

GitLab 安全漏洞 CVE-2025-6186 解决方案

本分分享极狐GitLab 补丁版本 18.2.2, 18.1.4, 18.0.6 的详细内容。这几个版本包含重要的缺陷和安全修复代码&#xff0c;我们强烈建议所有私有化部署用户应该立即升级到上述的某一个版本。对于极狐GitLab SaaS&#xff0c;技术团队已经进行了升级&#xff0c;无需用户采取任何…

【K8s】harbor安装与推送镜像

引言 在开发中&#xff0c;先推送镜像到docker&#xff0c;然后直接在docker运行。但是在K8S中&#xff0c;需要动态创建或者分配机器&#xff0c;这里需要将镜像推送到harbor仓库&#xff0c;然后再从仓库拉取到每台集群机器。 docker安装harbor&#xff1a;https://learnku…

FPGA读取AHT20温湿度模块思路及实现,包含遇到的问题(IIC协议)

一.阅读官方手册 手册在下方网址下载&#xff0c;该模块在各个网店平台均有销售 百度网盘 请输入提取码 手册重点关注IIC地址&#xff08;读地址0x71&#xff0c;写地址0x70&#xff09;、IIC命令和读写数据逻辑&#xff0c;手册写的比较简单&#xff08;感觉很多细节没到位…

项目会议怎么开才有效

要提高项目会议的有效性&#xff0c;需要做到以下几点&#xff1a;明确会议目的、制定具体的会议议程、合理控制会议时长、提前准备会议资料、选择合适的参会人员、设定清晰的会议目标、确保会议有决策和行动方案、会后及时跟进与落实。其中&#xff0c;明确会议目的尤为重要。…