手撸GitLab CI(阉割版)
首先,Gitlab pages是很简单的,至少比起github pages要简单很多。
Gitlab Pages的原理这是样的:首先,当你新建一个Gitlab项目的时候,你同时也建了一个存储库。
只要你的工程目录的根目录下有.gitlab-ci.yml文件,注意必须严格起这个名字。gitlab runner就会执行这个脚本文件。
脚本的最终目的很简单:把静态文件放入名为public目录下的文件夹内。Gitlab pages会一直去这个存储库的public目录找。注意:这个public是指存储库的public,与项目结构无关。换言之,这个public目录不可见。
也就是说:当你在项目的根目录下添加了.gitlab-ci.yml,且在脚本中将静态文件正确地放入了public文件夹,gitlab page就会自动打开并部署,部署的域名将会默认分配。
当然,如果你不想使用默认的配置,而是想部署到特定的域名和服务器,则需要在yml文件中进行一些docker的配置。
开发者提交代码后,runner检索项目根目录下名为.gitlab-ci.yml的文件,并执行文件中的脚本,脚本内容包括项目的运行,打包,缓存打包文件,转移文件到public目录以供gitlab pages使用。而gitlab pages会到public目录中解析静态文件成页面。
好,现在就来看一下我写的一份CI脚本,首先说一下,CI的代码风格类似于python这种,纯靠缩进来区分层级关系的,所以书写时,缩进是严格的。

