DevOps系列文章之 设计一个简单的DevOps系统

news/2024/11/28 23:42:11/

前置条件

gitlab
gitlab-runner
k8s

docker

1. gitlab创建群组

创建群组的好处是,对项目进行分组,群组内的资源可以共享,这里创建了一个tibos的群组

2. 在群组创建一个项目

这里创建一个空白项目,项目名为Gourd.Test,将项目克隆到本地,然后在该目录下创建一个.net core3.1的webapi项目,并推送到gitlab

 

3.编写dockerfile

FROM registry.cn-hangzhou.aliyuncs.com/wmowm/dotnet.core.aspnet:3.1 AS base
WORKDIR /app
EXPOSE 80LABEL applabel=tibosFROM registry.cn-hangzhou.aliyuncs.com/wmowm/dotnet.core.sdk:3.1 AS build
WORKDIR ../Gourd.Test
COPY . .
WORKDIR "/Gourd.Test"
RUN dotnet publish "Gourd.Test.csproj" -c Release -o /appFROM base AS final
WORKDIR /app
COPY --from=build /app .
RUN rm -rf appsettings.Development.json
RUN cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \
&& echo 'Asia/Shanghai' >/etc/timezone
ENTRYPOINT ["dotnet", "Gourd.Test.dll","-b","0.0.0.0"]

这里给镜像加了一个标签(LABEL applabel=tibos),方便清理

4.编写 gitlab-ci.yml

variables:PROJECT_NAME: gourd.testWEBAPI_DOCKERFILE_PATH: ./Gourd.Test/dockerfile
stages:
- build
- deploy
build:stage: buildscript:- echo "登录私有仓库"- docker login --username=${DOCKER_REPOSTORY_USERNAME} -p ${DOCKER_REPOSTORY_PASSPORD} ${DOCKER_REPOSTORY_ADDRESSURL}- imageversion=$CI_PIPELINE_ID- echo "开始构建镜像:${PROJECT_NAME}.${imageversion}"- docker build -t ${PROJECT_NAME}.${imageversion} .- echo "打标签:${DOCKER_REPOSTORY_ADDRESSURL}/${DOCKER_REPOSTORY_NAME}/${PROJECT_NAME}:${imageversion}"- docker tag ${PROJECT_NAME}.${imageversion} ${DOCKER_REPOSTORY_ADDRESSURL}/${DOCKER_REPOSTORY_NAME}/${PROJECT_NAME}:${imageversion}- echo "推送到中央仓库"- docker push ${DOCKER_REPOSTORY_ADDRESSURL}/${DOCKER_REPOSTORY_NAME}/${PROJECT_NAME}:${imageversion}- echo "清理未使用的镜像"- docker image prune -a -f --filter="label=applabel=tibos"- docker rmi $(docker images | grep "none" | awk '{print $3}')only:- main

白话文翻译ci配置
定义了两个变量,项目名称与dockerfile相对地址,然后执行构建步骤,构建脚本如下

  1. 登录docker私有仓库,这里是bp的阿里云的docker仓库,后文会讲如何bp
  2. 定义镜像版本号,这里直接取gitlab-ci内置的流水线编号作为版本号,gitlab-ci内置了很多环境变量,可以查阅文档
  3. 构建镜像
  4. 镜像打标签
  5. 推送到阿里云docker仓库
  6. 清理未使用且包含tibos标签的镜像

5.敏感信息,使用ci的变量进行保护

6.bp阿里云镜像仓库

 

先创建一个名称空间,然后根据自己的项目名称创建对应的仓库即可,也可以把外网的一些镜像打个标签,推送到自己的镜像仓库,这样从自己的镜像仓库拉取,速度会快很多

 

在镜像版本里查看自己推送的镜像,这些都是gitlab-ci 构建成功,推送过来的
 

7.注册runner

我这里是创建的团队runner,这样团队项目可以共享该runner,注册好后编辑runner,勾选运行未标记的作业,怎么注册gitlab-runner网上有很详细的教程,这里就不多赘述了

 

gitlab-runner job如下,可以看到.net core 构建还是挺快的

  • 做到这里ci部分就完成了,当我们提交代码的时候,会自动触发gitlab-ci,然后docker构建,并推送到镜像仓库,接下来是cd 部分

8.开启gitlab webhooks功能,将事件消息推送给指定的服务

