day10-项目部署_持续集成
2025/9/22 0:09:51
来源:https://blog.csdn.net/2301_77011032/article/details/148046131
浏览:
次
关键词:day10-项目部署_持续集成
1. 持续集成(CI)的核心概念与优势
- 定义:频繁将代码集成到主干(如每日多次),通过自动化构建、测试和部署流程确保代码质量。
- 组成要素:
- 自动化构建:包含代码检出、编译、测试、结果记录等步骤。
- 代码存储库:使用Git或SVN管理代码版本。
- 持续集成服务器:如Jenkins,用于调度和执行自动化流程。
- 优势:
- 降低风险:早期发现问题,减少修复成本。
- 减少重复工作:自动化流程替代手动操作。
- 支持持续交付:快速生成可部署的单元包。
2. 软件开发模式对比
- 瀑布模型:
- 线性流程:需求分析→设计→实现→测试→进化。
- 缺点:无法适应需求变化,交付周期长。
- 敏捷开发:
- 迭代开发:将大项目拆分为多个小周期(迭代),每个迭代完成完整功能。
- 增量开发:每个版本新增完整功能,而非分阶段完成所有模块。
- 优势:早期交付、快速响应需求变化。
3. Jenkins核心配置与工具集成
- 安装与初始化:
- 通过YUM或RPM安装Jenkins,配置端口和用户权限。
- 访问管理后台,安装默认插件并创建管理员用户。
- 插件安装:
- 必要插件:Maven Integration、GitLab、Docker、SSH等。
- 配置镜像源:解决插件安装失败问题。
- 全局工具配置:
- 指定JDK、Maven、Docker路径,确保构建环境一致性。
4. 微服务部署与Docker集成
- 多环境配置:
- 通过
spring.profiles.active
指定环境(dev/test/prod)。 - 在Nacos配置中心管理不同环境的配置文件。
- Docker镜像构建:
- Dockerfile示例:
FROM java:8
VOLUME /tmp
ARG JAR_FILE
COPY ${JAR_FILE} app.jar
ENV JAVA_OPTS="-server -Xms256m -Xmx512m"
ENTRYPOINT ["sh", "-c", "java -jar $JAR_FILE $PARAMS"]
VOLUME
:避免容器存储层写入临时文件。ENTRYPOINT
:启动时执行Java命令,支持动态传参(如--spring.profiles.active=prod
)。
- Maven插件配置:
<plugin><groupId>com.spotify</groupId><artifactId>dockerfile-maven-plugin</artifactId><configuration><repository>${docker.image}/${project.artifactId}</repository></configuration>
</plugin>
用于将微服务打包为Docker镜像并推送至私有仓库。
5. Jenkins自动化部署流程
- 基础依赖打包:
- 从Git拉取代码,执行
mvn install
安装公共依赖到本地仓库。
- 微服务打包与镜像构建:
- Maven命令:
clean install -Dmaven.test.skip=true dockerfile:build -f heima-leadnews-service/pom.xml
-Dmaven.test.skip=true
:跳过测试。dockerfile:build
:触发Docker镜像构建。
- Shell脚本:
docker rm -f $(docker ps -a -f name=$JOB_NAME --format '{{.ID}}')
docker image prune -f
docker run -d --net=host -e PARAMS="--spring.profiles.active=prod" --name $JOB_NAME $IMAGE_TAG
--net=host
:容器使用宿主机网络,避免端口映射问题。-e PARAMS
:传递启动参数(如指定环境)。
6. 远程服务器部署与私有仓库
- 私有仓库配置:
- Jenkins远程部署流程:
- 镜像推送:
docker tag local-image 192.168.200.100:5000/remote-image
docker push 192.168.200.100:5000/remote-image
- 远程服务器拉取并启动:
docker pull 192.168.200.100:5000/remote-image
docker run -d --name service-name 192.168.200.100:5000/remote-image
7. Jenkins触发器配置
- 触发方式:
- URL触发:通过访问特定URL触发构建(如
http://jenkins-server/job/job-name/build?token=TOKEN
)。 - 定时构建:使用Cron表达式(如
H H/2 * * *
表示每2小时构建一次)。 - 轮询SCM:定时检查代码仓库变更,触发构建。
关键代码解释说明
1. Dockerfile指令
FROM java:8
:基于Java 8镜像构建。ARG JAR_FILE
:定义构建参数,用于传递JAR包路径。COPY ${JAR_FILE} app.jar
:将本地JAR包复制到容器内。ENTRYPOINT
:指定容器启动时执行的命令,支持动态参数(如$PARAMS
)。
2. Maven多环境配置
3. Jenkins Shell脚本
4. Cron表达式示例
H/30 * * * *
:每30分钟构建一次。0 8,12,22 * * *
:每天8点、12点、22点构建。
技术亮点
- 全流程自动化:从代码提交到镜像构建、测试、部署,全程无需人工干预。
- 环境隔离:通过Docker和Nacos实现多环境配置隔离,确保生产环境稳定性。
- 高效资源管理:利用Docker镜像和私有仓库,实现快速部署和版本回滚。
- 灵活触发机制:支持多种触发方式(如定时、代码变更),适应不同场景需求。