GitLab CI/CD实现项目自动化部署

news2024/11/15 21:39:22

1 GitLab CI/CD介绍

  • GitLab CI/CD 是 GitLab 中集成的一套用于软件开发的持续集成(Continuous Integration)、持续交付(Continuous Delivery)和持续部署(Continuous Deployment)工具。这套系统允许开发团队自动化软件交付流程,从代码变更的检测、构建、测试到最终部署到生产环境的整个过程。

  • 持续集成(CI)

    • 每次代码推送至版本控制系统(如GitLab仓库),系统自动进行构建和测试。这确保了代码变更能够快速集成到主分支,同时发现并修复集成错误。
  • 持续交付(CD)

    • 在持续集成的基础上,进一步自动化将已验证的代码变更交付到一个预生产或生产准备就绪的环境中。这个阶段可能包括更复杂的测试套件、性能测试等,确保软件随时可以部署到生产环境,但实际部署可能需要人工审批。
  • 持续部署(CD)

    • 在持续交付的基础上,将交付过程完全自动化,无需人工干预即可将通过所有测试的代码直接部署到生产环境。这意味着每次代码变更经过测试后都能快速安全地到达用户手中。

2 GitLab CI/CD 与 GitLab Runner

  • GitLab CI/CD 是一套集成在GitLab平台中的服务,负责管理软件开发生命周期中的构建、测试和部署等流程。它通过读取项目中的 .gitlab-ci.yml 配置文件来定义各种任务(Jobs)和流程(Pipelines),从而实现持续集成和持续部署的目标。

  • GitLab Runner 则是实现这些CI/CD流程的实际工作者或执行引擎。它是单独部署的一个程序,可以安装在不同的操作系统(如Linux、macOS、Windows)上,并与GitLab实例进行注册和绑定。一旦有新的提交触发了GitLab CI/CD流程,GitLab会调度已注册的Runner来执行.gitlab-ci.yml中定义的任务。

  • 简单来说,GitLab CI/CD是计划者和协调者,负责定义何时以及如何执行任务,而GitLab Runner则是具体执行这些任务的实体。Runner可以是共享的(服务于多个项目)或者专属的(仅为单一项目服务),并且可以根据项目需求配置不同的执行环境(例如使用Docker容器来隔离构建环境)。

3 GitLab Runner

  • 官网介绍

3.1 安装

  • 以Centos为例
  • gitlab-runner安装包下载,在Package栏搜索gitlab-runner,可以下载这个版本 el/7/x86_64/gitlab-runner-16.6.0-1.x86_64.rpm
  • 安装命令如下
  •   # 安装
      sudo rpm -ivh gitlab-runner-16.6.0-1.x86_64.rpm	
      # 查看是否安装成功
      gitlab-runner -h
    

3.2 注册

  • 注册前需要先从gitlab服务器获取token。
  • 在主页面的Projects中找到 Configure GitLab
    • 在这里插入图片描述
  • 找到CI/CD中的Runners
    • 在这里插入图片描述
  • 找到token保存下来
    • 在这里插入图片描述
  • 注册
    •   # 注册runner
        sudo gitlab-runner register
      
    • 注册过程中需要填入一些信息,Token就是上面复制的那个,具体如下
    • 在这里插入图片描述
    • 注册完刷新gitlab页面,可以看到有一个Runner实例。
    • 如果找不到这个界面,可以这样访问 http://192.168.206.137/admin/runners
    • 在这里插入图片描述
  • 点击编辑
  • 在这里插入图片描述
  • 勾选Run untagged jobs,然后保存。
  • 在这里插入图片描述

3.3 编写流水线脚本

  • 首先在gitlab中创建一个项目,然后新建一个文件
  • 在这里插入图片描述
  • 文件名为 .gitlab-ci.yml,脚本内容就写一个最简单的测试脚本。
  • 在这里插入图片描述
  • 脚本内容如下
  •   build:
        stage: build
        script:
          - echo "start build"
      
      test:
        stage: test
        script:
          - echo "start test"
      
      deploy:
        stage: deploy
        script: 
          - echo "start deploy"
    
  • 保存提交后会自动触发CI/CD流程,在Build中找到Pipelines。
  • 在这里插入图片描述
  • 可以看到步骤全部通过
  • 在这里插入图片描述
  • 点击Passed可以看到详细流程
  • 在这里插入图片描述
  • 点击build,就是build的执行过程
  • 在这里插入图片描述
  • 至此,GitLab-CI/CD 自动化部署的流程就通了。可以把 .gitlab-ci.yml 脚本中的内容修改为实际要执行的命令,这样每一次提交代码后,就会自动触发编译、测试、发布步骤。

