北京企业网站推广/广告设计
引言:上一期我们部署好了gitlab极狐网页版,今天我们介绍一下GitLabCI / CD
目录
一、为什么要 CI / CD 方法
1、持续集成
2、持续交付
3、持续部署
二、GitLab CI / CD简介
三、GitLab CI / CD 的工作原理
4、基本CI / CD工作流程
5、首次设置 GitLab CI / CD
6、GitLab CI / CD功能集
一、为什么要 CI / CD 方法
软件开发的连续方法基于自动执行脚本,以最大限度地减少在开发应用程序时引入错误的可能性。从新代码的开发到部署,它们需要较少的人为干预甚至根本不需要干预。
它涉及在每次小迭代中不断构建,测试和部署代码更改,从而减少基于有缺陷或失败的先前版本开发新代码的机会。
这种方法有三种主要方法,每种方法都根据最适合您的策略进行应用。
持续集成(Continuous Integration, CI): 代码合并,构建,部署,测试都在一起,不断地执行这个过程,并对结果反馈。
持续部署(Continuous Deployment, CD): 部署到测试环境、预生产环境、生成环境。
持续发布(Continuous Delivery, CD): 将最终产品发布到生成环境、给用户使用。
1、持续集成
持续整合
https://en.wikipedia.org/wiki/Continuous_integration
考虑一个应用程序,其代码存储在GitLab中的Git存储库中。开发人员每天多次推送代码更改。对于每次推送到存储库,您都可以创建一组脚本来自动构建和测试应用程序,从而减少向应用程序引入错误的可能性。
持续整合对于提交给应用程序的每个更改 - 甚至是开发分支 - 它都是自动且连续地构建和测试的,确保所引入的更改通过您为应用程序建立的所有测试,指南和代码合规性标准。
GitLab本身就是使用持续集成作为软件开发方法的一个例子。对于项目的每次推送,都会有一组脚本来检查代码。
2、持续交付
持续交付https://continuousdelivery.com/
持续交付是持续集成的一个步骤。您的应用程序不仅在推送到代码库的每个代码更改时都构建和测试,而且,作为一个额外的步骤,它也会连续部署,尽管部署是手动触发的。
此方法可确保自动检查代码,但需要人工干预才能手动并策略性地触发更改的部署。
3、持续部署
持续部署https://www.airpair.com/continuous-deployment/posts/continuous-deployment-for-practical-people
它也是持续集成的又一步,类似于持续交付。不同之处在于,您不必手动部署应用程序,而是将其设置为自动部署。完全不需要人工干预就可以部署您的应用程序。
二、GitLab CI / CD简介
GitLab CI / CD是GitLab内置的强大工具,允许您将所有连续方法(持续集成,交付和部署)应用于您的软件,而无需第三方应用程序或集成。
三、GitLab CI / CD 的工作原理
要使用GitLab CI / CD,您只需要一个托管在Git存储库中的应用程序代码库,并在一个名为的文件中指定构建,测试和部署脚本,该文件.gitlab-ci.yml位于存储库的根路径中。
在此文件中,您可以定义要运行的脚本,定义包含和缓存依赖项,选择要按顺序运行的命令以及要并行运行的命令,定义要部署应用程序的位置,以及指定是否将要自动运行脚本或手动触发任何脚本。熟悉GitLab CI / CD后,您可以在配置文件中添加更多高级步骤。
要向该文件添加脚本,您需要按照适合您的应用程序的顺序组织它们,并且这些脚本符合您希望执行的测试。要想象可视化过程,请假设您添加到配置文件中的所有脚本与您在计算机终端上运行的命令相同。
将
.gitlab-ci.yml
配置文件添加到存储库后,GitLab将检测到它并使用名为GitLab Runner的工具运行脚本,该工具与终端类似。
脚本被分组到作业中,它们一起组成一个管道。.gitlab-ci.yml
文件的极简主义示例可以包含:
before_script:- apt-get install rubygems ruby-dev -y
run-test:script:- ruby --version
该
before_script
属性将在运行任何内容之前为您的应用程序安装依赖项,并且调用 的 作业run-test
将打印当前系统的Ruby版本。它们都构成了在每次推送到存储库的任何分支时触发的管道。
GitLab CI / CD不仅可以执行您设置的作业,还可以显示执行过程中发生的情况,如您在终端中看到的那样:
您可以为应用创建策略,GitLab会根据您定义的内容为您运行管道。您的管道状态也由GitLab显示:
最后,如果出现任何问题,您可以轻松 回滚所有更改:
4、基本CI / CD工作流程
这是GitLab CI / CD如何适用于通用开发工作流程的一个非常简单的示例。
假设您已在一个问题中讨论过代码实现,并在本地处理您提出的更改。将提交推送到GitLab中远程存储库中的功能分支后,将触发为项目设置的CI / CD管道。通过这样做,GitLab CI / CD:
运行自动脚本(顺序或并行)到:
构建并测试您的应用。
使用“评论应用”预览每个合并请求的更改,如您所见
localhost
。一旦您对实施感到满意:
让您的代码经过审核和批准。
将功能分支合并到默认分支。
GitLab CI / CD会自动将更改部署到生产环境中。
最后,如果出现问题,您和您的团队可以轻松地将其回滚。
GitLab CI / CD能够做得更多,但这个工作流程体现了GitLab跟踪整个过程的能力,而无需任何外部工具来交付您的软件。而且,最有用的是,您可以通过GitLab UI可视化所有步骤。
5、首次设置 GitLab CI / CD
要开始使用GitLab CI / CD,您需要熟悉.gitlab-ci.yml配置文件语法及其属性。
本文档介绍了GitLab CI / CD在GitLab页面范围内的概念,用于部署静态网站。虽然它适用于想要从头开始编写自己的Pages脚本的用户,但它也可以作为GitLab CI / CD设置过程的介绍。它涵盖了编写CI / CD配置文件的第一个常规步骤,因此我们建议您通读它以了解GitLab的CI / CD逻辑,并了解如何为任何应用程序编写自己的脚本(或调整现有脚本)。
有关GitLab的CI / CD配置选项的深入视图,请查看 .gitlab-ci.yml完整参考。
6、GitLab CI / CD功能集
使用Auto DevOps轻松设置应用程序的整个生命周期。
使用GitLab Pages部署静态网站。
将您的应用程序部署到不同的环境。
使用Review Apps预览每个合并请求的更改。
使用Container Registry开发安全的私有Docker镜像。
安装自己的GitLab Runner。
安排管道。
使用安全测试报告检查应用程序漏洞。
希望能够帮助到大家!!
相关文章:

持续集成,持续交付和持续部署的概念,以及GitLab CI / CD的介绍
引言:上一期我们部署好了gitlab极狐网页版,今天我们介绍一下GitLabCI / CD 目录 一、为什么要 CI / CD 方法 1、持续集成 2、持续交付 3、持续部署 二、GitLab CI / CD简介 三、GitLab CI / CD 的工作原理 4、基本CI / CD工作流程 5、首次设置 …...

[Java 项目亮点] 三层限流设计
思路来源:bilibili 河北王校长 文章目录 面试官可能会问你能详细介绍一下Nginx的http_limit_req_module模块吗?你能解释一下如何在Nginx中配置http_limit_req_module模块吗?你知道如何调整Nginx的http_limit_req_module模块以适应不同的业务需…...

GPT-SoVITS 快速声音克隆使用案例:webui、api接口
参考: https://github.com/RVC-Boss/GPT-SoVITS 环境: Python 3.10 PyTorch 2.1.2, CUDA 12.0 安装包: 1、使用: 1)下载项目 git clone https://github.com/RVC-Boss/GPT-SoVITS.git2)下载预训练模型 https://huggingface.co/lj1995/GPT-SoVITS 下载模型文件放到GPT…...

高速自动驾驶智慧匝道(HIC)系统功能规范
智慧匝道功能规范 Highway Intelligent Change Functional Specification 文件状态: 【√】草稿 【】正式发布 【】正在修改 文件起草分工 撰写: 审核: 编制: 签名: 日期: 审核: 签名&am…...

SQL Server——建表时为字段添加注释
在 MySQL 中,新建数据库表为字段添加注释可以使用 comment 属性来实现。SQL Server 没有 comment 属性,但是可以通过执行 sys.sp_addextendedproperty 这个存储过程添加扩展属性来实现相同的功能。 这个存储过程的参数定义如下: exec sys.s…...

【明道云】导入Excel数据时的默认顺序
【背景】 明道云导入Excel过程中由于数据问题往往会有一些需要补录的地方。这种情况下就需要已上传到线上的数据和本地Excel的记录顺序完全一致才方便对比。因此需要清除如何让两者的记录顺序一致。 【分析】 经过多次排序对比,考虑到分页的影响,发现…...

