说起来使用gitlab也有大半年了,每天都在跑pipeline,但是却没有好好研究过这个叫gitlab-ci.yml的文件。这次借着发布流程升级的机会,好好入门了一下。

主要分以下内容:

  • stages
  • cache
  • only
  • when
  • before_script,script, after_script
  • artifacts
  • hidden_job && extends
  • reserved keywords - include

stages:

stages是用来定义一个pipeline的,一个pipeline就像一个流水线,由一系列job来构成。比如在发布(publish)之前要做lint,test,build,那么这四个job就构成一个pipeline,写成下面的样子:

stages
- lint
- test
- build
- publish

然后你在gitlab的pipeline下面就能看到下面的图:

上面我们虽然定义了一个pipeline,和4个job名称,但是具体每个job做什么还是不清楚的,接下来我们学习怎么定义一个job。

job

以上面的lint为例,我们需要执行npm run lint命令来查看有没有lint错误,那么这个job可以写成:

job-lint:
stage: lint
script: npm run lint

这里job-lint是任务名称,script是要在终端执行的命令,stage表示这个job属于哪个stage(pipeline的某个节点)。job名称这里要注意一点是,不能使用保留字,比如:不能把一个job的名字称为stages或者image,就像变量名不能用if一样。相关文档可以看这里

有时候,我们希望一些任务是在某些场景下执行的,比如:打tag的时候再build,这时候可以使用only/except。

only/except

以上面的场景为例,我们可以这样写job-build:

job-build:
stage: build
script: npm run build
only:
- tags

这样,上面的job就只有在我们push tags时才会触发。如果我们希望一个job只在某一类分支有提交的时候触发,可以这样:

job-bugfix-build:
stage: build
script: npm run build
only:
- /^bugfix-.+$/

上面这个例子只有在bugfix为前缀的分支产生提交的时候,才会触发job-bugfix-build。

然而,这样并不足以让这个任务跑起来,因为CI是跑在docker里面的,在执行run lint之前,我们需要把node环境搭起来,这就需要image保留字了:

image: node:12.18

添加了image之后,在任务开始之前,还要安装依赖,我们使用before_script来完成这件事:

# 使用node镜像
image: node:12.18 # 安装依赖
before_script:
- npm install

有时候我们希望在某些场景下不执行某项任务,这时可以使用expect,比如不对hotfix进行lint:

job-lint-except-hotfix:
script:
- npm run lint
except: /^hotfix-.+$/

when

说了only,再说说when,when 是用来决定当前置任务失败时,当前job是否执行,以及如何执行的问题。比如我们希望lint成功了再执行build:

build_job:
when: on_success
stage: build
needs: lint_job

再比如我们在执行发布的时候,希望手动点击发布按钮来执行发布:

publish_job:
when: manual
stage: publish
script: npm run deploy

artifacts

在前面提到的build job中,我们会使用webpack生成压缩,混淆后的代码,此时我们需要把它保存或者下载下来,这时就要用到artifacts了。用法如下:

build_job:
script: npm run build
artifacts:
name: "$CI_COMMIT_REF_NAME"
paths: dist/

artifacts最终会被打包成一个压缩文件,这里的path表示要添加到压缩文件的文件或文件夹,name表示生成的压缩文件的名字。然后在对应的任务详情特面就可以下载:

参考:

https://gitlab.com/help/ci/yaml/README

