Gitlab CI/CD入门(一)Python项目的CI演示

news2024/11/15 0:23:16

  本文将介绍CI/CD的基本概念,以及如何使用Gitlab来实现CI/CD。
  本文介绍的CI/CD项目为个人Gitlab项目:gitlab_ci_test,访问网址为:https://gitlab.com/jclian91/gitlab_ci_test。

CI/CD的含义

  在现代软件工程中,CI即持续集成(Continuous integration),CD有两重含义,即持续交付(Continuous Delivery)持续部署(Continuous Deployment),CI/CD是软件工程中的重要过程。
  CI,联系到具体的开发运维场景,就是指开发者在完成项目中的一个小特性后,将自己分支的代码合并到测试分支,这个过程就是集成,在集成过程中,会运行一系列代码格式的检查、单元测试等严格保证项目质量的检查作业。
  CD有两种含义:

  1. 持续交付,完成CI中的所有作业后,持续交付可自动将已验证的代码发布到储存库。持续交付是拥有可随时部署到生产环境的artifaces或Docker镜像,这一过程一般手动实现
  2. 持续部署,鉴于部署环境和部署方式的差异以及各种应用之间的耦合,部署这一项任务不再是简单的几行命令就能搞定的了。持续部署意味着只要提交了代码,就可以实现将代码自动部署至指定环境,如测试环境、开发环境等。这对于项目开发是十分方便、高效的。

  Gitlab CI/CD最初是Gitlab于2015年6月发布的一个特性,它支持在项目中编写一个.gitlab-ci.yml文件来定义一组自动化作业(Job),这些自动化作业组成一条自动化流水线(Pipeline)。2016年,Gitlab又推出了自研的Gitlab Runner软件包,以此作为流水线的运行环境。当开发者提交或合并代码时,Gitlab CI/CD会自动运行测试用例,构建、部署环境,并且开发者能在Gitlab中看到整个流程的所有信息,包括日志、流程和artifacts,不需要登录Gitlab之外的任何平台。
  Gitlab CI/CD的典型工作流程如下:
CI/CD流程
  Gitlab CI/CD特性如下:

  • 开源: CI/CD是开源GitLab社区版和专有GitLab企业版的一部分。
  • 易于学习: 详细的官方操作文档。
  • 无缝集成: CI/CD是GitLab的一部分,支持从计划到部署,具有出色的用户体验。
  • 可扩展: 可以根据需要添加任意数量的构建节点。
  • 更快的结果: 每个构建可以拆分为多个作业,这些作业可以在多台计算机上并行运行。
  • 针对交付进行了优化: 多个阶段,手动部署, 环境和变量。

Gitlab Runner

  Gitlab Runner是一个用于运行Gitlab CI/CD流水线作业的软件包,由Gitlab官方开发,完全开源,支持在主流的系统上安装、运行,比如Windows, Linux, MacOS等。在笔者的MacOS系统中,安装方式为:

brew install gitlab-runner

  Gitlab Runner分为三种类型,在注册Runner过程中使用不同类型的token就能区分不同的类型。

  • Shared Runners,共享Runner,可以被仓库里面的任意项目使用。token获取位置为全局管理中心-Runner-注册令牌。
  • Group Runners,组Runner,仅能被某个组中的任意项目使用。token获取位置为项目群组-CICD-Runner-注册令牌。
  • Specific Runners,特定Runner,仅能被指定的项目使用。token获取位置为项目-设置-CICD-Runner-注册令牌。

  本文中使用Specific Runners,我们为项目申请特定Runner,如下图:

  1. 创建项目Runner


2. 选择Linux平台,tags自己填写,点击Create Runner按钮

3. Runner创建完毕,可获取url和token

4. 在本地电脑上,注册Runner:gitlab-runner register --url https://gitlab.com --token glrt-xxx,token为第3步中的token。

5. 查看Runner及运行Runner:

