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

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保存下来
    • 在这里插入图片描述
  • 注册
    •   # 注册runnersudo gitlab-runner register
      
    • 注册过程中需要填入一些信息,Token就是上面复制的那个,具体如下
    • 在这里插入图片描述
    • 注册完刷新gitlab页面,可以看到有一个Runner实例。
    • 如果找不到这个界面,可以这样访问 http://192.168.206.137/admin/runners
    • 在这里插入图片描述
  • 点击编辑
  • 在这里插入图片描述
  • 勾选Run untagged jobs,然后保存。
  • 在这里插入图片描述

3.3 编写流水线脚本

  • 首先在gitlab中创建一个项目,然后新建一个文件
  • 在这里插入图片描述
  • 文件名为 .gitlab-ci.yml,脚本内容就写一个最简单的测试脚本。
  • 在这里插入图片描述
  • 脚本内容如下
  •   build:stage: buildscript:- echo "start build"test:stage: testscript:- echo "start test"deploy:stage: deployscript: - 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: buildscript:- echo "start build"- g++ main.cpp -o gitlabcicd_test# 指定生成的可执行程序存放目录为当前目录artifacts:paths:- gitlabcicd_test# 测试test:stage: testscript:- echo "start test"- chmod 0777 test.sh# 测试- ./test.sh# 发布deploy:stage: deployscript: - echo "start deploy"# 模拟发布流程- cp gitlabcicd_test package1
      
  • mian.cpp 中输出一个打印。
  • test.sh 中运行生成的可执行程序。
  • 工程写完后,push到gitlab仓库中,会自动触发cicd流程。
  • 在项目中找到 Build,点击Pipelines。
    • 在这里插入图片描述
  • 可以看到,自动化编译、测试、发布流程成功了
    • 在这里插入图片描述
    • 在这里插入图片描述
  • 点击一个进去,在控制台会有详细打印
    • 在这里插入图片描述
  • 进到GitLab Runner服务器对应目录下,可以看到自动化编译、测试、发布已经完成。
    • 在这里插入图片描述

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

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

相关文章

vue里实现点击按钮回到页面顶部功能,博客必备!

效果 步骤 1-标签结构 动态绑定样式style&#xff0c;监听点击事件&#xff0c;后续控制opacity透明度。和滚动距离 <div class"toTop" :style"dynamicStyles" click"toTop"><!--<i class"fa fa-arrow-up"></i>…

Django ORM中的F 对象

F 对象非常强大&#xff0c;可以在查询和更新操作中进行复杂的字段间运算。 假设我们有一个包含商品信息的模型 Product&#xff1a; from django.db import modelsclass Product(models.Model):name models.CharField(max_length100)price models.DecimalField(max_digits…

MySQL向自增列插入0失败问题

问题 在一次上线时&#xff0c;发现通过脚本添加的状态表中&#xff0c;待提交的状态不正确&#xff0c;本来应该是0&#xff0c;线上是101。 原因 默认情况下&#xff0c;MySQL对应自增列&#xff0c;认为0和null等价&#xff08;因为mysql认为0不是最佳实践不推荐使用&…

超简单的通配证书签发工具,免费,无需安装任何插件到本地

常见的acme.sh 或者 lego等工具需要配置&#xff0c;安装不灵活&#xff0c;续签需要配置计划任务&#xff0c;签发单域名证书或者通配证书需要不同的指令和配置&#xff0c;繁琐&#xff0c;如果自己程序想要对接签发证书的api有的不支持&#xff0c;有的用起来繁琐。 最近发…

[手机Linux PostmarketOS]三, Alpine Linux命令使用

Alpine Linux 一些常用的指令&#xff1a; 添加国内源下载链接&#xff1a; 编译以下文件&#xff0c;添加链接进去&#xff1a; sudo vi /etc/apk/repositories##清华源&#xff1a; https://mirror.tuna.tsinghua.edu.cn/alpine/latest-stable/main https://mirror.tuna.tsi…

【VIVADO SDK调试遇到DataAbortHandler】

问题 SDK调试遇到DataAbortHandler问题。 运行后不显示结果&#xff0c;debug模式下发现进入DataAbortHandler异常函数。程序中存在大数组。 原因:SDK默认的堆栈为1024bytes,需要将堆栈调大。 修改方法&#xff1a; 解决:对application中src下的lscript.ld双击&#xff0c;…

android 添加一个水平线

在Android中&#xff0c;添加一个水平线通常可以通过几种方式实现&#xff0c;最常见的是使用View组件或者自定义的Drawable。下面是一个简单的例子&#xff0c;展示如何在布局文件中添加一个水平线&#xff1a; 使用View组件 在你的布局XML文件中&#xff0c;你可以添加一个…

Linux 程序卡死的特殊处理

