Gitlab CI/CD 入门教程

前言

开发人员常常提到的 CI/CD 是什么?

  • 是用于集成测试的工具,每次提交代码后自动检测、构建和进行单元测试的过程。这一整条流水线式的测试流程我们称之为 pipeline。

入门教程

如何使用 CI/CD?

  • 首先需要确保有可用的 runner(如何确保呢?请看 CI/CD 入门),来运行下文提到的各种任务。
  • 在仓库的根目录下创建并编写一个 .gitlab-ci.yaml 文件,记录需要执行的各种指令,比如进行规范检查(例如PEP8)、自动打包、自动部署等。该遵循 yaml 文件的语法,可以使用 gitlab 自带的 CI lint 检查。

使用技巧

在编写 .gitlab-ci.yaml 文件的时候,有很多关键字,本文列举了一些常用&重要的关键字。

  • stages 关键字:定义了pipeline中各任务的执行顺序。 需要注意以下几点:

    • 如果两个任务对应的stage名相同,则这两个任务会并行运行

    • 一个stage成功执行完了,才能执行下一个stage(如果失败了,下一个stage将不会执行,如果想要修改该特性,可以使用when关键字,见下文)

    • 如果想要控制某一个stage在最开始,或者最后执行,可以使用.pre.post 关键字

    • 举例( 下面样例的执行顺序是: build-job1 & build-job2并行执行 -> test1 -> deploy。)

    stages:- build- test- deploybuild-job1:stage: buildscript: echo "build-job1"build-job2:stage: buildscript: echo "build-job2"test1:stage: testscript: echo "test"deploy1:stage: deployscript: echo "deploy"
    ...
    
  • only/except 关键字:控制任务的触发条件。

    • only关键字的默认策略是[‘branches’, ‘tags’],即你提交了一个分支或者打了标签,就会触发;except 和 only 语义相反。

    • 策略的分类:

      • branches: 当你的Git Refs对应的是一个分支时触发
      • tags: 当你的Git Refs对应的是一个标签时触发
      • pushes: 当你使用git push时触发
      • merge_requests: 当你创建或者更新一个merge_requests时触发
  • tags 关键字:指定使用哪个Runner(哪个机器)去执行任务,注意与上文only关键字的tags进行区分

  • cache关键字:指定了需要缓存的文件夹或者文件,目的是为了加快执行速度

  • artifacts关键字:和cache类似,也可以缓存文件或文件夹,不同的是,这些文件可以在Gitlab的UI界面中下载,一般可用来存储Android打包生成的apk。

  • allow_failure关键字:允许任务失败,任务失败将不会影响pipeline失败。

  • dependencies关键字:定义了任务的依赖关系,比如依赖其他的项目、库、工具、任务等。

  • variables关键字:定义局部变量(只在当前的任务中生效)

  • when关键字:可以手动修改stage原有的执行规则。一共有五个值:

    • on_success:只有前面stages的所有工作成功时才执行,这是默认值。
    • on_failure:当前面stages中任意一个jobs失败后执行
    • always:无论前面stages中jobs状态如何都执行
    • manual:手动执行
    • delayed:延迟执行
  • 更多关键字参考:https://docs.gitlab.cn/jh/ci/yaml/

完整样例

来一个完整的 .gitlab-ci.yml 例子:

  • stages:  # 定义了两个stage,先 build 后 test- build- testcache: # 定义 cache 缓存文件夹路径paths:- cache_dir/variables:  # 定义了全局变量,所有任务中的NVIDIA_GROUP变量都是 xxxNVIDIA_GROUP: xxxbuild-job:stage: buildvariables:DOCKER_IMAGE: $REGISTRY/$IMAGE_ID  # 专属于 build-job 的局部变量only:  # 当前任务只会在打 tag 和master 分支有提交时才会触发- tags- mastertags:  # 指定当前任务在 machine1 这台机器上执行- machine1script: # 当前任务的执行脚本- echo "build-job is runing"cache:  # 当前任务的缓存文件夹- binaries/artifacts:paths:- html_doc/allow_failure: true  # 允许当前任务失败test-job:stage: testdependencies:  # 当前任务依赖 build-job 的执行结果- build-jobonly:  # 当前任务只在 master 分支有所提交的时候才会触发- masterscript:- echo "test-job is running"
    