下面是代码注释版版的:
building: //自己随便命名的
image: node:latest //node镜像为最新版的,最好指定版本号
stage: build //当前stage阶段为build
script: //build阶段运行的脚本
- npm install --progress=false --no-optional //根据package.json来安装依赖 progress设为false是为了不打印安装的具体进度,no optional是为了跳过npm推荐的但不是编译必须的,也没有写在package.json里一些依赖,比如说查看源代码等
- npm run build //打包
artifacts: //工件,可以缓存在gitlab的流水线记录中,供直接下载
expire_in: 3 days //工件缓存的有效时间
paths: //路径
- dist //工件指向的目录,这里指整个dist目录 cache: //缓存
paths: //路径
- node_modules/ //缓存node_mudules将大大提高ci运行的速度 pages: //随便起的名字
stage: deploy //当前阶段为deploy
script: //deploy阶段运行的命令
- rm -rf public/* //linux命令,递归无询问删除public目录下所有文件- mv dist/* public //将dist目录下的所有文件都移动到public目录下
artifacts: //工件缓存
expire_in: 3 days //时效为3天
paths: //路径
- public //缓存整个public目录的文件
only:
- dev //ceate pages下的所有操作只在dev分支上进行
下载一个工件下来看看:

可以发现我所言非虚。这时候我们把这个提交推到远程。

等待这个流水线跑完,在 项目 --> 设置 --> pages 中,可以看到线上页面已经生成了。

手撸GitLab CI(阉割版)的更多相关文章
- C#基于Mongo的官方驱动手撸一个Super简易版MongoDB-ORM框架
C#基于Mongo的官方驱动手撸一个简易版MongoDB-ORM框架 如题,在GitHub上找了一圈想找一个MongoDB的的ORM框架,未偿所愿,就去翻了翻官网(https://docs.mongo ...
- 第二篇-用Flutter手撸一个抖音国内版,看看有多炫
前言 继上一篇使用Flutter开发的抖音国际版 后再次撸一个国内版抖音,大部分功能已完成,主要是Flutter开发APP速度很爽, 先看下图 项目主要结构介绍 这次主要的改动在api.dart 及 ...
- php手撸轻量级开发(一)
聊聊本文内容 之前讲过php简单的内容,但是原生永远是不够看的,这次用框架做一些功能性的事情. 但是公司用自己的框架不能拿出来,用了用一些流行的框架比如tp,larveral之类的感觉太重,CI也不顺 ...
- .NET手撸2048小游戏
.NET手撸2048小游戏 2048是一款益智小游戏,得益于其规则简单,又和2的倍数有关,因此广为人知,特别是广受程序员的喜爱. 本文将再次使用我自制的"准游戏引擎"FlysEng ...
- GitLab CI持续集成配置方案
目录 1. 持续集成介绍 1.1 概念 1.2 持续集成的好处 2. GitLab持续集成(CI) 2.1 简介 2.2 GitLab简单原理图 2.3 GitLab持续集成所需环境 2.4 需要了解 ...
- GitLab CI
GitLab CI持续集成配置方案 目录 1. 持续集成介绍 1.1 概念 1.2 持续集成的好处 2. GitLab持续集成(CI) 2.1 简介 2.2 GitLab简单原理图 2.3 Git ...
- GitLab CI/CD的官译【原】
CI / CD方法简介 软件开发的持续集成基于自动执行脚本,以最大限度地减少在开发应用程序时引入错误的可能性.从新代码的开发到部署,它们需要较少的人为干预甚至根本不需要干预. 它涉及在每次小迭代中不断 ...
- 基于GitLab CI搭建Golang自动构建环境
基于GitLab CI搭建Golang自动构建环境 Golang发布遇到的问题 对于golang的发布,之前一直没有一套规范的发布流程,来看看之前发布流程: 方案一 开发者本地环境需要将环境变量文件改 ...
- 纯手撸web框架
纯手撸web框架 一.Web应用的组成 接下来我们学习的目的是为了开发一个Web应用程序,而Web应用程序是基于B/S架构的,其中B指的是浏览器,负责向S端发送请求信息,而S端会根据接收到的请求信息返 ...
随机推荐
- C++11标准中常用到的各种算法汇总.
在C++11标准中定义了很多算法,这些算法可以让我们很方便的操作各种容器和数组,这里要注意一下,这些算法操作的并非容器,而是迭代器,然后通过迭代器来操作容器中的数据,算法本身并不会关注容器中保存的数据 ...
- linux上MongoDB安装部署
①下载安装包 mongodb-linux-x86_64-rhel62-3.6.3.tgz ②解压: tar zxvf mongodb-linux-x86_64-rhel62-3.6.3.tgz ...
- pyqt5实现注册界面并获得文本框内容
获取框里面的内容,有一个BUG,搞了好久才搞定. __author__ = 'ayew'import sysfrom PyQt5.QtCore import*from PyQt5.QtWidgets ...
- 从壹开始前后端分离 40 || 完美基于AOP的接口性能分析
旁白音:本文是不定时更新的.net core,当前主线任务的Nuxt+VueAdmin教程的 nuxt.js 之 tibug项目已上线,大家可以玩一玩:http://123.206.33.109:70 ...
- ASP.NET Core 实战:使用 Docker 容器化部署 ASP.NET Core + MySQL + Nginx
一.前言 在之前的文章(ASP.NET Core 实战:Linux 小白的 .NET Core 部署之路)中,我介绍了如何在 Linux 环境中安装 .NET Core SDK / .NET Core ...
- asp.net core系列 51 Identity 授权(下)
1.6 基于资源的授权 前面二篇中,熟悉了五种授权方式(对于上篇讲的策略授权,还有IAuthorizationPolicyProvider的自定义授权策略提供程序没有讲,后面再补充).本篇讲的授权方式 ...
- Asp.Net Core&Jenkins持续交付到Windows Server
对于Linux平台上的持续集成和持续交付可以使用Docker快捷的完成任务,但是Windows Server下却不好使用,一般来讲,windows Server下最简单的发布方式是直接手动打包发布或是 ...
- 使用ConcurrentHashMap一定线程安全?
前言 老王为何半夜惨叫?几行代码为何导致服务器爆炸?说好的线程安全为何还是出问题?让我们一起收看今天的<走进IT> 正文 CurrentHashMap出现背景 说到ConcurrentHa ...
- NET微信公众号开发环境搭建(一)-了解微信由来
公众号的应用,开发及调试环境搭建 花生壳要注册 需要二十多块钱 ,还要实名认证,估计要一两天才能审核通过 主要就是在 windows搭建测试环境 1.微信的应用场景 360百科微信简介 ht ...
- 前端笔记之CSS(下)浮动&BFC&定位&Hack
一.浮动 1.1 各个语言的主要知识点 HTML:标签语义化(那么怎么样布局才是合理的?没有绝对的对和错) CSS: 样式: 布局: 标准流(标准文档流.普通文档流):盒子模型(width/heigh ...