diff --git a/docs/.vuepress/config.js b/docs/.vuepress/config.js index 59c28b3..1d7c1f6 100644 --- a/docs/.vuepress/config.js +++ b/docs/.vuepress/config.js @@ -1,6 +1,6 @@ module.exports = { - title: "Cloud Security",// 文档标题,左上角显示 - description: "Cloud Security", + title: "Security Cloud",// 文档标题,左上角显示 + description: "Security Cloud", markdown: { lineNumbers: true // 代码块显示行号 }, @@ -61,6 +61,7 @@ module.exports = { '/ci-cd/drone/', '/ci-cd/harbor/', '/ci-cd/rancher/', + '/ci-cd/integration/', ] // 根据自己的需求来订,对应自己在docs下的文件夹名,默认首页是README.md }, ] diff --git a/docs/ci-cd/README.md b/docs/ci-cd/README.md index cf86fcb..5820e16 100644 --- a/docs/ci-cd/README.md +++ b/docs/ci-cd/README.md @@ -1,4 +1,4 @@ -# CI/CD +# 关于CI/CD CI/CD 具有不同的含义, "CI"始终指持续集成,它属于开发人员的自动化流程。"CD"指的是持续交付和/或持续部署,这些相关概念有时会交叉使用。在现在的devops模式下,可以使用ci/cd持续集成对项目进行部署,通过,ci/cd中的一些环境变量则可以区分出对应的环境,以便于软件开发流程的控制。 ## CI 持续集成(Continuous Integration) diff --git a/docs/ci-cd/harbor/README.md b/docs/ci-cd/harbor/README.md index 1f1e011..7ef2027 100644 --- a/docs/ci-cd/harbor/README.md +++ b/docs/ci-cd/harbor/README.md @@ -1,4 +1,4 @@ -# Harbor介绍 +# Harbor Harbor 是由 VMware 开源的一款云原生制品仓库,Harbor 的核心功能是存储和管理 Artifact。Harbor 允许用户用命令行工具对容器镜像及其他 Artifact 进行推送和拉取,并提供了图形管理界面帮助用户查看和管理这些 Artifact。在 Harbor 2.0 版本中,除容器镜像外,Harbor 对符合 OCI 规范的 Helm Chart、CNAB、OPA Bundle 等都提供了更多的支持。 ![](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/3b77b4831446430f8545af9961979903~tplv-k3u1fbpfcp-zoom-1.image) diff --git a/docs/ci-cd/integration/README.md b/docs/ci-cd/integration/README.md new file mode 100644 index 0000000..3eac3b7 --- /dev/null +++ b/docs/ci-cd/integration/README.md @@ -0,0 +1,137 @@ +# 集成 +Security Cloud 采用前后端分离试开发,后端为Spring Cloud 体系架构,前端现有React,后期会继续更新Vue3.0版本前端页面 + +## gitea + drone 集成 +在安装drone的时候可知,drone需要获取到gitea的oauth2的授权,这样drone就可以通过携带秘钥信息去请求到gitea当前用户下的所有仓库了 + +当gitea中的仓库有request的时候,gitea会发送一个Web沟子请求到drone +![webhook.png](./webhook.png) + +请求内容中就会包括到当前提交的相关信息,drone就可以拿到这些信息获取到gitea仓库中的最新代码 + +## drone + k8s(rancher) +drone触发k8s是非常简单的,需要准备一个带有kubectl命令行工具的docker镜像,当drone的steps运行到了这一步了之后,只需要使用命令行工具运行: +```shell + kubectl apply -f deployment.yml -n dev --kubeconfig=/app/config/kubectl_conf.yml +``` +其中 kubectl_conf.yml 则是k8s的连接配置文件,deployment.yml文件则是需要构建内容的配置文件 + +当命令成功运行后,即可在k8s中看到新构建的内容,但是现在看来drone只是触发了k8s的构建,但是k8s构建所需要的docker镜像现在还未知,在docker中有一种叫做docker镜像仓库的存在,我们制作好的docker镜像就可以推送到镜像仓库中,并将仓库中对应的docker pull路径放到deployment.yml文件中,可以由k8s pull下来。 + +## Harbor +Harbor是一个docker的镜像仓库,他可以独立部署,在drone和k8s中当做粘合剂,当drone中构建好了对应docker镜像后,将docker镜像推送到harbor,然后将pull 的路径又放到k8s的deployment.yml文件中,这样全链路就打通了。 + +## 前端 +在前端项目中,有这 +``` + .drone.yml -- drone ci/cd管道配置命令 + deployment.yml -- k8s部署文件 + default.conf -- Nginx的映射配置文件 + Dockerfile -- 将前端的打包内容构建docker镜像的文件 + docker.sh -- 进行docker打包,并且按照约定格式推送到Harbor仓库 + .dockerignore -- docker的ignore文件 +``` + +## .drone.yml文件内容详情 + +```yaml +kind: pipeline # drone配置文件类型 pipeline管道 +type: docker # 使用对应steps对应的类型,drone是基于docker容器进行每一个步骤的 +name: security-react # 本次构建任务的名称 + +steps: + - name: build-package-react # 当前steps的名称 + image: node:16.18.0 # 需要使用到的镜像,与react项目中packjson中配置的node版本一致 + volumes: # 将容器内容部的地址映射到宿主机上 + - name: cache # node构建是的缓存,防止多次下载,提高build速度 + path: /drone/src/node_modules + - name: build # 内容挂在,将打包的好产物放到当前目录下,方便后续steps的时候 + path: /app/build + commands: # 容器中需要执行的命令 + - export CI=false + - rm -rf /app/build/react/* # 初始化需要使用的目录 + - cp deployment.yml /app/build/react/ # 将k8s构建文件cp到产物挂在目录 + - cp Dockerfile /app/build/react/ # + - cp .dockerignore /app/build/react/ + - cp default.conf /app/build/react/ + - cp docker.sh /app/build/react/ + - cp nginx.conf /app/build/react/ + - mkdir -p ./node_modules # 创建node依赖目录 + - export NODE_MODULES_PATH=`pwd`/node_modules # 构建与缓存目录之间的关联 +# - npm config set registry https://registry.npm.taobao.org # 可以开启淘宝npm的镜像加速 +# - set NODE_OPTIONS=--openssl-legacy-provider + - npm install # 下载依赖,虽然已经进行了依赖的缓存,但是一旦有新的依赖加入,缓存中没有则无法构建,所以还需要install一下 + - npm run build # 开始构建产物 + - mkdir -p /app/build/react # 创建存放产物的映射目录 + - cp -r build /app/build/react # 将打包好之后的内容放入的对应的目录中 + + + - name: build-docker # 制作docker镜像 + image: docker # 使用官方docker镜像 + volumes: # 将容器内目录挂载到宿主机 + - name: build + path: /app/build + - name: docker # 挂载宿主机的docker + path: /var/run/docker.sock + - name: config + path: /config + environment: # 获取到密文的docker用户名和密码 + DOCKER_USERNAME: + from_secret: docker_username + DOCKER_PASSWORD: + from_secret: docker_password + REGISTRY: + from_secret: registry + REGISTRY_NAMESPACE: + from_secret: registry_namespace + commands: # 定义在Docker容器中执行的shell命令 + - cd /app/build/react/ + - cat Dockerfile + # 将一下文件中的密文信息替换成对应的内容 + - sed -i 's/$REGISTRY/'"$REGISTRY"'/' deployment.yml + - sed -i 's/$REGISTRY_NAMESPACE/'"$REGISTRY_NAMESPACE"'/' deployment.yml + - sed -i 's/$DRONE_REPO_NAME/'"$DRONE_REPO_NAME"'/' deployment.yml + - sed -i 's/$DRONE_COMMIT/'"$DRONE_COMMIT"'/' deployment.yml + # docker登录,不能在脚本中登录,并且不能使用docker login -u -p + - echo $DOCKER_PASSWORD | docker login $REGISTRY --username $DOCKER_USERNAME --password-stdin + - chmod +x docker.sh + - sh docker.sh # 运行docker打包脚本 + # 执行完脚本删除本次制作的docker镜像,避免多次后当前runner空间不足 + - docker rmi -f $(docker images | grep $DRONE_REPO_NAME | awk '{print $3}') + + - name: drone-rancher # rancher运行 + image: registry.cn-hangzhou.aliyuncs.com/claywang/kubectl #阿里云的kubectl镜像,里面包含kubectl命令行工具 + volumes: # 将容器内目录挂载到宿主机 + - name: build + path: /app/build # 将应用打包好的Jar和执行脚本挂载出来 + - name: config + path: /app/config # 将kubectl 配置文件挂载出来 + commands: # 定义在Docker容器中执行的shell命令 + - cd /app/build/react/ + # 将deployment中定义的变量替换为drone中的内置变量 + - cat deployment.yml + # 通过kubectl指令运行deployment.yml,并指定授权文件kubectl_conf.yml + - kubectl apply -f deployment.yml -n dev --kubeconfig=/app/config/kubectl_conf.yml + + +volumes: + - name: build + host: + path: /home/build + - name: cache + host: + path: /var/lib/npm/cache + - name: config # k8s对接的配置文件 + host: + path: /.kube/config + - name: maven-cache # maven的缓存文件 + host: + path: /home/data/maven/cache + - name: docker # 宿主机中的docker + host: + path: /var/run/docker.sock +``` + + + + diff --git a/docs/ci-cd/integration/webhook.png b/docs/ci-cd/integration/webhook.png new file mode 100644 index 0000000..880396d Binary files /dev/null and b/docs/ci-cd/integration/webhook.png differ