4 项目演示

  • 比较简单的自动化部署流程为:编译、测试、打包和发布。本项目就主要演示下如何实现自动化的编译、测试和发布。
  • 现在创建一个项目,文件结构如下
    • ├── .gitlab-ci.yml
      ├── main.cpp
      ├── README.md
      └── test.sh
  • .gitlab-ci.yml 内容如下
    •   # 编译
        build:
          stage: build
          script:
            - echo "start build"
            - g++ main.cpp -o gitlabcicd_test
          # 指定生成的可执行程序存放目录为当前目录
          artifacts:
            paths:
              - gitlabcicd_test
        
        # 测试
        test:
          stage: test
          script:
            - echo "start test"
            - chmod 0777 test.sh
            # 测试
            - ./test.sh
        
        # 发布
        deploy:
          stage: deploy
          script: 
            - echo "start deploy"
            # 模拟发布流程
            - cp gitlabcicd_test package1
      
  • mian.cpp 中输出一个打印。
  • test.sh 中运行生成的可执行程序。
  • 工程写完后,push到gitlab仓库中,会自动触发cicd流程。
  • 在项目中找到 Build,点击Pipelines。
    • 在这里插入图片描述
  • 可以看到,自动化编译、测试、发布流程成功了
    • 在这里插入图片描述
    • 在这里插入图片描述
  • 点击一个进去,在控制台会有详细打印
    • 在这里插入图片描述
  • 进到GitLab Runner服务器对应目录下,可以看到自动化编译、测试、发布已经完成。
    • 在这里插入图片描述

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

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

相关文章

org.springframework.boot.autoconfigure.EnableAutoConfiguration=XXXXX的作用是什么?

org.springframework.boot.autoconfigure.EnableAutoConfigurationXXXXXXX 这一配置项在 Spring Boot 项目中的作用如下: 自动配置类的指定: 这一配置将 EnableAutoConfiguration 设置为 cn.geek.javadatamanage.config.DataManageAutoConfiguration&…

react学习——25redux实现求和案例(完整版)

1、目录结构 2、count/index.js import React, {Component} from "react"; //引入store,用于获取数据 import store from ../../redux/store //引入actionCreator 专门创建action对象 import {createDecrementAction,createIncrementAction} from ../../redux/coun…

Linux基础知识(十六)shell脚本编程

一、简介 用户通过shell向计算机发送指令计算机通过shell给用户返回指令的执行结果 1.1 通过shell编程可以达到的效果 提高工作效率可以实现自动化 1.2 需要学习的内容 Linuxshell的语法规范 1.3 编写shell的流程 第一步:用vi/vim创建一个.sh的文件第二步&am…

利用原生JavaScript实现匹配搜索结果的网页内容高亮

昨天在用Anki的时候,复习笔记时想在笔记的解析里快速查找内容,于是探索了一下将匹配的搜索结果高亮。开始想不用第三方库直接实现,结果匹配的文本被HTML标签隔断时不能成功匹配,后来用到了jquery的mark.js库才简单实现。事后我想看…

vue中v-if与v-show的区别

在 Vue.js 中,v-if 和 v-show 都是用来控制元素显示与隐藏的指令,但它们之间有几个关键的区别: 直接上图 一. 条件渲染方式不同 v-if: 真正的条件渲染:v-if 指令会根据表达式的真假来销毁或重新创建 DOM 元素及其…

拟合衰减振动模型,估算阻尼比和阻尼系数

拟合衰减振动模型,估算阻尼比和阻尼系数 flyfish 衰减振动模型 在自由振动系统中,阻尼振动可以用以下公式描述: x ( t ) x 0 e − ζ ω n t cos ⁡ ( ω d t ϕ ) x(t) x_0 e^{-\zeta \omega_n t} \cos(\omega_d t \phi) x(t)x0​e−…

数据结构与算法-动态规划-三角形最小路径和

三角形最小路径和 给定一个三角形 triangle ,找出自顶向下的最小路径和。 每一步只能移动到下一行中相邻的结点上。相邻的结点 在这里指的是 下标 与 上一层结点下标 相同或者等于 上一层结点下标 1 的两个结点。也就是说,如果正位于当前行的下标 i &…

JUC并发编程-05:线程高级部分-源码解读