6. 至此,项目中的Runner已配置完毕,我们可以运行CI/CD流水线了。

.gitlab-ci.yml

  在一个项目中,流水线文件通常是放在.gitlab-ci.yml文件中,该文件采用YAML格式书写。
  在编写.gitlab-ci.yml文件前,我们需了解几个基本概念。

  • 流水线(Pipeline):流水线由.gitlab-ci.yml文件定义,它是一系列作业的组装。这些作业按照一个顺序运行,行程一条流水线。触发流水线的操作可以是代码推送、创建tag、合并请求,以及定时触发。
  • 阶段(Stages):流程组成流水线,主要用于给作业分组。阶段会由上到下按顺序执行。
  • 作业(Job):作业组成阶段,是最基础的执行单元。同一个阶段的作业是并行运行的。

  以下是一个测试流水线,它包含3个阶段:install,build,deploy,顺序执行,每个阶段都有各自的作业。当代码提交至主分支时,便会触发流水线。

stages:
  - install
  - build
  - deploy

install_job:
  stage: install
  script:
    - echo "hello install"

build_job:
  stage: build
  script:
    - echo "hello build"

deploy_job:
  stage: deploy
  script:
    - echo "hello deploy"

流水线执行成功
我们查看deploy_job的运行结果:
deploy_job作业执行成功
  接下来,我们对本项目进行流水线配置,如下:

stages:
  - build
  - deploy

build-job:
  stage: build
  script:
    - echo `date`
    - echo "Hello, $GITLAB_USER_LOGIN!"
    - echo "This job deploys something from the $CI_COMMIT_BRANCH branch."

deploy-job:
  image: docker
  # necessary for my macbook
  variables:
    DOCKER_TLS_CERTDIR: ""
    DOCKER_HOST: "tcp://docker:2375"
  services:
      - docker:dind
  # necessary for my macbook
  stage: deploy
  script:
    - docker build -t flask_blue_print:$CI_COMMIT_SHORT_SHA .
    - docker run -d -p 5005:5000 --name flask_demo flask_blue_print:$CI_COMMIT_SHORT_SHA
    - docker ps

该流水线的阶段为:build和deploy,build阶段中的build-job进行简单测试,deploy阶段中的deploy-job使用Docker进行部署。
流水线执行成功
deploy-job执行成功
流水线采用Docker部署,执行成功,但本地电脑的Docker服务并没有运行该服务,原因为Gitlab与Gitlab-Runner不在一个环境中。

总结

  本文主要介绍了CI/CD的基本概念以及Gitlab CI/CD的简单使用。有了Gitlab CI/CD,我们就可以保证项目代码质量(需代码测试),并且方便、高效地进行代码更新,持续集成和持续部署,对于我们提高工作效率有很大改善。

参考文献

  1. gitlab-ci的简易入门—基于python项目的CI演示:https://mp.weixin.qq.com/s/aQmdusndVdxHo1rrj7eg1w
  2. docker部署gitlab CI/CD (二)终篇:部署gitlab runner和添加gitlab-ci.yml文件 终极踩坑版:https://www.cnblogs.com/gaoxiong666/p/17336256.html
  3. Gitlab CI/CD 简单介绍:https://blog.csdn.net/wangjiang_qianmo/article/details/122867335
  4. Gitlab官方网站:https://docs.gitlab.com/ee/ci/
  5. Gitlab CI/CD从入门到实战,庞梦臣著,人民邮电出版社,2023-04-01

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/656454.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【主跑例子】 Framework01、02;QFramework00(我跟着视频的旧版本,但推荐用最新的)、01(无)、02(无)、03(无)

总体介绍 做的是 00,10,13,考虑做10。 11,12没下载,当时把这两个误认为 00,10 用到了UniRx Framework有2个 00 Unity 游戏框架搭建 2019 第一季 C# 核心知识与简易 Manager Of Managers 框架搭建 120课数 01 Unity 游戏框架搭建 2019 第二季 模块/系统…

