CI/CD流水线是一组检测代码更改的工具,并可以根据组织的流程和策略将更改一直推送到生产环境。这个流水线通常是由DevOps工程师构建和维护,供开发人员使用。

CI/CD流水线的基本思想是:每当开发人员提交更改到源代码控制系统(例如GitHub)时,这些更改都会立即被持续集成(Continuous Integration,CI)系统检测到并进行测试。

接下来通常会进行代码评审,并将来自功能分支或开发分支的代码更改(或者pull请求)合并到主分支。在Kubernetes的上下文中,CI系统还负责为服务构建Docker镜像并将它们推送到镜像仓库。现在,我们有了包含新代码的Docker镜像,接着就是CD系统发挥作用的时候了。

当有新镜像可用时,持续交付(Continuous Delivery,CD)系统将把它部署到目标环境中。通过预置和部署,CD可以确保整个系统处于目标状态。有时,如果系统不支持动态配置,则可能由于配置更改而发生部署。

k8s(4):GitOps 与 CircleCI 持续交付 - 图1

该流水线的各阶段功能如下:

  • 开发人员将他们的更改提交给GitHub(源代码控制)。
  • CI服务器运行测试、构建Docker镜像,并将镜像推到DockerHub(镜像仓库)。
  • Argo CD服务器检测到有一个新镜像可用,然后将其部署到Kubernetes集群。

1. GitOps

GitOps是基础设施即代码(Infrastructure asCode,IaC)的另一种变体,其基本思想是应该对所有代码、配置及其所需的资源进行描述,并将其存储在源代码控制仓库中。每当你对代码仓库进行更改时,CI/CD解决方案都会做出响应并采取正确的措施,甚至可以通过还原到代码仓库中的先前版本来启动回滚。

CircleCI和Argo CD都完全支持并推崇GitOps模型。当对代码进行git push更改时,CircleCI将被触发并开始构建镜像。当对Kubernetes清单进行git push更改时,Argo CD将被触发并将这些更改部署到Kubernetes集群。

2. 使用CircleCI构建镜像

测试用项目:https://github.com/ffzs/quarkus_demo_circleci

circleci官网:https://circleci.com/

circleci 操作界面:https://app.circleci.com/

2.1 编写配置

在项目的目录.circleci/config.yml文件中编写配置:

  • docker中编写流程中需要使用的镜像,配置环境变量等
  • checkout检查代码完整性
  • setup_remote_docker:在容器内运行一个docker
  • run在容器内执行的内容:编译服务->登入docker hub->生成image->上传image到私有仓库
  1. version: 2
  2. jobs:
  3. build:
  4. docker:
  5. - image: circleci/openjdk:11-jdk-stretch
  6. environment:
  7. POSTGRE_HOST: localhost
  8. - image: circleci/postgres:10.5
  9. environment:
  10. POSTGRES_USER: ffzs
  11. POSTGRES_PASSWORD: 123zxc
  12. POSTGRES_DB: mydb
  13. steps:
  14. - checkout
  15. - setup_remote_docker:
  16. - run:
  17. name: build docker image
  18. shell: /bin/bash
  19. command: |
  20. chmod +x mvnw
  21. ./mvnw package
  22. docker login -u ffzs -p $DOCKERHUB_PASSWORD
  23. cp src/main/docker/Dockerfile.jvm Dockerfile
  24. docker build -t ffzs/quarkus_demo .
  25. docker push ffzs/quarkus_demo

2.2 circleci 操作

  • 首先根据github账号登录
  • 然后根据选取你要持续交付的项目set up project

k8s(4):GitOps 与 CircleCI 持续交付 - 图2

  • 然后点击Use Existing Config
  • 再点击Start Building使用项目中的config.yml文件

k8s(4):GitOps 与 CircleCI 持续交付 - 图3

  • 会根据加载的config中设置好的流程运行

k8s(4):GitOps 与 CircleCI 持续交付 - 图4

  • 可以通过dashboard查看运行情况以及日志

k8s(4):GitOps 与 CircleCI 持续交付 - 图5

  • 成功和失败的情况

k8s(4):GitOps 与 CircleCI 持续交付 - 图6

  • 成功的话docker hub就会出现推送的镜像

k8s(4):GitOps 与 CircleCI 持续交付 - 图7

2.3 添加敏感环境变量

  • 点击Project Setting

k8s(4):GitOps 与 CircleCI 持续交付 - 图8

  • 选中环境变量配置项,添加即可,这里我配置了我的docker hub的密码

k8s(4):GitOps 与 CircleCI 持续交付 - 图9