几种后端开发中常用的语言。
几种后端开发中常用的语言。 C/C 语言 C 语言最初是用于系统开发工作,特别是组成操作系统的程序。由于 C 语言所产生的代码运行速度与汇编语言编写的代码运行速度几乎一样,所以采用 C 语言作为系统开发语言。目前,C 语言是最广泛使用的系统…...

Sora——探索AI视频模型的无限可能
Sora - 探索AI视频模型的无限可能 Sora作为OpenAI发布的一款AI视频模型,其探索的无限可能性表现在多个方面。首先,从技术的角度来看,Sora将文本生成图像的技术扩展到了视频领域,实现了从文字描述到视频内容的自动生成。这种技术突…...

[NCTF2019]True XML cookbook --不会编程的崽
题目的提示很明显了,就是xxe攻击,直接抓包。 <?xml version "1.0"?> <!DOCTYPE ANY [ <!ENTITY xxe SYSTEM "file:///etc/passwd" > ]> <user><username> &xxe; </username><passwor…...

Qt 应用程序中指定使用桌面版本的 OpenGL或嵌入式系统OpenGL ES的 API 进行渲染
qputenv(“QT_OPENGL”, “desktop”) 是用于在 Qt 应用程序中指定使用桌面版本的 OpenGL API 进行渲染。 具体来说,qputenv 是 Qt 提供的一个环境变量设置函数,它允许开发者在程序运行时设置环境变量。在这个例子中,环境变量 QT_OPENGL 被设…...

大数据软件,待补充
数据采集: 实时采集: Debezuim Debezuim是构建在 Apach Kafka之上,并提供Kafka连接器来监视特定的数据库管理(采集多种数据库) Canal canal 是阿里开发,用于实时采集Mysql 当中变化的数据 maxwell,flinkX,flinkCDC 离线采集&#…...

深入探索pdfplumber:从PDF中提取信息到实际项目应用【第94篇—pdfplumbe】
深入探索pdfplumber:从PDF中提取信息到实际项目应用 在数据处理和信息提取的过程中,PDF文档是一种常见的格式。然而,要从PDF中提取信息并进行进一步的分析,我们需要使用适当的工具。本文将介绍如何使用Python库中的pdfplumber库来…...

实现linux platform tree框架下ICM20608驱动开发(SPI)
目录 概述 1 硬件接口 2 添加ICM20608的设备树信息 2.1 使用i.MX Pins Tool v6配置SPI引脚 2.2 配置设备树 2.3 编译.dts 2.4 在板卡中更新设备树 3 编写驱动程序 3.1 创建设备匹配表 3.2 重要函数介绍 3.2.1 初始化函数 3.2.2 写寄存器函数 3.2.3 读寄存器函数 …...

在前端开发中需要考虑的常见web安全问题和攻击原理以及防范措施
文章目录 一、XSS攻击1、反射型XSS攻击原理2、DOM型XSS攻击原理3、存储型XSS攻击原理 防范措施 二、CSRF攻击攻击原理:防范措施: 三、点击劫持攻击原理:防范措施: 四、项目中如何预防安全问题 随着互联网的发展,Web应用…...

年关将至送大礼 社区适时献爱心
在这个快节奏的时代,社区作为人们生活的重要组成部分,其凝聚力和互助精神显得尤为重要。2024年2月7日,实践队员李若钰有幸参与了社区礼盒分装的活动,这不仅仅是一次简单的劳动,更是一次心灵的洗礼和感悟。 礼盒分装&am…...

singularity容器的技术基础
Singularity容器技术是专为科学计算、数据密集型工作和高性能计算(HPC)环境设计的。与其他容器技术如Docker相比,Singularity提供了一些独特的特性和设计考虑,使其在科学和研究社区中受到欢迎。以下是Singularity容器技术的一些关…...

jax可微分编程的笔记(2)
jax可微分编程的笔记(2) 第2章 自动微分 自动微分和符号求导有诸多的相似之处:它们同样依赖于计算图 的构建,同样依赖于求导的递归实现。从某种意义上来说,它们 甚至有完全相同的数据结构。不过,二者的区…...