前端Vue仿滴滴打车百度地图定位查找附近出租车或门店信息(更新版)

前端vue仿滴滴打车百度地图定位查找附近出租车或门店信息, 下载完整代码请访问uni-app插件市场地址:https://ext.dcloud.net.cn/plugin?id12982 效果图如下: # #### 使用方法 使用方法 <!-- 官方文档&#xff1a; https://dafrok.github.io/vue-baidu-map/#/zh/start/b…

五子棋:起源、原理与游戏规则、vue实现五子棋案例游戏

目录&#xff1a; 引言五子棋的历史背景五子棋的原理五子棋的游戏规则五子棋游戏的实现 5.1 创建 Vue 组件 5.2 初始化棋盘 5.3 下棋与判断胜负 5.4 渲染棋盘与棋子总结 更多知识 学习&#xff1a;https://www.processon.com/view/60504b5ff346fb348a93b4fa#map 引言 五子棋…

解密大型语言模型:从相关性中发现因果关系?

深度学习自然语言处理 原创作者&#xff1a;wkk 因果推理是人类智力的标志之一。因果关系NLP领域近年来引起了人们的极大兴趣&#xff0c;但其主要依赖于从常识知识中发现因果关系。本研究提出了一个基准数据集(CORR2CAUSE)来测试大语言模型(LLM)的纯因果推理能力。其中CORR2CA…

I/O体系结构和设备驱动程序(一)

I/O体系结构 让信息在CPU、RAM和I/O设备之间流动的数据通路称之为总线&#xff0c;即计算机内的主通信通道。所有计算机都有一条系统总线&#xff08;一种典型的系统总线是PCI总线&#xff09;&#xff0c;连接内部大部分的硬件设备。计算机内不同的总线可以通过“桥”进行连接…

lua语言的闭包设计和LClosure解读

什么是闭包 闭包是一种特殊的函数&#xff0c;它可以访问其创建时所处的环境中的变量&#xff0c;即使在函数创建后&#xff0c;环境已经不再存在&#xff0c;这些变量仍然可以被访问。 为了更好地理解闭包&#xff0c;我们可以看一个例子&#xff1a; function counter()lo…

Appium知多少

Appium我想大家都不陌生&#xff0c;这是主流的移动自动化工具&#xff0c;但你对它真的了解么&#xff1f;为什么很多同学搭建环境时碰到各种问题也而不知该如何解决。 appium为什么英语词典查不到中文含义&#xff1f; appium是一个合成词&#xff0c;分别取自“applicatio…

OpenAI官方提示词课(七)制作一个聊天机器人

大型语言模型的一个令人兴奋的方面是&#xff0c;你可以利用它来构建一个定制的聊天机器人&#xff0c;并且只需付出少量的努力。ChatGPT 的网页界面可以让你与一个大型语言模型进行对话。但其中一个很酷的功能是&#xff0c;你也可以利用大型语言模型构建你自己的定制聊天机器…

案例 | 标杆引领!人大金仓智绘数字金融

随着中央数字经济政策推进金融业数字化建设&#xff0c;数字金融已初见成效&#xff0c;但尚存在信息安全缺乏保障、转型覆盖不全面等问题。 为实现金融行业全面数字化转型升级&#xff0c;作为数据库领域国家队&#xff0c;人大金仓紧跟国家战略&#xff0c;自主研发的系列数据…

msvcp110.dll丢失原因——msvcp110.dll丢失怎么修复(最新可修复)

昨天卸载了一个垃圾软件以后&#xff0c;我的其他软件就无法打开运行&#xff0c;提示msvcp110.dll丢失&#xff0c;无法继续执行此代码。今天早上找了很多方法&#xff0c;终于把msvcp110.dll丢失的原因以及修复的方法都弄明白了。msvcp110.dll是一个非常重要的文件&#xff0…

【CVE-2022-0185】Linux kernel [文件系统挂载API] 堆溢出漏洞分析与利用

