23.云原生之ArgoCD CICD实战【干货】

云原生专栏大纲

部署项目介绍

项目结构介绍

回顾《6.云原生之DevOps和CICD》中使用的项目,先看项目结构,在Jenkins 实现CICD过程中部署文件deploy.yaml是耦合在业务项目中的。Jenkins CI是通过webhook实现,CD通过流水线文件Jenkinsfile来实现。实际有时候代码修改后我们并不想发布,而是通过手动触发实现,kubesphere中使用Jenkins可创建流水线项目来实现(实际原理就是在Jenkins中创建,只是可视化展示了)。

回顾《19.云原生CICD之ArgoCD入门》部署项目,我们使用到了 《argocd测试项目》中kustomize-guestbook目录下资源清单,这些清单其实是部署的k8s资源清单

改造《6.云原生之DevOps和CICD》中项目,将kustomize资源清单加上,目录结构如下:

image.png
上述项目结构其实是存在问题的,业务源码和部署清单还在耦合一个项目中,职能不够清晰,如何处理?

  1. 需剥离分为两个仓库

剥离带来新的问题,就是业务源码修改发布新版本,开发人员手动打包镜像,通知运维人员更新配置清单中版本,最后发布。如何处理?上述问题其实是解决开发人员和运维人员协作问题,及CI问题

  1. CI如何处理?通过gitlab的ci来实现

注意:若想测试自行将项目拆分,将kustomize拆分为单独的代码仓库,代码仓库如下:
https://github.com/zhouwei1996/argocd-in-action
https://github.com/zhouwei1996/flask-demo
https://github.com/zhouwei1996/flask-demo-kustomize

GitLab CI/CD

GitLab CI/CD(持续集成/持续交付)是 GitLab 提供的一套集成开发工具,用于自动化构建、测试和部署应用程序。它提供了一个强大的持续集成和持续交付平台,可以帮助开发团队更高效地管理和交付软件。

  1. 持续集成(Continuous Integration,CI)
    持续集成是指将开发人员的代码频繁地集成到共享的主干代码库中。在持续集成中,开发人员会将代码提交到版本控制系统(如 GitLab),然后自动触发构建、测试和代码质量检查等任务。这样可以快速发现和解决代码集成问题,确保团队的代码始终保持可工作状态。GitLab CI 提供了强大的持续集成功能,可以根据您定义的规则和流程自动运行构建和测试作业。
  2. 持续交付/持续部署(Continuous Delivery/Continuous Deployment,CD)
    持续交付和持续部署是在持续集成的基础上进一步推进的概念。它们旨在自动化和简化软件交付过程,以便更频繁地将经过测试和验证的代码部署到生产环境中。持续交付是指在经过测试的代码通过各种环境(如开发、测试、预生产)后,准备好进行部署的过程。持续部署则更进一步,指的是将经过测试的代码自动部署到生产环境,实现快速、可靠的软件交付。GitLab CI/CD 提供了强大的持续交付和持续部署功能,您可以配置自动化的部署流程,并将代码快速部署到目标环境中。

GitLab CI/CD主要特点和功能

  1. 自动化构建和测试:GitLab CI/CD 允许您在代码提交到 GitLab 仓库时自动运行构建和测试作业。您可以定义多个作业,并在每个作业中编写自定义的构建和测试脚本。
  2. 并行执行:GitLab CI/CD 支持并行执行作业,从而加快构建和测试的速度。您可以根据需要在不同的作业中并行执行任务,提高整体的开发效率。
  3. 多阶段流水线:GitLab CI/CD 使用阶段(stages)来组织作业的执行顺序。您可以定义多个阶段,并在每个阶段中运行一系列的作业。这使得您可以按照特定的流程对代码进行构建、测试和部署。
  4. 集成容器技术:GitLab CI/CD 集成了容器技术,如 Docker,使得构建和测试环境的配置更加灵活和可重复。您可以使用 Docker 容器来创建一致的开发和测试环境,确保代码在不同的环境中具有一致的行为。
  5. 持续交付和部署:GitLab CI/CD 支持持续交付和部署。您可以配置自动化的部署流程,将经过测试的代码自动部署到生产环境或其他目标环境中,从而实现快速、可靠的软件交付。
  6. 可视化界面和报告:GitLab CI/CD 提供了直观的用户界面,用于监视和管理构建和部署流水线。您可以查看作业的执行状态、日志输出以及生成的报告,以便更好地了解整个 CI/CD 流程的状态和结果。
  7. 可扩展性和定制性:GitLab CI/CD 是高度可扩展和可定制的。您可以根据项目的需求配置各种不同的构建、测试和部署策略。它还支持与其他工具和服务的集成,如监控系统、通知系统等。