在Linux服务器上部署一个单机项目
目录 一、jdk安装 二、tomcat安装 三、MySQL安装 四、部署项目 一、jdk安装 1. 上传jdk安装包 jdk-8u151-linux-x64.tar.gz 进入opt目录,将安装包拖进去 2. 解压安装包 这里需要解压到usr/local目录下,在这里我新建一个文件夹保存解压后的文件 [r…...

HTTP概要
文章目录 什么是HTTP?URL的结构请求报文结构请求方法GETHEADPOSTPUTDELETETRACEOPTIONSCONNECTPATCH解释 请求头字段 响应报文结构响应状态响应头字段 HTTP会话3次握手无状态协议 什么是HTTP? HTTP,即Hypertext Transfer Protocol(超文本传输协议) 它是一个”请…...

128 Linux 系统编程6 ,C++程序在linux 上的调试,GDB调试
今天来整理 GDB 调试。 在windows 上我们使用vs2017开发,可以手动的加断点,debug。 那么在linux上怎么加断点,debug呢?这就是今天要整理的GDB调试工具了。 那么有些同学可能会想到:我们在windows上开发,…...

vue2的ElementUI的form表单报错“Error: [ElementForm]unpected width”修复
1. 问题 ElementUI的form表单,当动态切换显示表单时报错 Error: [ElementForm]unpected width。 翻译过来就是form表单的label宽度width出了问题。 2. 分析 参数说明类型可选值默认值label-width表单域标签的宽度,例如 ‘50px’。作为 Form 直接子元…...

Linux 网络命令指南
目录 配置IP地址和子网掩码 网络接口的详细信息 测试与目标主机的连通性 下载文件或内容 远程登录,进行远程管理和协作 CentOS / Red Hat(使用 firewalld) 关闭防火墙 开启防火墙 配置TCP端口(假设使用3306端口ÿ…...

vue3组件间的通信,通过props,emit,provide和inject把数据传递N个层级,expose和ref实现父组件调用子组件方法
文章目录 一、父组件数据传递N个层级的子组件vue3 provide 与 injectA组件名称 app.vueB组件名称 provideB.vueC组件名称 provideCSetup.vue 二、使用v-model指令实现父子组件的双向绑定父组件名称 app.vue子组件名称 v-modelSetup.vue 三、父组件props向子组件传值子组件 prop…...

开源免费的NTFS for mac工具mounty
开源免费的NTFS for mac工具mounty 安装依赖 brew install gromgit/fuse/ntfs-3g-macbrew install --cask macfuse安装mounty 如果已经安装macFUSE和ntfs-3g-mac,可以直接点击下载的dmg安装包,安装升级。第一次启动mounty,你需要接受一系列…...

Sora-OpenAI 的 Text-to-Video 模型:制作逼真的 60s 视频片段
OpenAI 推出的人工智能功能曾经只存在于科幻小说中。 2022年,Openai 发布了 ChatGPT,展示了先进的语言模型如何实现自然对话。 随后,DALL-E 问世,它利用文字提示生成令人惊叹的合成图像。 现在,他们又推出了 Text-t…...

4 buuctf解题
[CISCN 2019 初赛]Love Math1 打开题目 题目源码 <?php error_reporting(0); //听说你很喜欢数学,不知道你是否爱它胜过爱flag if(!isset($_GET[c])){show_source(__FILE__); }else{//例子 c20-1$content $_GET[c];if (strlen($content) > 80) {die("…...

Jmeter基础(3) 发起一次请求
目录 Jmeter 一次请求添加线程组添加HTTP请求添加监听器 Jmeter 一次请求 用Jmeter进行一次请求的过程,需要几个步骤呢? 1、添加线程组2、添加HTTP请求3、添加监听器,查看结果树 现在就打开jmeter看下如何创建一个请求吧 添加线程组 用来…...

视频怎么变成gif动图?一招教你在线转换
MP4是一种常见的视频文件格式,它可以包含音频和视频数据,并支持高质量的视频压缩。MP4视频可以呈现连续的动态效果,可以包含平滑的运动、音频等多媒体元素。而GIF动图是由一系列静态图像组成的,通过快速连续播放这些帧来创造出动态…...

Leetcode2583. 二叉树中的第 K 大层和
Every day a Leetcode 题目来源:2583. 二叉树中的第 K 大层和 解法1:层序遍历 排序 先使用层序遍历计算出树的每一层的节点值的和,保存在数组 levelSum 中。然后将数组进行排序,返回第 k 大的值。需要考虑数组长度小于 k 的边…...

(六)激光线扫描-三维重建
本篇文章是《激光线扫描-三维重建》系列的最后一篇。 1. 基础理论 1.1 光平面 在之前光平面标定的文章中,已经提到过了,是指 激光发射器投射出一条线,形成的一个扇形区域平面就是光平面。 三维空间中平面的公式是: A X + B Y + C Z + D = 0 A X+B Y+C Z+D=0...