[实习]git ci/cd概念,创建流程以及常见字段含义

1.基本概念

1.1 CI/CD

CI,Continuous Integration,为持续集成。即在代码构建过程中持续地进行代码的集成、构建、以及自动化测试等;有了 CI 工具,我们可以在代码提交的过程中通过单元测试等尽早地发现引入的错误;
CD,Continuous Deployment,为持续交付。在代码构建完毕后,可以方便地将新版本部署上线,这样有利于快速迭代并交付产品。

1.2 GitLab CI/CD

GitLab CI/CD(后简称 GitLab CI)是一套基于 GitLab 的 CI/CD 系统,可以让开发人员通过 .gitlab-ci.yml 在项目中配置 CI/CD 流程,在提交后,系统可以自动/手动地执行任务,完成 CI/CD 操作。而且,它的配置非常简单,CI Runner 由 Go 语言编写,最终打包成单文件,所以只需要一个 Runner 程序、以及一个用于运行 jobs 的执行平台(如裸机+SSH,Docker 或 Kubernetes 等,我推荐用 Docker,因为搭建相当容易)即可运行一套完整的 CI/CD 系统。

GitLab提供持续集成服务。如果添加一个.gitlab-ci.yml文件到项目根目录,并配置GitLab项目使用某个Runner,然后每一次提交或者是推送都会触发CI pipeline.

.gitlab-ci.yml文件会告诉GitLab Runner 做什么。默认情况下,它运行一个pipeline,分为三个阶段:build,test,deploy。你并不需要用到所有的阶段,没有job的阶段会被忽略。

如果一切运行正常(没有非零的返回值),您将得到与commit关联的漂亮的绿色标记。这使得在查看代码之前,很容易就能看出是否有一个提交导致了测试失败。

大多数项目使用GitLab CI服务来运行测试套件,这样如果开发人员发现问题就会及时得到反馈。

下面针对 Gitlab CI 平台的一些基本概念做一个简单介绍:

Job

	Job 为任务,是 GitLab CI 系统中可以独立控制并运行的最小单位。 
	在提交代码后,开发者可以针对特定的 commit。完成一个或多个 job,从而进行 CI/CD 操作。

Pipeline

	Pipeline 即流水线,可以像流水线一样执行多个 Job. 
	在代码提交或 MR 被合并时,GitLab 可以在最新生成的 commit上建立一个 pipeline,
	在同一个 pipeline 上产生的多个任务中,所用到的代码版本是一致的。

Stage

	一般的流水线通常会分为几段;在 pipeline中,可以将多个任务划分在多个阶段中,
	一般只有当前一阶段的所有任务都执行成功后,下一阶段的任务才可被执行。

注:如果某一阶段的任务均被设定为“允许失败”,那这个阶段的任务执行情况,不会影响到下一阶段的执行。

2. CI/CD 流程配置

2.1 完整定义

GitLab 允许在项目中编写 .gitlab-ci.yml 文件,来配置 CI/CD 流程。

下面,我们来编写一个简单的测试→构建→部署的 CI/CD 流程。

首先,可以定义流程所包含的阶段。我们的流程包含三个阶段:测试、构建和部署。
在 .gitlab-ci.yml 的开头,定义好所有阶段、以及执行每个任务之前所需要的环境变量以及准备工作,然后定义整个流程中包含的所有任务:

stages:
  - test
  - build
  - deploy

variables:
  IMAGE: docker.registry/name/${CI_PROJECT_NAMESPACE}-${CI_PROJECT_NAME}

before_script:
  - IMAGE_TAG=${IMAGE}:${CI_COMMIT_SHA:0:8}

test_all:
  image: "pymicro"
  stage: test
  services:
    - name: mysql:5.6
      alias: mysql
  veriables:
    MYSQL_DATABASE: db
    MYSQL_ROOT_PASSWORD: password
  before_script:
    - pip install -U -r requirements.txt
  script:
    - flake8 app
    - pytest tests