前端gitlab-ci.yml 入门的更多相关文章

  1. GitLab CI/CD的官译【原】

    CI / CD方法简介 软件开发的持续集成基于自动执行脚本,以最大限度地减少在开发应用程序时引入错误的可能性.从新代码的开发到部署,它们需要较少的人为干预甚至根本不需要干预. 它涉及在每次小迭代中不断 ...

  2. 前端初探 Gitlab CI/CD

    前言 纵观人类历史的发展以及三次工业革命,你会发现利用机器来替代部分人力劳动,将重复的工作自动化从而解放生产力都是发展的必然趋势,在软件工程领域也不例外,其中 CI/CD 就是其中一项,那么什么是 C ...

  3. GitLab CI/CD 自动化部署入门

    前言:因为找了B站内推,测试开发,正好知道内部使用GitLab做自动化测试,所以简单学了一下,有错误的地方请指正. 入门 初始化 cp: 无法获取'/root/node-v12.9.0-linux-x ...

  4. 【转】gitlab CI流水线配置文件.gitlab-ci.yml详解

    目录 GitLab CI流水线配置文件.gitlab-ci.yml详解 实验环境 GitLab CI介绍 .gitlab-ci.yml 配置参数 参数详解 script image services ...

  5. 实践分享!GitLab CI/CD 快速入门

    用过 GitLab 的同学肯定也对 GitLab CI/CD 不陌生,GitLab CI/CD 是一个内置在 GitLab 中的工具,它可以帮助我们在每次代码推送时运行一系列脚本来构建.测试和验证代码 ...

  6. [转] 基于Gitlab CI搭建持续集成环境

    [From] https://blog.csdn.net/wGL3k77y9fR1k61T1aS/article/details/78798577 前言 本文是在12月12号迅雷@赵兵在前端早读课第三 ...

  7. Gitlab CI/CD

    Gitlab CI/CD 前言 纵观人类历史的发展以及三次工业革命,你会发现利用机器来替代部分人力劳动,将重复的工作自动化从而解放生产力都是发展的必然趋势,在软件工程领域也不例外,其中 CI/CD 就 ...

  8. GitLab CI持续集成配置方案

    目录 1. 持续集成介绍 1.1 概念 1.2 持续集成的好处 2. GitLab持续集成(CI) 2.1 简介 2.2 GitLab简单原理图 2.3 GitLab持续集成所需环境 2.4 需要了解 ...

  9. GitLab CI

    GitLab CI持续集成配置方案   目录 1. 持续集成介绍 1.1 概念 1.2 持续集成的好处 2. GitLab持续集成(CI) 2.1 简介 2.2 GitLab简单原理图 2.3 Git ...

  10. Gitlab CI 自动部署 asp.net core web api 到Docker容器

    为什么要写这个? 在一个系统长大的过程中会经历不断重构升级来满足商业的需求,而一个严谨的商业系统需要高效.稳定.可扩展,有时候还不得不考虑成本的问题.我希望能找到比较完整的开源解决方案来解决持续集成. ...

随机推荐

  1. MES系统与喷涂设备软件基于文本文件的数据对接方案

    产品在生产过程中除了记录产品本身的一些数据信息,往往还需要记录下生产设备的一些参数和状态,这也是MES系统的一个重要功能.客户的药物支架产品,需要用到微量药物喷涂设备,客户需要MES系统能完整记录下每 ...

  2. JVM 垃圾收集算法 标记-清楚、标记-复制、标记-整理

    摘要 Java程序在运行过程中会产生大量的对象,但是内存大小是有限的,如果光用而不释放,那内存迟早被耗尽.如C.C++程序,需要程序员手动释放内存,Java则不需要,是由垃圾回收器去自动回收. 垃圾回 ...

  3. Mysql如何将某个字段的值,在原有的基础上+1?

    Eg: 电商项目中,需要统计某件商品的购买数量问题,这时产品提了一个bug,告诉你我需要你做一个购买数量统计?你会怎么做呢? 这里我只说我自己的思路,首先是浏览加购物车,创建订单并支付,mq消息消费后 ...

  4. C#可空类型 T?

    可空类型概述 可空类型具有以下特性: 可空类型表示可被赋值为 null 值的值类型变量.无法创建基于引用类型的可空类型.(引用类型已支持 null 值.). 语法 T? 是 System.Nullab ...

  5. django学习(三)

    1.单表操作和测试环境的准备 我们先对单表查询做一个总结和回顾,并进行进一步的学习和交流.我们在我们的应用的models.py文件下面书写user类.如下所示,然后用数据库迁移,在mysql数据库中生 ...

  6. JVM学习第三天(JVM的执行子系统)之开篇Class类文件结构

    虽然这几天 很忙,但是学习是不能落下的,也不能推迟,因为如果推迟了一次,那么就会有无数次;加油,come on! Java跨平台的基础: 各种不同平台的虚拟机与所有平台都统一使用的程序存储格式——字节 ...

  7. vue实现侧边导航栏

    <div class="sidebar"> <el-menu class="sidebar-el-menu" :default-active= ...

  8. 在Win10上安装Apache2.44

    下载地址:https://www.apachelounge.com/download/VS16/binaries/httpd-2.4.41-win64-VS16.zip 如果以上地址失效请到 http ...

  9. postman测试接口

    一.postman安装 不介绍.可百度搜索.安装完成后如下: 二.postman测试接口 get请求: post请求:请求参数如果是json格式,则如下 上传文件:如果接口中要求上传文件,可如下操作 ...

  10. PHP面试总结(转)

    PHP面试总结   从8月15号来到北京一直到今天,一月有余.来的这段时间一直准备笔试面试,大大小小的公司,乱七八糟面了10多家,近期才安顿下来.面试的这段时间感觉自己成长了不少.初来到这个陌生的城市 ...