Jenkins脚本构建、部署阶段内容及两者差异咨询
Jenkins构建阶段与部署阶段的内容及区别
一、构建阶段包含的内容
构建阶段是将源代码转换为可部署产物的核心环节,通常包含以下步骤:
- 代码拉取:从Git、SVN等版本控制系统拉取指定分支的代码,比如执行
git clone https://your-repo-url.git,或通过Jenkins的SCM插件配置自动拉取 - 依赖安装:安装项目运行和构建所需的依赖,例如前端项目执行
npm install,Java项目用mvn dependency:resolve,Python项目运行pip install -r requirements.txt - 代码编译/打包:将源代码转换为可执行或可部署的产物,比如Java项目执行
mvn package生成jar/war包,前端项目执行npm run build生成dist静态文件,Go项目执行go build生成二进制可执行文件 - 静态代码检查:使用SonarQube、ESLint、Pylint等工具检测代码质量,确保代码符合规范、无潜在语法问题或安全漏洞
- 自动化测试:运行单元测试、集成测试用例,比如用JUnit测试Java代码、pytest测试Python代码、Jest测试前端代码,测试不通过则终止构建流程
- 产物归档:将构建完成的产物上传至Jenkins归档目录或专用制品库(如Nexus、Harbor),方便后续部署阶段获取
二、部署阶段包含的内容
部署阶段是将构建好的产物交付到目标运行环境并确保服务正常运行的环节,通常包含以下步骤:
- 环境校验:检查目标环境(测试服、生产服、容器集群等)的状态,比如服务器是否在线、CPU/内存资源是否充足,必要时创建Docker容器或虚拟机
- 产物拉取:从制品库或Jenkins归档中获取构建好的产物
- 停止旧服务:若为更新部署,先停止当前运行的旧版本服务,例如执行
systemctl stop your-app停止系统服务,或docker stop <container-id>停止容器 - 部署新产物:将产物部署到目标环境,比如把jar包复制到服务器指定目录、用
docker run启动新容器、通过kubectl apply部署到Kubernetes集群 - 启动新服务:启动部署完成的服务,例如
systemctl start your-app、docker start <container-id> - 健康检查:验证服务是否正常运行,比如调用健康检查接口
curl http://your-server-ip/health、查看服务进程状态、检查日志是否有报错 - 回滚处理:若部署失败,自动回滚至上一个稳定版本,比如重启旧容器、恢复之前的产物文件,避免服务长时间不可用
三、构建阶段与部署阶段的核心区别
- 核心目标不同
- 构建阶段:聚焦于生产合格的可部署产物,确保代码经过校验、测试,最终输出能直接用于部署的包或文件
- 部署阶段:聚焦于让产物在目标环境中正常提供服务,确保服务能启动、运行稳定,且不影响业务
- 执行环境不同
- 构建阶段:通常在独立的Jenkins构建节点执行,无需连接生产/测试环境,只需要具备构建所需的工具(如编译器、包管理器)
- 部署阶段:必须与目标运行环境(服务器、容器集群等)交互,需要具备环境的访问权限
- 失败影响范围不同
- 构建失败:仅终止当前产物生成流程,不会影响线上正在运行的服务
- 部署失败:可能导致线上服务中断或异常,因此必须配备回滚机制
- 可重复性差异
- 构建阶段:只要代码、依赖版本、构建配置不变,每次构建的产物完全一致
- 部署阶段:可能因目标环境的配置差异(如服务器系统版本、资源限制),出现不同的部署结果
- 关注点不同
- 构建阶段:关注代码质量、测试覆盖率、产物完整性、构建效率
- 部署阶段:关注环境兼容性、服务可用性、部署速度、回滚可靠性
内容的提问来源于stack exchange,提问作者Prarthana
相关产品推荐
相关产品推荐

