持续集成与持续部署:CI/CD实现教程

以下是一个基于常见工具实现 CI/CD 的基本教程示例,这里以 Git、Jenkins、Maven(用于 Java 项目构建和管理依赖,其他语言项目可替换为对应构建工具)以及 Docker(用于容器化部署,非必需但很常用)为例,展示如何搭建一个简单的 CI/CD 流程,你可以根据实际项目情况进行调整和扩展。

一、环境准备

1. 安装 Git
  • 根据操作系统不同,在官网(https://git-scm.com/)下载对应版本的 Git 安装包进行安装。安装完成后,通过命令行输入 git --version 验证是否安装成功。
2. 安装 Jenkins
  • Windows 系统
    • 从 Jenkins 官网(Jenkins)下载 Windows 安装包,运行安装程序,按照提示逐步完成安装。安装完成后,在浏览器中访问 http://localhost:8080(默认端口是 8080,如果安装过程中修改了端口则使用修改后的端口号),按照初始设置向导进行配置,包括安装推荐插件等操作。
  • Linux 系统(以 Ubuntu 为例)
    • 先更新系统软件包列表:sudo apt update
    • 安装 Java 环境(Jenkins 依赖 Java),执行命令 sudo apt install openjdk-11-jdk(这里以 Java 11 为例,可根据需求选择其他版本)。
    • 添加 Jenkins 软件源,在 /etc/apt/sources.list.d/ 目录下创建一个名为 jenkins.list 的文件,内容为 deb https://pkg.jenkins.io/debian-stable binary/,然后运行命令 wget -q -O - https://pkg.jenkins.io/debian-stable/jenkins.io.key | sudo apt-key add - 导入 Jenkins 官方密钥。
    • 再次更新软件包列表后安装 Jenkins:sudo apt install jenkins,安装完成后,启动 Jenkins 服务 sudo service jenkins start,同样在浏览器中访问 http://<服务器 IP 地址>:8080 进行初始配置。
3. 安装 Maven(针对 Java 项目,其他语言项目按需安装对应构建工具)
  • Windows 系统
    • 从 Maven 官网(Welcome to Apache Maven -- Maven)下载二进制压缩包,解压到指定目录(如 C:\Program Files\apache-maven),然后配置环境变量,在系统环境变量的 Path 变量中添加 Maven 的 bin 目录路径(如 C:\Program Files\apache-maven\bin),通过命令行输入 mvn -version 验证安装是否成功。
  • Linux 系统(以 Ubuntu 为例)
    • 执行命令 sudo apt install maven 进行安装,安装完成后通过 mvn -version 检查安装情况。
4. 安装 Docker(如果有容器化部署需求)
  • Windows 系统
    • 从 Docker 官网(https://www.docker.com/)下载 Docker Desktop for Windows 安装包,运行安装程序,按照提示完成安装,安装完成后需重启电脑使 Docker 生效,通过命令行输入 docker --version 验证。
  • Linux 系统(以 Ubuntu 为例)
    • 先卸载旧版本(如果有):sudo apt-get remove docker docker-engine docker.io containerd runc
    • 安装依赖包:sudo apt-get update && sudo apt-get install apt-transport-https ca-certificates curl gnupg lsdv
    • 添加 Docker 官方 GPG 密钥:curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
    • 设置稳定版软件源:echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
    • 安装 Docker 引擎:sudo apt-get update && sudo apt-get install docker-ce docker-ce-cli containerd.io,安装完成后通过 docker --version 验证安装情况,并且可以运行 sudo systemctl start docker 启动 Docker 服务,还可以设置开机自启 sudo systemctl enable docker

二、项目配置

1. 创建 Git 仓库
  • 在 Git 服务器(如 GitHub、GitLab 或者自建的 Git 服务器)上创建一个新的项目仓库,用于存放你的项目源代码。如果是本地已有项目,可以通过命令行进入项目目录,执行 git init 创建本地仓库,然后关联远程仓库(例如 git remote add origin <远程仓库 URL>),再将本地代码推送到远程仓库(git push -origin master 等,具体根据实际分支情况)。
2. 在 Jenkins 中配置项目
  • 登录 Jenkins 网页界面,点击 "新建 Item",输入项目名称,选择 "Freestyle project"(自由风格项目,对于简单项目比较适用,也可以后续探索更复杂的项目类型如 Pipeline 等),点击 "确定"。
  • 在项目配置页面:
    • General(常规):可设置项目的一些基本描述信息等。
    • 源码管理 :选择 "Git",填写你的 Git 仓库地址(如 https://github.com/<用户名>/<项目名>.git),如果是私有仓库,可能需要配置认证信息(如 SSH 密钥或者用户名密码等),然后设置要构建的分支(如 master 或者其他开发分支)。
    • 构建触发器 :有多种触发构建的方式,例如 "Poll SCM" 可以设置定时检查代码仓库是否有更新来触发构建(如 */5 * * * * 表示每 5 分钟检查一次);"GitHub hook trigger for GITscm polling"(如果项目托管在 GitHub 上)可以通过 GitHub 推送事件来触发构建,更加实时高效;你也可以手动点击 "立即构建" 按钮来触发构建。
    • 构建环境:根据项目需求配置,比如是否需要使用 Docker 等,这里如果使用 Docker,可勾选相关 Docker 配置选项(后续还需进一步配置 Docker 相关参数)。
    • 构建步骤
      • 对于 Java 项目,如果使用 Maven 构建,添加 "Execute Maven goal" 构建步骤,在 "Goals" 文本框中输入构建命令,比如 clean install(清除之前的构建结果并重新安装项目到本地仓库,一般会生成可部署的 JAR 文件等制品)。
      • 如果有其他操作,比如运行脚本、复制文件等,可以继续添加相应的构建步骤来完成对应的任务。

三、持续集成(CI)流程实现

1. 开发人员提交代码
  • 开发团队成员在本地完成代码编写、测试(本地可以先进行一些简单的单元测试等)后,将代码提交到前面创建的 Git 仓库对应的分支中(如 master 分支或者开发分支),根据设置的构建触发器,会触发 Jenkins 的构建流程。
2. Jenkins 执行构建和自动化测试
  • 当触发构建后,Jenkins 会按照配置的构建步骤进行操作:
    • 首先从 Git 仓库拉取最新的代码到 Jenkins 工作空间(一个临时的目录,用于存放项目代码及构建相关的文件等)。
    • 然后执行 Maven 的构建命令(以 Java 项目为例),进行编译、打包等操作,生成相应的软件制品(如 JAR 文件等)。
    • 接着会执行自动化测试,对于 Java 项目,如果在项目中有使用 JUnit 等测试框架编写的单元测试用例,Maven 在构建过程中会自动运行这些测试用例,并将测试结果反馈给 Jenkins。如果测试不通过,Jenkins 会在构建历史记录中标记该次构建失败,并通过之前配置的通知机制(如邮件等)通知开发人员,开发人员则需要根据测试报告去查找和修复代码中的问题,然后再次提交代码触发新的构建。
3. 查看构建结果与反馈
  • 在 Jenkins 的项目页面,可以查看每次构建的详细情况,包括构建是否成功、构建时间、测试报告等信息。开发人员和相关团队成员可以通过这些信息及时了解代码集成的状态以及存在的问题,持续优化代码质量,确保每次代码提交后都能顺利通过构建和测试环节,保证代码仓库中的代码处于可随时发布的状态。

四、持续交付 / 持续部署(CD)流程实现

1. 制品管理(以 Nexus 为例,也可选用其他制品库)
  • 安装 Nexus(可选步骤,如果已有合适的制品库可跳过)
    • Windows 系统:从 Nexus 官网下载安装包进行安装,按照提示配置相关参数,比如端口号、仓库设置等。
    • Linux 系统(以 Ubuntu 为例):可以下载 Nexus 的压缩包进行解压安装,也可以通过一些包管理工具(如 apt 等)查找是否有对应的安装包进行安装。安装完成后,配置相关参数并启动服务,通过浏览器访问对应的端口(默认是 8081)进入 Nexus 管理界面,创建相应的仓库(如 Maven 仓库用于存储 Java 项目制品等)。
  • 将构建制品推送到制品库
    • 在 Jenkins 的项目配置中添加 "构建后操作" 步骤,选择 "Deploy artifacts to Maven repository"(针对 Java 项目推送制品到 Maven 仓库的情况,其他项目可根据对应工具和制品库进行相应配置),填写 Nexus 仓库的相关信息,如仓库 URL、认证信息(如果需要)等,这样在每次构建成功后,会自动将生成的软件制品(如 JAR 文件等)推送到 Nexus 制品库中进行存储和管理,方便后续部署使用。
2. 环境部署(以下以 Docker 容器化部署为例)
  • 创建 Dockerfile(如果使用 Docker 部署)
    在项目的根目录下创建一个 Dockerfile 文件,用于定义如何将项目打包成一个 Docker 容器,例如对于一个简单的 Java 项目,其 Dockerfile 内容可能如下:

    bash 复制代码
    FROM openjdk:11-jdk-alpine
    WORKDIR /app
    COPY target/*.jar app.jar
    ENTRYPOINT ["java", "-jar", "app.jar"]

    这表示基于 openjdk:11-jdk-alpine 这个基础 Docker 镜像(轻量级的 Java 11 环境镜像),在容器内创建 /app 工作目录,将项目构建生成的 JAR 文件(假设在 target 目录下)复制到容器内的 /app 目录下,并设置容器启动时执行的命令为运行该 JAR 文件。

  • 配置 Jenkins 进行部署(结合 Docker)

    • 在 Jenkins 的项目配置 "构建后操作" 中,添加 "Execute shell"(如果是 Linux 环境)或者 "Execute Windows batch script"(如果是 Windows 环境)等步骤,在脚本内容中编写 Docker 相关的部署命令,比如:

      bash 复制代码
      docker build -t your-project-image.
      docker run -d -p 8080:8080 your-project-image

      这两条命令分别表示根据项目的 Dockerfile 构建一个名为 your-project-image 的 Docker 容器镜像,然后以守护进程模式(-d)运行该容器,并将容器内的 8080 端口映射到主机的 8080 端口(这里端口可根据项目实际需求修改),使得项目可以通过主机的 8080 端口对外提供服务。

    • 验证部署情况
      在目标环境(如预发布环境、生产环境等)中,通过访问相应的 URL(如 http://<服务器 IP 地址>:8080)来验证项目是否成功部署并正常运行,可以进行一些功能测试、性能测试等操作进一步确认软件在该环境下的状态,确保符合质量要求。

    • 对于持续交付来说,在完成上述步骤后,还需要相关人员根据业务情况决定何时将软件从预发布环境等最终部署到生产环境中;而对于持续部署,只要前面所有流程(包括构建、测试、制品管理、环境部署验证等)都顺利通过,就会自动将软件部署到生产环境中,无需人工干预,实现快速高效的软件交付和部署。

      这就是一个基于常见工具搭建 CI/CD 流程的基本教程,实际应用中可以根据不同的项目类型、团队规模、业务需求等进行更加复杂和精细化的配置与优化。

相关推荐
创实信息2 天前
GitHub企业版:AWS CodeCommit迁移的最佳路径与技术优势
git·ci/cd·github·aws·github企业版·aws codecommit
Web项目开发2 天前
GoCD 持续集成和部署工具配置指南(CentOS 7)
linux·ci/cd·centos
魔幻云3 天前
第八章:持续集成管理
ci/cd
编码浪子3 天前
devops和ICCID简介
运维·ci/cd·docker·devops
vvw&3 天前
如何在 Ubuntu 22.04 服务器上安装 Jenkins
linux·运维·服务器·ubuntu·ci/cd·自动化·jenkins
优质&青年3 天前
【故障处理系列--gitlab的CI流水线下载安装包提示报错】
linux·运维·ci/cd·云原生·容器·gitlab
明明跟你说过4 天前
在Rocky Linux中安装【Jenkins】的详细指南
linux·运维·服务器·ci/cd·jenkins·devops
Anna_Tong4 天前
探索 CI/CD 工具的力量
ci/cd·开源·jenkins·开源软件·devops
虹科网络安全4 天前
艾体宝案例丨CircleCI 助力 ANA Systems 打造高效 CI/CD 模型
自动化测试·ci/cd·持续集成·saas平台·circleci
测试者家园5 天前
ChatGPT生成测试用例的最佳实践(四)
软件测试·ci/cd·chatgpt·持续集成·ai赋能·测试用例生成·用chatgpt做软件测试·测试图书·效能质量