参考资料:

  • Gitlab-CI使用教程:https://juejin.cn/post/6844904045581172744
  • .gitlab-ci.yml 关键字参考: https://docs.gitlab.cn/jh/ci/yaml/

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

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

相关文章

Rust初接触

一、什么是Rust Rust 是由 Mozilla 开发的多范式编程语言,专注于性能和安全性。 Rust 以其先进的安全并发能力而闻名, 它的语法类似于 C,但它提供了更快的速度和内存安全性,但不使用垃圾收集器。 Rust 最初是为 Mozilla Firefox …

SpringCloud组件Ribbon的IRule的问题排查

最近很久没有写文章啦,刚好遇到了一个问题,其实问题也挺简单,但是还是得对源码有一定了解才能够发现。 最近在实现一个根据请求流量的标签,将请求转发到对应的节点,其实和俗称的灰度请求有点相似, 实现思…

数据结构与算法-(8)---队列(Queue)

🌈write in front🌈 🧸大家好,我是Aileen🧸.希望你看完之后,能对你有所帮助,不足请指正!共同学习交流. 🆔本文由Aileen_0v0🧸 原创 CSDN首发🐒 如…

【AI视野·今日Robot 机器人论文速览 第五十三期】Thu, 12 Oct 2023

AI视野今日CS.Robotics 机器人学论文速览 Thu, 12 Oct 2023 Totally 25 papers 👉上期速览✈更多精彩请移步主页 Daily Robotics Papers Pixel State Value Network for Combined Prediction and Planning in Interactive Environments Authors Sascha Rosbach, St…

eclipse 配置selenium环境

eclipse环境 安装selenium的步骤 配置谷歌浏览器驱动 Selenium安装-如何在Java中安装Selenium chrome驱动下载 eclipse 启动配置java_home: 在eclipse.ini文件中加上一行 1 配置java环境,网上有很多教程 2 下载eclipse,网上有很多教程 ps&…

207、SpringBoot 整合 RabbitMQ 实现消息的发送 与 接收(监听器)

目录 ★ 发送消息★ 创建队列的两种方式代码演示需求1:发送消息1、ContentUtil 先定义常量2、RabbitMQConfig 创建队列的两种方式之一:配置式:问题: 3、MessageService 编写逻辑PublishController 控制器application.properties 配…

思维模型 峰终定律

本系列文章 主要是 分享 思维模型,涉及各个领域,重在提升认知。 1 峰-终定律的应用 1.1 迪士尼游乐园 迪士尼乐园采用了多种策略来创造令人难忘的体验,从而遵循峰终定律的原则。具体如下: 迪士尼乐园的入口设计和服务体验&…

Interlay采用Moonbeam路由流动性,为波卡发展更多流动性

波卡上的首选多链开发平台Moonbeam宣布Interlay现在支持由Carrier赋能的Moonbeam路由流动性。Carrier是一个功能强大的token和NFT跨链桥,支持超过12个网络。Interlay是波卡上的一条平行链,与HydraDX一起通过Wormhole、Moonbeam和Carrier为波卡生态挖掘流…

基于workbench的PTFE矩形密封圈压缩回弹仿真分析

研究背景: 近年来随着工业发展和科技进步,高压容器使用场景逐渐增大,使用环境越发苛刻,如高温、高压以及内部压力的波动,这都对容器端面密封性能的要求更为严格。端面密封所用的密封件必须具备优良的回弹性能和耐化学…

【Vue基础-数字大屏】加载动漫效果

