CI/CD流水线是一组检测代码更改的工具,并可以根据组织的流程和策略将更改一直推送到生产环境。这个流水线通常是由DevOps工程师构建和维护,供开发人员使用。
CI/CD流水线的基本思想是:每当开发人员提交更改到源代码控制系统(例如GitHub)时,这些更改都会立即被持续集成(Continuous Integration,CI)系统检测到并进行测试。
接下来通常会进行代码评审,并将来自功能分支或开发分支的代码更改(或者pull请求)合并到主分支。在Kubernetes的上下文中,CI系统还负责为服务构建Docker镜像并将它们推送到镜像仓库。现在,我们有了包含新代码的Docker镜像,接着就是CD系统发挥作用的时候了。
当有新镜像可用时,持续交付(Continuous Delivery,CD)系统将把它部署到目标环境中。通过预置和部署,CD可以确保整个系统处于目标状态。有时,如果系统不支持动态配置,则可能由于配置更改而发生部署。
该流水线的各阶段功能如下:
- 开发人员将他们的更改提交给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:
在容器内运行一个dockerrun
在容器内执行的内容:编译服务->登入docker hub->生成image->上传image到私有仓库
version: 2
jobs:
build:
docker:
- image: circleci/openjdk:11-jdk-stretch
environment:
POSTGRE_HOST: localhost
- image: circleci/postgres:10.5
environment:
POSTGRES_USER: ffzs
POSTGRES_PASSWORD: 123zxc
POSTGRES_DB: mydb
steps:
- checkout
- setup_remote_docker:
- run:
name: build docker image
shell: /bin/bash
command: |
chmod +x mvnw
./mvnw package
docker login -u ffzs -p $DOCKERHUB_PASSWORD
cp src/main/docker/Dockerfile.jvm Dockerfile
docker build -t ffzs/quarkus_demo .
docker push ffzs/quarkus_demo
2.2 circleci 操作
- 首先根据github账号登录
- 然后根据选取你要持续交付的项目
set up project
- 然后点击
Use Existing Config
- 再点击
Start Building
使用项目中的config.yml文件
- 会根据加载的config中设置好的流程运行
- 可以通过
dashboard
查看运行情况以及日志
- 成功和失败的情况
- 成功的话docker hub就会出现推送的镜像
2.3 添加敏感环境变量
- 点击
Project Setting
- 选中环境变量配置项,添加即可,这里我配置了我的docker hub的密码