线程高级部分-源码解读 多线程高并发底层锁机制与优化最佳实践深入JDK源码理解LongAdder的分段CAS优化机制 公平锁和非公平锁原理解析 多线程高并发底层锁机制与优化最佳实践 深入JDK源码理解LongAdder的分段CAS优化机制 多个线程进入,为了防止空转,所…

Android11 窗口动画

窗口进入动画 应用端窗口绘制完成之后,调用finshDraw告知WMS,WMS这边最后就会调用WindowSurfacePlacer的performSurfacePlacement方法,最终调用到 WindowStateAnimator的commitFinishDrawingLocked方法 //frameworks/base/services/core/jav…

基于Transformer的端到端的目标检测 | 读论文

本文正在参加 人工智能创作者扶持计划 提及到计算机视觉的目标检测,我们一般会最先想到卷积神经网络(CNN),因为这算是目标检测领域的开山之作了,在很长的一段时间里人们都折服于卷积神经网络在图像处理领域的优势&…

Redis 主从复制,集群与高可用

虽然Redis可以实现单机的数据持久化,但无论是RDB也好或者AOF也好,都解决不了单点宕机问题,即一旦单台 redis服务器本身出现系统故障、硬件故障等问题后,就会直接造成数据的丢失 此外,单机的性能也是有极限的,因此需要使用另外的技…

数字安全护航技术能力全景图 | 亚信安全实力占据75领域

近日,2024全球数字经济大会——数字安全生态建设专题论坛在北京成功举办。会上,中国信息通信研究院(简称“中国信通院”)正式发布了《数字安全护航技术能力全景图》,亚信安全凭借全面的产品技术能力,成功入…

蓝卓创始人褚健:工业软件是数字化转型的灵魂和核心驱动力

如果把“工业3.0”简单理解为就是“自动化”,“工业4.0”理解为是“智能化”,那么“智能化”的实现一定要有软件。如同今天的移动互联网,是因为有大量的APP,所以让人们进入了智能时代。映射到工业、制造业领域,就是要依…

[GICv3] 4. 中断分发和路由(Distribution and Routing)

💡介绍如何将中断分发和路由到目标PE,以及中断号的分配。 分发和重分发(The disributor an Redistributors) 分配器为SPI提供路由配置,并持有所有相关的路由和优先级信息。重新分配器提供PPI和SGI的配置设置。 重新分…

京东速运|通过python查询快递单号API

本次讲解如何使用快递聚合供应商来实现查询京东速运快递物流轨迹,首先,我们需要准备的资源。 平台的密钥key:登录后在个人中心查看 测试接口的链接:在下方文档处查看 其中,KEY为用户后台我的api页面展示的API密钥, 代…

《米小圈漫画历史》:历史启蒙,看漫画书就可以啦!

在当今信息爆炸的时代,如何让孩子在娱乐中学习,一直是许多家长关心的问题。《米小圈漫画历史》系列作为一部集合了趣味性和教育性的漫画书,以其独特的视角和精彩的故事情节,成为了许多家庭历史启蒙的首选。本文将通过探索漫画书的…

MT3046 愤怒的象棚

思路: a[]存愤怒值;b[i]存以i结尾的,窗口里的最大值;c[i]存以i结尾的,窗口里面包含✳的最大值。 (✳为新大象的位置) 例:1 2 3 4 ✳ 5 6 7 8 9 则ans的计算公式b3b4c4c5c6b7b8b9…

探索AI大模型(LLM)减少幻觉的三种策略

大型语言模型(LLM)在生成文本方面具有令人瞩目的能力,但在面对陌生概念和查询时,它们有时会输出看似合理却实际错误的信息,这种现象被称为“幻觉”。近期的研究发现,通过策略性微调和情境学习、检索增强等方…

Linux基础指令解析+项目部署环境

文章目录 前言基础指令部署项目环境总结 前言 Linux的魅力在于其强大的可定制性和灵活性,这使得它成为了众多开发者和运维人员的首选工具。然而,Linux的指令系统庞大而复杂,初学者往往容易迷失其中。因此,本文将带领大家走进Linu…

一键换衣,这个AI可以让你实现穿衣自由

基于图像的虚拟穿衣是一种流行且前景广阔的图像合成技术,能够显著改善消费者的购物体验,并降低服装商家的广告成本。顾名思义,虚拟穿衣任务旨在生成目标人穿着给定服装的图像。 OOTDiffusion简述 图1 虚拟换衣 基于图像的虚拟穿衣目前面临两…