利用gitlab-ci和gitlab-pages免费自动构建部署vue项目。

本文使用 gitlab 官方仓库及 pages 服务,非自建 gitlab,同时也未使用自己的 runner。

react 等项目也是没问题的。不如说大多数前端项目都是可以的。

我之前用 vue-cli 创建了一个项目,用于展示自己的简历。之前有接触过 gitlab-ci,今天突然想到 gitlab 也有 pages 服务。如果把他们结合起来,那么我就可以节省一笔服务器费用。还可以水一篇文章。

vue-ci 是什么?简而言之就是在你 push 代码到仓库的时候,它可以根据你项目中的 .gitlab-ci.yml 文件来自动构建项目,然后部署到服务器中。

这样带来的好处就是不用自己在本地构建项目,然后打包成 zip 文件上传到服务器,再解压。我们只需要 git push 就完事了。

gitlab-pages 就跟 gitlab 的 pages 差不多,就是个静态站点服务器。我们可以把静态站点部署到 gitlab 的 pages 服务器上,然后通过 https://username.gitlab.io/projectName 来访问,或者绑定自定义的域名。

整篇文章分三步走,创建项目 -> 编写.gitlab-ci.yml -> 绑定自定义域名

创建项目

首先,在 gitlab 官网注册一个账号并登录,然后将语言设置为中文,可参考这篇文章(https://blog.csdn.net/wh2574021892/article/details/106062266/)。

然后创建一个空仓库,再把自己的项目上传到仓库中。仓库的公开性可以设置为私有,然后在仓库设置的通用设置中有一个pages的可见性设置,能设置成公开。

vue 项目中记得要创建一个 vue.config.js 文件,写入下面的代码:

module.exports = {
  publicPath: ''
}

它的作用是表示项目打包后的资源文件引用目录,这里改成空字符串能让资源文件引用变成相对路径,更多详解的自己去查。

编写 .gitlab-ci.yml

接着在项目根目录创建一个 .gitlab-ci.yml 文件,写入如下代码:

image: node:latest

stages:
  - build
  - deploy

build:
  stage: build
  script:
    - npm install
    - npm run build

pages:
  stage: deploy
  script:
    - rm -rf public
    - mkdir public && cp -rf dist/* public
  artifacts:
    paths:
      - public
    expire_in: 30 days

cache:
  paths:
    - node_modules
    - dist

关于 .gitlab-ci.yml 文件如何编写,可参考文章: https://scarletsky.github.io/2016/07/29/use-gitlab-ci-for-continuous-integration/#gitlab-ci-yml

当然也可以直接拿我这份去用,我这里只解释一些我写的,下面是带注释版


image: node:latest   # 表示使用有 nodejs 环境的 docker,python等也有其他的 docker。

stages:     # 定义阶段顺序
  - build   # 先 build
  - deploy  # 再部署

build:                   # 定义一个 job 叫 build
  stage: build           # 它属于 build 阶段
  script:                # 该 Job 要执行的命令行
    - npm install        # npm 安装项目依赖
    - npm run build      # build 项目

pages:                   # 定义一个 job 叫 pages,最后一个阶段一定要叫 pages,这样 gitlab-pages 才会开始工作
  stage: deploy          # 他属于 deploy 阶段
  script:                # 该 Job 要执行的命令行
    - rm -rf public      # 删除 public 目录及目录下的文件。
    - mkdir public && cp -rf dist/* public  # 创建一个 public 目录,并且把 build 结果 dist 下的文件复制到 public
  artifacts:             # 定义工件,在 jobs 执行完了后,gitlab-pages 会把工件目录下的文件自动部署到 pages 服务器中
    paths:               # 将项目中的文件夹定义为工件目录
      - public           # 要想部署到 pages 服务器中,这个文件夹必须叫 public ,所以前面一定要把打包结果复制到 public 文件夹
    expire_in: 30 days   # 工件有效期为 30 天,工件到期不会影响 pages

cache:                   # 定义缓存文件,从一个 job 到另一个 job ,除仓库外的文件都会被删除,然后把缓存文件复制到下一个 job
  paths:                 # 定义缓存文件的路径
    - node_modules       # 这里要缓存 node_modules,在下一次触发 gitlab-ci 时,缓存会被还原,就不用重复安装依赖。
    - dist               # 同时把 build 阶段生成的 dist 文件夹也缓存起来,在 deploy 阶段会用到。

写好后,把他添加到 git ,然后提交,再 push。

打开项目,找到 CI/CD

image

就可以看到流水线的状态了,点已通过状态进去看看详情。

image

看到下面这个 job 通过了,就表示 pages 部署成功了。
这个时候再打开项目设置中的 pages 菜单

image

当看到图中 https://username.gitlab.io/projectName 这样的地址,就表示成功了。

绑定自定义域名

到这里其实是可选项了,因为服务已经启动起来了。如果你有域名,那就继续,没有域名就不用往下看了。

绑定新域名前,一定要确保默认的域名能够访问到 pages。否则会导致自定义域名的 https 证书创建失败。

先点击 pages 设置中的 新域名按钮来添加一个域名,在域名输入框中输入你要绑定的域名,我这里是 resume.jethro.fun

image

点击创建新域

然后会提示“此域名未经过验证。在启用访问权限之前,您需要验证所有权。”

我们先创建一个 DNS 解析,我是阿里云买的域名,所以去阿里云创建解析。

复制 pages 的 DNS 解析提示: resume.jethro.fun CNAME jethroH.gitlab.io.

image

按照提示,创建一个记录,类型为 CNAME ,主机记录为 resume.jethro.fun,记录值为 jethroH.gitlab.io

其他的保持默认即可。

然后来验证域名所有权,按照提示添加一个 TXT 记录

image

复制出来粘贴到记事本

_gitlab-pages-verification-code.resume.jethro.fun TXT gitlab-pages-verification-code=482bf2bc6050214ad1424b0cc7f54be0

TXT 前面的是域名,后面的是值:设置出来像这样:

image

到这里解析已经创建好了,点刷新按钮验证一下:

image

验证通过后保存修改,然后等几分钟创建HTTPS证书,创建好以后就可以通过自定义域名来访问你的 pages 啦!

下一步计划整一个 CDN 加速。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,711评论 5 468
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,932评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,770评论 0 330
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,799评论 1 271
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,697评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,069评论 1 276
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,535评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,200评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,353评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,290评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,331评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,020评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,610评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,694评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,927评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,330评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,904评论 2 341

推荐阅读更多精彩内容