前端gitlab-ci.yml 入门

提及来使用gitlab也有大半年了,天天都在跑pipeline,可是却没有好好研究过这个叫gitlab-ci.yml的文件。此次借着发布流程升级的机会,好好入门了一下。
主要分如下内容:node

  • 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,写成下面的样子:webpack

stages
  - lint
  - test
  - build
  - publish

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

上面咱们虽然定义了一个pipeline,和4个job名称,可是具体每一个job作什么仍是不清楚的,接下来咱们学习怎么定义一个job。web

job

以上面的lint为例,咱们须要执行npm run lint命令来查看有没有lint错误,那么这个job能够写成:docker

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

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

有时候,咱们但愿一些任务是在某些场景下执行的,好比:打tag的时候再build,这时候能够使用only/except。gitlab

only/except

以上面的场景为例,咱们能够这样写job-build:学习

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

这样,上面的job就只有在咱们push tags时才会触发。若是咱们但愿一个job只在某一类分支有提交的时候触发,能够这样:ui

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

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

然而,这样并不足以让这个任务跑起来,由于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表示生成的压缩文件的名字。而后在对应的任务详情特面就能够下载:

include和extends

正如经过程序经过模块来实现代码复用同样,CI的yml配置能够经过include实现配置复用:

include:
  - remote: 'https://gitlab.com/awesome-project/raw/master/.before-script-template.yml'
  - local: '/templates/.after-script-template.yml'
  - template: Auto-DevOps.gitlab-ci.yml

这样,咱们能够把一些公用的环境变量或者job放到一个公共repo中,而后在其余项目中经过remote来引用。

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

相关文章
相关标签/搜索