CICD(持续集成与持续部署)是现代软件开发中非常重要的一部分,它可以让代码从开发到上线的流程更加自动化、高效和可靠。以下通过一个具体的实例,结合通俗的讲解,来帮助你理解 CICD 的功能和作用。
假设我们开发了一个在线电商网站,团队中的开发者每天都在添加新功能(比如购物车、支付功能)或修复 bug。那么,如何通过 CICD 流程让新功能安全、高效地上线?
场景:
开发者小明新增了一个功能(比如优惠券功能)。他完成代码后,将代码提交到 GitHub(代码仓库)。
CI 功能:
效果: 开发者小明很快知道他的新功能是否有问题,并在本地进行修复后再次提交。整个过程高效、快速。
场景:
新代码通过了所有测试,需要将项目打包成可运行的程序。
CI 功能:
效果: 镜像的构建和存储完全自动化,减少了手动打包的麻烦,确保了版本一致性。
场景:
构建好的镜像需要先部署到测试环境,供测试人员验证新功能。
CD 功能:
效果: 测试人员可以快速验证功能,测试环境保持与生产环境一致。
场景:
测试通过后,新版本需要部署到生产环境,用户可以访问新功能。
CD 功能:
效果: 整个上线流程全程自动化,避免了手动部署时可能发生的错误,比如遗漏配置、版本不一致等。
开发阶段:
就像在厨房做饭。开发者是厨师,CI 工具(如 Jenkins)会帮忙检查配料(代码)是否新鲜、做饭时是否按照正确步骤(测试)。
打包阶段:
把做好的一份饭装进保温餐盒(Docker 镜像),然后放进外卖平台(Harbor 镜像仓库)。
测试环境:
外卖员(CD 工具)把餐盒送到公司内部(测试环境),员工试吃看看味道是否符合要求。
生产环境:
如果试吃通过,外卖员再把餐盒送到顾客家里(生产环境),让用户享用。
自动化优势:
以下是一个简单的 Jenkins Pipeline 示例,展示了完整的 CICD 流程:
groovypipeline { agent any stages { stage('Checkout') { steps { git 'https://github.com/your-repo/project.git' } } stage('Build') { steps { sh 'go build -o app' } } stage('Test') { steps { sh 'go test ./...' } } stage('Docker Build') { steps { sh 'docker build -t harbor.your-domain.com/project/app:latest .' sh 'docker push harbor.your-domain.com/project/app:latest' } } stage('Deploy') { steps { sshagent(['ssh-credentials-id']) { sh ''' ssh user@server "docker pull harbor.your-domain.com/project/app:latest" ssh user@server "docker run -d -p 8080:8080 harbor.your-domain.com/project/app:latest" ''' } } } } }
这个例子展示了代码从 拉取 → 构建 → 测试 → 打包 → 部署 的完整流程。
通过以上例子,你应该能够直观理解 CICD 如何通过自动化工具让开发、测试、部署更加流畅和可靠!
本文作者:han
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!