一、前言 Linux环境。 我们在日常编写的程序中&#xff0c;可能会出现一些细节问题&#xff0c;导致程序卡死&#xff0c;即程序没法正常运行&#xff0c;界面卡住&#xff0c;也不会闪退... 当这种问题出现在客户现场&#xff0c;那就是大问题了。。。 当我们暂时还无法排…

Python如何调用C++

ctypes 有以下优点: Python内建&#xff0c;不需要单独安装Python可以直接调用C/C 动态链接库(.dll 或 .so)在Python一侧&#xff0c;不需要了解 c/c dll 内部的工作方式提供了 C/C 数据类型与Python类型的相互映射&#xff0c;以及转换&#xff0c;包括指针类型。 在使用cty…

如何定量选择孔销基准?-DTAS来帮你!

在当今快速发展的工程领域&#xff0c;公差仿真的作用日渐重要&#xff0c;在公差仿真中&#xff0c;基准体系的选择对于最终结果更是至关重要。基准体系不同可能导致仿真过程中的参数计算、误差分析以及最终的工程设计都有所不同。基准体系作为评估和比较的参照&#xff0c;直…

Suricata引擎二次开发之命中规则定位

二开背景 suricata是一款高性能的开源网络入侵检测防御引擎&#xff0c;旨在检测、预防和应对网络中的恶意活动和攻击。suricata引擎使用多线程技术&#xff0c;能够快速、准确地分析网络流量并识别潜在的安全威胁&#xff0c;是众多IDS和IPS厂商的底层规则检测模块。 前段时间…

强制升级最新系统,微软全面淘汰Win10和部分11用户

说出来可能不信&#xff0c;距离 Windows 11 正式发布已过去整整三年时间&#xff0c;按理说现在怎么也得人均 Win 11 水平了吧&#xff1f; 然而事实却是&#xff0c;三年时间过去 Win 11 占有率仅仅突破到 29%&#xff0c;也就跳起来摸 Win 10 屁股的程度。 2024 年 6 月 Wi…

【Linux】磁盘性能压测-FIO工具

一、FIO工具介绍 fio&#xff08;Flexible I/O Tester&#xff09;是一个用于评估计算机系统中 I/O 性能的强大工具。 官网&#xff1a;fio - fio - Flexible IO Tester 注意事项&#xff01; 1、不要指定文件系统名称&#xff08;如/dev/mapper/centos-root)&#xff0c;避…

react启用mobx @decorators装饰器语法

react如果没有经过配置&#xff0c;直接使用decorators装饰器语法会报错&#xff1a; Support for the experimental syntax ‘decorators’ isn’t currently enabled 因为react默认是不支持装饰器语法&#xff0c;需要做一些配置来启用装饰器语法。 step1: 在 tsconfig.js…

【学术会议征稿】第三届能源互联网及电力系统国际学术会议(ICEIPS 2024)

第三届能源互联网及电力系统国际学术会议&#xff08;ICEIPS 2024&#xff09; 2024 3rd International Conference on Energy Internet and Power Systems 能源互联网是实现新一代电力系统智能互动、开放共享的重要支撑技术之一&#xff0c;也是提升能源调度效率&#xff0…

SQL 存储过程

SQL&#xff08;Structured Query Language&#xff09;的存储过程&#xff08;Stored Procedure&#xff09;是一组为了完成特定功能的SQL语句集&#xff0c;它经编译后存储在数据库中&#xff0c;用户通过指定存储过程的名字并给它传递参数&#xff08;如果有的话&#xff09…

Jetson-AGX-Orin 非docker环境源码编译安装CyberRT

Jetson-AGX-Orin 非docker环境源码编译安装CyberRT 1、安装依赖 sudo apt update sudo apt-get install g gdb gcc cmake sudo apt install libpoco-dev uuid-dev libncurses5-dev python3-dev python3-pip python3 -m pip install protobuf3.14.02、下载CyberRT源码 git cl…

【代码随想录算法训练Day65】卡码网47.参加科学大会、卡码网94. 城市间货物运输 I

Day65 图论第九天 卡码网47.参加科学大会 #include <iostream> #include <vector> #include <list> #include <queue> #include <climits> using namespace std; // 小顶堆 class mycomparison { public:bool operator()(const pair<int, …

Android Studio gradle下载失败?!

Android Studio安装后第一个工程&#xff0c;往往要下载gradle&#xff0c;而gradle的下载有的时候很慢&#xff0c;可以将下载好的gradle-x.x.x-all.zip放到指定目录下&#xff1a; Windows下路径&#xff1a; C:\Users\你的用户名\.gradle\wrapper\dist\gradle-x.x.x-all\**…

python+pygame实现五子棋人机对战之三

上回讲过&#xff1a; pythonpygame实现五子棋人机对战之一 pythonpygame实现五子棋人机对战之二 界面已经有了&#xff0c;并且可以支持鼠标操作选择菜单和人机对战开始下棋了&#xff0c;那电脑是如何应手落子呢&#xff1f;以下内容是通用的类&#xff0c;全部放在utils.…