0x00.一切开始之前 CVE-2022-0185 是 2022 年初爆出来的一个位于 filesystem context 系统中的 fsconfig 系统调用中的一个堆溢出漏洞&#xff0c;对于有着 CAP_SYS_ADMIN 权限&#xff08;或是开启了 unprivileged namespace&#xff09;的攻击者而言其可以利用该漏洞完成本地…

Hugging News #0616: 有几项非常重要的合作快来围观、最新中文演讲视频回放发布!...

每一周&#xff0c;我们的同事都会向社区的成员们发布一些关于 Hugging Face 相关的更新&#xff0c;包括我们的产品和平台更新、社区活动、学习资源和内容更新、开源库和模型更新等&#xff0c;我们将其称之为「Hugging News」&#xff0c;本期 Hugging News 有哪些有趣的消息…

【MySQL】SQL的函数用法

文章目录 聚合函数Count()Max()Min()Sum()Avg() 其他常用函数时间函数字符串函数SUBSTRING函数:切割字符串([start:end])SUBSTRING_INDEX函数:切割字符串(split)LOWER&UPPER函数:大小写转化CONCAT&CONCAT_WS函数:连接字符串REPLACE函数:字符串替换 数学函数ROUND函数:四…

rhce8考试

rhce考试模拟环境准备&#xff1a; cat /etc/rht 确认当前是否为294环境&#xff0c;真实考试有5台被管理节点&#xff0c;借助bastion当做第5台。 将考试所需的文件放到这个目录&#xff0c;/content/courses/rh294/rhel8.0/materials目录&#xff0c;虚拟机看br0网卡信息ifc…

使用LOAD DATA INFILE命令加载数据文件到MySQL数据库的方法和常见错误及解决方法

文章目录 使用LOAD DATA INFILE命令加载数据文件到MySQL数据库的方法和常见错误及解决方法LOAD DATA INFILE的语法详细1.创建&#xff08;选择&#xff09;目标数据库和表2.将数据从 CSV 文件导入已创建的表常见错误和解决方法错误1&#xff1a;ERROR 1290 (HY000): The MySQL …

linux_centos7.9/ubuntu20.04_下载镜像及百度网盘分享链接

1、镜像下载站点 网易开源镜像&#xff1a;http://mirrors.163.com/ 搜狐开源镜像&#xff1a;http://mirrors.sohu.com/ 阿里开源镜像&#xff1a;https://developer.aliyun.com/mirror/ 首都在线科技股份有限公司&#xff1a;http://mirrors.yun-idc.com/ 常州贝特康姆软件技…

TFTP是什么,一文带你了解

目录 一、TFTP协议简介 TFTP协议的主要特点包括&#xff1a; 二、TFTP包格式 1. 读/写请求包 2. 文件数据包 3. 回应包 4. 错误信息包 三、TFTP的工作流程 TFTP协议的工作流程包括以下几个步骤&#xff1a; 四、TFTP的传输模式 1. 二进制传输模式 2. ASCII码传输模式…

【Spring】1、Spring 框架的基本使用【读取配置文件、IoC、依赖注入的几种方式、FactoryBean】

目录 一、Spring 简介二、读取配置文件、创建对象三、使用 Spring(1) 依赖(2) Spring 的核心配置文件(3) 获取 Spring IoC 工厂中的对象实例 四、IoC 容器五、依赖注入&#xff08;DI&#xff09;(1) 基于 setter 注入【bean】(2) 基于 setter 注入【基本类型、包装类型、Strin…

理解空穴电流

理解空穴电流 近日闲来无事&#xff0c;翻起来模电看了起来&#xff0c;在看到关于三极管的一张图时&#xff0c;对三极管的 I E P {I}_{EP} IEP​电流无法理解。 I E P {I}_{EP} IEP​电流&#xff0c;教材上的解释是基区空穴形成的空穴电流。 于是我就收集了相关资料&#…