这里写一个服务,用来接收gitlb webhooks 通过post发送的http请求,下面有它的发送记录,方便我们查找问题,我们根据请求详情,通过vs辅助功能把json一键转换成实体,作为vo,并把数据持久化到数据库,它的状态变化为 created->pending->running->success,可以根据自己的业务进行定制

 

 

9.发布到k8s

发布到k8s有两种途径,1.通过k8s代理,直接调用k8s api, 2.通过shell直接执行k8s命令, 这个根据自己的业务来定制,我这里采用了shell的方式,因为简单方便

k8s api如下

 

10. 设置部署环境

我们可以根据项目分支或者tag来对应不同的环境,如develop,test,pre,prod..... 比如pre环境只能发布master分支的构建记录

11. 通过网页显示容器日志

通过k8s api 或者shell 都可以查询日志, linux服务端日志一般采用ANSI编码,部分内容展示会出现乱码,这里我们用ansi_up.js这个库,可以解决该问题

 

 

 

 

 

 

 

 


http://www.ppmy.cn/news/686891.html

相关文章

学板绘课程学费一般多少钱

学板绘课程学费一般多少钱?培训机构的费用和师资、模式有关,价格贵不贵要结合相同类型的机构多多对比。因为好些平台做了很多的宣传广告,运营成本很高, 终羊毛出在羊身上,这样的机构知名度很高,但是性价比不…

软件测试培训班靠谱吗?一般多少钱?

软件测试是通过测试工具或者人工测试来检验软件产品和服务的准确性和质量,目标是找到软件BUG,并确保其得以修复。大数据、人工智能、5G等新技术是引领未来发展的战略性技术,是经济增长的新引擎,而软件测试行业是互联网发展中必不可…

【1658. 将 x 减到 0 的最小操作数】

目录 一、题目解析二、算法思路三、代码实现 一、题目解析 二、算法思路 三、代码实现 class Solution { public:int minOperations(vector<int>& nums, int x) {int nnums.size();//求出整个数组的值int sum10;for(int i0;i<n;i){sum1nums[i];}//求sum1-x的子数…

Shell中使用read读取控制台输入

Shell中使用read读取控制台输入 read (选项)(参数) 选项&#xff1a; -p: 指定读取值时的提示符&#xff1a; -t: 指定读取值时等待的时间&#xff08;秒&#xff09; 参数&#xff1a; 变量&#xff1a;指定读取值时的变量名 在8秒内提示“请输入您的姓名&#xff1a;”&…

Android App—适配arm64-v8a的探索

目前&#xff0c;华为、小米、三星、OPPO、VIVO等应用商店已经支持32位和64位APP&#xff0c;Google Play已经强制要求上传64位的APP&#xff0c;而且Google明确了在Android 12上只支持64位的APP&#xff0c;32位App将会被抛弃。 随着手机CPU采用arm64-v8a架构达到了90%以上&am…

华为鲲鹏HCIA认证笔记总结四(复习考点附题库)

道阻且长&#xff0c;行则将至。埋头苦干&#xff0c;不鸣则已&#xff0c;一鸣惊人&#xff01;加油&#xff0c;骚年&#xff01; 文章目录 1 参考资料2 笔记总结2.1 华为鲲鹏2.2 TaiShan 服务器2.3 华为云鲲鹏云服务2.4 openEuler2.5 鲲鹏处理器与 X86 处理器的指令差异2.6 …

华为云麒麟arm架构docker启动redis报错:<jemalloc>: Unsupported system page size

在 ARM 架构的华为云服务器上&#xff0c;运行 Redis 容器时出现 “jemalloc: Unsupported system page size” 错误&#xff0c;这通常是因为服务器的页面大小不受 jemalloc 库支持所导致的。 为了解决这个问题&#xff0c;您可以尝试将 Redis 容器启动命令中添加--memory-sw…

39|源码解读:V8执行JS代码的全过程

39&#xff5c;源码解读&#xff1a;V8 执行 JS 代码的全过程 你好&#xff0c;我是LMOS。 前面我们学习了现代浏览器架构&#xff0c;也大致了解了浏览器内核的工作原理。在浏览器的内核中&#xff0c;V8 是一个绕不开的话题。在浏览器中&#xff0c;Chrome 的重要地位不用赘…