一、需求描述 当网页正在加载而处于空白页面状态时,可以在该页面上显示加载动画提示。 二、步骤代码 1、全局下载npm install -g json-server npm install -g json-server 2、在src目录下新建文件夹mock,新建文件data.json存放模拟数据 {"one&…

推荐《金田一少年事件簿》

天树征丸原作,佐藤文也作画的漫画 金田一少年事件簿 播报编辑讨论7上传视频 《金田一少年事件簿》是一部日本推理漫画。早期原作为金成阳三郎(后担任剧本),原作为天树征丸(前原案),由漫画家佐…

【网安】网络安全防止个人信息泄露

网络安全防止个人信息泄露 1、尝试检查自己的网络隐私数据是否泄漏过,可以使用下面的网站2、使用安全非盈利组织的浏览器3、安装浏览器插件,防止网络跟踪4、保持安全的访问方式 1、尝试检查自己的网络隐私数据是否泄漏过,可以使用下面的网站 …

【react基础02】编写函数式组件和类组件

函数式组件和类组件 React组件的规范函数式组件类组件 React组件的规范 1、命名遵循PascalCase原则,即所有单词首字母大写,然后拼接在一起 如:Age 、FirstName 函数式组件 代码: import ReactDOM from react-dom/client;const…

springboot的配置项ENC加解密

在web项目中我们看到application文件中很多出现配置项是ENC(xxxxx)&#xff0c;这就表示xxx这个参数是经过加密之后的结果。 我们想要在其他地方使用参数必须要做解密。以下是实现方法。 加解密的实现依赖jasypt。所以需要引入以下jar包 <dependency><groupId>org…

【教程】使用vuepress构建静态文档网站,并部署到github上

官网 快速上手 | VuePress (vuejs.org) 构建项目 我们跟着官网的教程先构建一个demo 这里我把 vuepress-starter 这个项目名称换成了 howtolive 创建并进入一个新目录 mkdir howtolive && cd howtolive使用你喜欢的包管理器进行初始化 yarn init 这里的问题可以一…

2023-2024-1 for循环-1(15-38)

7-15 输出闰年 输出21世纪中截止某个年份以来的所有闰年年份。注意&#xff1a;闰年的判别条件是该年年份能被4整除但不能被100整除、或者能被400整除。 输入格式: 输入在一行中给出21世纪的某个截止年份。 输出格式: 逐行输出满足条件的所有闰年年份&#xff0c;即每个年…

06-Scala面向对象

面向对象编程 ​ Scala是一门完全面向对象的语言&#xff0c;摒弃了Java中很多不是面向对象的语法。 ​ 虽然如此&#xff0c;但其面向对象思想和 Java的面向对象思想还是一致的 Scala包 1&#xff09;基本语法 Scala中基本的package包语法和 Java 完全一致 例如&#xf…

前端TypeScript学习day04-交叉类型与泛型

(创作不易&#xff0c;感谢有你&#xff0c;你的支持&#xff0c;就是我前行的最大动力&#xff0c;如果看完对你有帮助&#xff0c;请留下您的足迹&#xff09; 目录 交叉类型 泛型 创建泛型函数 调用泛型函数&#xff1a; 简化调用泛型函数&#xff1a; 泛型约束 指定…

Marin说PCB之BGA焊盘削焊盘带来的焊接问题和解决办法

每周日上午10点钟都是小编最开心的时间了&#xff0c;这个点是斗破苍穹播出的时间。小编我从萧炎从这个动漫开播到现在都追了好多年了&#xff0c;强烈推荐喜欢这个小说的可以看这个动漫&#xff0c;拍的还不错&#xff0c;只是萧炎的配音不再是张沛老师了&#xff0c;有点可惜…

基于Java的宠物领养管理系统设计与实现(源码+lw+部署文档+讲解等)

文章目录 前言具体实现截图论文参考详细视频演示为什么选择我自己的网站自己的小程序&#xff08;小蔡coding&#xff09;有保障的售后福利 代码参考源码获取 前言 &#x1f497;博主介绍&#xff1a;✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域优质创作…