build_image:
  image: "docker:17.11"
  stage: build
  services:
    - name: "docker:17.12.0-ce-dind"
      alias: dockerd
  variables:
    DOCKER_HOST: tcp://dockerd:2375
  only:
    - master
  tags:
    - build
  script:
    - docker build -t ${IMAGE_TAG} -f Dockerfile .
    - docker push ${IMAGE_TAG}

deploy_production:
  stage: deploy
  variables:
    GIT_STRATEGY: none
  only:
    - master
  when: manual
  tags:
    - deploy-production
  script:
    - kubectl set image deploy/myproject "app=${IMAGE_TAG}" --record

在每个任务中,通常会包含 image, stage, services, script等字段。

其中,stage定义了任务所属的阶段。比如你命名了deploy_production,用作说明这里是要干嘛的,然后在下面写了stage: deploy,就知道属于初始定义的三个阶段的deploy阶段。

image字段指定了执行任务时所需要的 docker 镜像;

services指定了执行任务时所需的依赖服务(如数据库、Docker 服务器等);

script直接定义了任务所需执行的命令,一般就是脚本指令。

2.2 测试

在测试任务中,我们启动了 MySQL 服务,并通过环境变量注入了 MySQL 的初始数据库以及 Root 密码,在服务启动后,Runner 会运行 before_script中的命令来安装所需依赖;安装成功后就会运行 script属性中的命令来进行代码风格检查以及单元测试;
可以注意到,我们的 MySQL 服务下有一个alias属性标识服务别名。如果你的 Runner 运行在 Docker 平台下,你可以直接通过服务别名访问到该测试环境中对应的服务。比如在这个任务中,我们就可以用 mysql://root:password@mysql/db来访问测试数据库。

2.3 构建

在构建任务中,我们会用Dockerfile注入依赖,将工程打包成 Docker 镜像并上传;

我们为这个任务定义了一些额外的属性tags属性可以标记这个任务将在含有特定 tags的 CI Runner 上运行;

only属性表示只有这个 commit 在特定的分支下(如 master)时,才可以在此 commit 上运行这个任务。换句话说就是指明了job的执行场景,可以是分支名,表明只有 某个分支可以执行build,如果要用排除法反向指定,可以用except

另外,我们在 before_scripts 中,通过环境变量拿到了项目所属的组,以及项目名称。GitLab 会在运行任务前,向环境中注入很多环境变量,来表明运行环境以及上下文。所有的环境变量列表可以看文档。

2.4 部署

在部署任务中,我们会用kubectl set image命令将我们刚刚构建的镜像发布到生产环境。
这个任务中的 when 表示运行该任务所需要的必要条件,如前一阶段任务全部成功。when: manual表示该操作只允许手动触发。该属性具有四个选项,具体请见文档,很常见的还有on success

至此,我们在 .gitlab-ci.yml 中定义了一套完整的测试→构建→部署流程。

原文链接: https://blog.stdioa.com/2018/06/gitlab-cicd-fundmental/