GitLab CI/CD 的灵活性和功能丰富性使得开发团队能够更好地管理和交付软件,提高开发效率和质量。它是一个强大的工具,适用于各种规模和类型的项目。

手动触发CD过程

  1. 添加kustomize项目代码仓库

image.pngimage.pngimage.png
kustomize项目介绍
image.png
其中deployment.yaml中使用镜像为CI构建的镜像

  1. 查看不部署流水线

image.png

  1. 查看部署情况

image.png

CICD工作流实战

image.png

CI过程:

  1. 拉取代码
  2. maven打包
  3. 构建镜像并推送

CD过程:

  1. 推送kustomize项目修改代码
  2. Argo CD创建应用后会轮训检查git仓库,发现有修改会自动同步

kustomize项目结构设计

  1. 运维清单项目结构设计如下

image.png

base下为基本资源一般不动,build下为构建后的资源,overlay下为补丁资源。
kustomize参考:kustomization官网 | github上案例

CD过程gitlab-ci.yaml脚本

  1. CI过程参考22.云原生之GitLab CICD实战及解析【干货】,这儿小编不在过多介绍。此处主要介绍CD过程。触发argocd cd过程方式:

1、手动触发:argocd创建应用时指定手动触发
2、自动触发:argocd创建应用时指定自动触发,当代码提交后argocd会轮训自动触发
3、自动触发:push 镜像后,基于Argo CD Image Updater自动触发
4、自动触发:提交代码后,在gitlab-ci中通过api触发argocd同步

deploy:
  stage: deploy
  image: argoproj/argocd-cli:v2.1.3
  script:
    - argocd login <argocd-server> --username <username> --password <password>
    - argocd app create <app-name> --repo <git-repo-url> --path <path-to-app> --dest-server <argocd-server> --dest-namespace <namespace> --revision <git-revision> --sync-policy <sync-policy>
    - argocd app sync <app-name>
  1. 本篇主要讲述提交代码后触发方式,gitlab-ci.yaml脚本如下:
deploy:
  stage: deploy
  image: cnych/kustomize:v1.0
  before_script:
    - git remote set-url origin http://root:zhouwei1996@192.168.31.3:83/root/kustomize.git
    - git config --global user.email "gitlab@git.k8s.local"
    - git config --global user.name "GitLab CI/CD"
  script:
    # 进入保存构建后的项目目录
    - cd /builds/project-target
    # 删除kustomize项目,以便后续git拉取
    - rm -rf ./kustomize
    # 拉取kustomize项目
    - git clone http://git账号:git密码@192.168.31.3:83/root/kustomize.git
    # 进入dev补丁目录
    - cd ./kustomize/kustomize-devops-web/overlay/dev
    # 修改镜像
    - kustomize edit set image harbor域名/library/devops-web:$CI_COMMIT_BEFORE_SHA
    # build生成新的完整部署资源,并输出到build.yaml
    - kustomize build > ../../build/build.yaml
    # 提交代码
    - git add /builds/project-target/kustomize/kustomize-devops-web/
    - git commit -am "image update"
    - git push -u origin main

git账号密码建议gitlab中定义全局变量,基本中引用

测试CICD过程

  1. 在CICD测试前需先AcgoCD创建应用

核心配置:配置gitlab中kustomize项目和路径。其他配置参考本章《手动触发CD过程》
image.png

  1. 提交代码,登录gitlab查看流水线

image.png

  1. 主要查看deploy过程日志

image.png
image.png

验证部署是否使用最新镜像

验证镜像tag是否为上述b1b464712fc4ca335d8dec5b837d711c33f1b606

  1. 登录gitlab查看build.yaml

image.png

  1. 查看harbor中镜像

image.png

  1. 查看部署情况,及部署资源使用的image

image.png
image.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值