1、项目工具 (1)Intellij IntelliJ IDEA是JetBrains公司推出的Java集成开发环境(IDE),自2001年发布首个版本以来,凭借其深度代码分析能力、上下文感知的智能代码补全、高效的项目管理机制以及对主流框架的广泛兼容性,在Java开发者群体中获得了极高的认可度。相较于Eclipse和MyEclipse等传统IDE,IntelliJ IDEA的核心优势在于其以开发者效率为中心的设计哲学。它通过提供实时代码质量检测、强大的重构工具集以及高度自动化的编码辅助,显著优化了开发工作流。因此,该IDE在构建复杂企业级系统、实施微服务架构以及Android 应用程序开发等领域已成为业界广泛采用的首选工具。 (2)MySQL MySQL作为当前主流的关系型数据库管理系统(RDBMS),与Oracle、SQL Server等同属行业核心解决方案。本系统选用MySQL主要基于其以下优势: 开源与跨平台:遵循GPL协议开源,可免费使用与修改,并支持在Windows、Linux、macOS等主流操作系统部署。 多语言支持:提供API(应用程序编程接口)支持C、C++、Java、Python等多种编程语言的集成开发。 灵活连接性:支持包括TCP/IP (网络协议)、ODBC(开放数据库连接)、JDBC (Java 数据库连接)在内的多种标准数据库连接协议。 核心数据操作:支持数据库的创建、维护以及数据的存储、检索(查询)、更新、删除 (CRUD 操作),并能有效保障与其他系统集成的数据完整性。 成本效益:相较于部分商业数据库,采用MySQL可显著降低项目的总体拥有成本。 (3)小程序技术 程序是一种建立在Java语言基础之上的Web应用技术。通过小程序技术可以建立先进的安全动态网站。小程序页面无论执行什么样的操作都可以用servlet来完成,而且小程序页面最终都会转换成servlet页面。但是两者之间又存在着便利性、生产率的不同。在小程序技术中可以编写JavaScript脚本语言,封装出现动态网页效果的逻辑。 小程序是在 Java的基础上的,所以有很多好处,下面列出了几点: 在任何地方都可以编写,代码不需要进行改动。 能够在任何状况下进行设计,发展,进行多个系统平台的支持,被开发人员所熟知。 强大的可塑性,亦可越过多台Application管理问题。 在小程序中,不仅具有Java的东西,本身也是非常很强的。 2、绪论 随着电子计算机与计算技术[1]的飞速发展,互联网革命已成为势不可挡的第五次工业革命。在计算机技术不断进步的同时,网络技术也迅速跟进,3G、4G、5G 乃至 6G 移动通信技术以及 Wi-Fi 网络的应用层出不穷[2]。移动网络在手机上的快速发展,使智能手机逐渐成为人们日常生活中不可或缺的重要工具[3]。当前,网络技术在各类终端平台上的信息传输速度达到了人类历史上前所未有的高度。与此同时,随着计算机网络和终端设备的发展,大量计算机软件也随之不断演进与更新[4]。 进入21世纪以来,计算机软件已广泛融入社会生活的方方面面。例如,在餐饮领域,用户无需外出,只需通过一个应用程序即可选购所需食物并由商家配送上门[5];在出行方面,用户无需站在路边等待,打车软件能够将用户的实时位置发送给司机,司机便可前往指定地点接送乘客[6];在购物方面,用户同样可以足不出户,通过电商平台选购心仪商品,并完成在线支付,商家则通过物流系统将商品送达用户手中,用户还可随时查询物流信息,实现全流程可视化管理。 在这一数字化时代背景下,互联网已不再是年轻人的专属领域,越来越多的老年人和儿童也开始频繁使用互联网服务[7]。目前主流的网购平台如淘宝、京东、拼多多等占据了巨大的市场份额,但这些大型平台在校园二手交易场景中存在明显不足,难以提供便捷、友好的用户体验[7]。因此,本系统的开发正是为了解决这一问题而提出的。 本实习项目基于 Spring Boot 后端框架与微信小程序前端技术,设计并实现了校园二手交易平台。该平台旨在为高校师生提供一个便捷高效的二手物品交易渠道。通过前后端技术的有效整合,实现了包括商品信息发布、浏览、搜索、交易流程管理及即时通讯在内的多项功能,推动了校园资源的循环利用。数据库方面,采用轻量且高效的 MySQL 数据库,以提升数据访问效率。系统整体架构基于经典的 Spring Boot 框架构建,并结合 jQ 实现页面的数据请求与动态交互效果[8]。 当用户发起浏览器请求时,页面请求首先由 Spring 框架统一调度管理,并传递至 Struts 配置文件进行路由解析[9]。随后,Struts 将请求转发至对应的 Controller 层,由逻辑层对数据进行处理。处理完成后,数据经由 Spring 统一管理,传递至下一层进行持久化操作。最终,系统通过 Hibernate 框架访问并管理基于 JDBC 连接的数据库,实现对数据的增删查改等基本操作。操作结果再通过上述流程反馈给用户,从而实现在前端页面的展示与交互[10]。 4.3.2核心功能模块开发 1、首页模块 首页是用户进入小程序后首先看到的页面,包含轮播图、搜索框、热门商品推荐、最新商品列表等模块。轮播图用于展示平台的活动或重要信息,搜索框方便用户快速查找需要的商品,热门商品推荐和最新商品列表则吸引用户浏览和购买。首页布局简洁明了,导航栏清晰,便于用户快速定位到所需功能。 2、分类模块 分类模块将平台上的商品按照不同的类别进行划分,如书籍、电子产品、衣物、生活用品等。用户可以通过点击不同的分类标签,浏览该类别下的所有商品。分类模块提高了用户查找商品的效率,使用户能够更快地找到符合自己需求的商品。 3、发布模块 发布模块允许用户发布自己的二手商品信息,包括商品名称、价格、描述、图片等。用户需要填写完整的商品信息,并上传商品图片,以便其他用户浏览和购买。用户进入发布页面后,按照提示填写商品信息,上传商品图片,提交审核。审核通过后,商品信息将在平台上展示。 4、消息模块 消息模块用于展示用户与平台或其他用户之间的消息通知,包括交易消息、系统通知等。用户可以在此模块查看并回复消息,与买家或卖家进行沟通。消息模块增强了用户之间的互动和沟通,提高了交易的透明度和效率。 5、“我的”模块 “我的”模块是用户的个人中心,包含用户的个人信息、关注列表、收藏列表、粉丝列表、发布的商品、购买的商品、卖出的商品、个人资料编辑、地址管理等子模块。 子模块介绍: 我的关注:展示用户关注的商品或卖家,方便用户快速查看关注对象的动态。 我的收藏:展示用户收藏的商品,便于用户回顾和比较。 我的粉丝:展示关注用户的粉丝列表,增加用户之间的互动和社交属性。 我发布的:展示用户发布的所有商品信息,用户可以进行编辑、删除或查看交易状态。 我买到的:展示用户购买的所有商品信息,包括订单状态、物流信息等。 我卖出的:展示用户卖出的所有商品信息,包括订单状态、买家信息等。 个人资料:允许用户编辑和完善个人信息,如头像、昵称、联系方式等。 地址管理:用于添加、编辑和删除收货地址,方便用户进行交易时的物流配送。 4.3.3数据库设计 本项目包含以下关系模式(下划线的部分为主键) 商品类别(类别ID,类别名称) 用户(用户编号,账号,密码,姓名,性别,年龄,联系方式,住址) 商品(商品ID,名称,商品图片,商品价格,类别ID,介绍) 订单(订单编号,会员编号,商品ID,下单时间,状态,送货地址,付款方式,总金额) 下面列出了系统重要的数据表 用户息表包括主键、用户名、内容、回复时间、QQ内容,如表4- 1所示。 表4- 1 用户信息表 列名 数据类型 长度 允许空 是否主键 说明 id int 11 否 是 主键ID Name int 11 是 否 用户名 content text 1000 是 否 内容 mtime Date 8 是 否 回复时间 Del int 11 是 否 是否删除 Password Varchar 255 是 否 密码 Address Varchar 255 是 否 地址 Sex Varchar 255 是 否 性别 Tel Varchar 255 是 否 电话 Qq Varchar 255 是 否 Qq 商品类别信息表设计如表4- 2所示,主要是记录了商品类别的名称及类别编号。 表4- 2商品类别信息表 列名 数据类型 长度 允许空 是否主键 说明 lei_bieId int 否 是 类别ID Ming_cheng varchar 50 否 否 类别名称 商品信息表设计如表4- 3所示,主要有商品编号、商品名称、商品价格、商品介绍等信息,其中商品ID是主键 表4- 3商品信息表 字段名 说 明 类 型 长 度 可否为空 主键 id 主键ID int 11 否 是 Name 标题 varchar 20 是 否 Isnottejia 是否活动 varchar 8 是 否 Del 是否删除 Int 8 是 否 Miaoshu 内容 text 1000 是 否 Shichangjia 金额 Double 11 是 否 Tejia 活动价 Double 11 是 否 订单信息表设计如表4- 4所示,主要管理订单编号、下单时间、总金额等信息 表4- 4订单信息表 字段名 说 明 类 型 长 度 可否为空 主键 id 主键ID int 11 否 是 uatime 时间 Date 8 否 否 fkuid 名称 int 11 否 否 fkaid 管理系统 int 11 否 否 Zhuangtai 状态 int 11 否 否 Songhuodizhi 送货地址 varchar 100 否 否 User_ID 用户id int 11 否 否 Order_jine 商品数量 int 11 否 否 4.3.4系统测试 1、系统测试的重要性 系统开发完后必须进行系统测试,其原因在于他是否能保证整个系统的正常使用,交给客户,客户是否能够满意,从而通过最终的审查。 本次测试的主要目的就是从几个方面验证系统的可靠性、易用性、安全性、规范性、容错性。验证采取的是黑盒测试。它对系统的各个模块依次进行测试,尽可能的发现系统中存在的缺陷并进行更改,然后在通过运行结果来判断本网站能否达到最后的设计要求。 测试的主要任务是尽最大的努力检查出自己做的系统中存在的错误,并进行改正,使自己的系统更加完善。同时测试整个系统更是为了能够满足客户的需求,如果没有达到客户的需求就必须进行更改,找出程序中的错误,然后再进行不断的测试,直到最后整个系统没有错误,并满足客户的要求为止。 2、测试的主要内容 (1)单元测试 单元测试是非常重要的测试方法,通过单元测试,同等编写代码,对每个单元做定向的测试验证,并判断是否正确。在进行单元测试时必须需要注意几个问题,预期值是否能够达到要求;更换操作系统或者计算机时是否也能正常运行;是否有特殊的数据值导致系统的不正常运行。 (2)集成测试 集成测试就是把单元测试进行组合,形成连接,产生接口,进行测试。可以组合两个,也可组合多个集成,然后进行测试,来检查系统每个功能模块之间的运行情况,是否能够通过。 (3)确认测试 确定测试就是在集成测试的基础上,对整个系统进行测试,排除一些各别地方的错误,然后判断是否能够通过,若通过,便向客户展示本系统,看是否满足客户的预定要求,如果满足,便进行整个系统的验证,判断其可靠、安全、有效性。最终达到客户的需求。 3、测试过程 一般开始测试的时候,随便找一些数据就可以进行测试系统,但为了测试系统,就要选择有用的数据来测试,提高系统的可靠性,最后将之前测试的数据进行删除,输入有用的基本数据来进行测试,并查看最后的测试结果情况,发现问题,改正问题,反反复复,整体处理,确保本系统的正确使用。 用户登录模块测试用例表,如表4- 5所示。 表4- 5登录模块测试用例表 模块名称 测试用例 预期结果 实际结果 是否通过 登录模块 用户名:null 密码:null 出现错误信息,请输入账号 登录失败,提示请输入账号 通过 登录模块 用户名:yc 密码:1234 出现错误提示,账号或者密码错误 登录失败,提示账号或者密码错误 通过 登录模块 用户名:test 密码:123456 弹出正确提示,系统登录成功 登录成功,提示系统登录成功 通过 帮我根据此格式生成一篇前端开发实习生的实习内容
最新发布
07-20
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值