小白聊 CI / CD - 整一个 .gitlab.yml

761 阅读3分钟

Lynne,一个能哭爱笑永远少女心的前端开发工程师。身处互联网浪潮之中,热爱生活与技术。

前言

在开发工具类项目中,为了提高项目部署效率,gitlab自带的ci/cd是个很不错的选择。

今天介绍一下 一个 .gitlab.yml 的组成机构和作用。

stages:
  - build
  - publish

before_script:
  - echo ------ ci set registry ------
  - npm set registry 'npm_registry'

cache:
  paths:
    - ./node_modules/

build_job:
  stage: build
  tags:
    - wand-ui
  script:
    - echo ------ ci build start------
    - npm install
    - npm run build
    - echo ------ ci build end ------
    - echo 'token-info'>.npmrc
    - node ./publish.js
    - echo ------ publish end ------
  only:
    - master

1. before_script

before_script用来定义所有job之前运行的命令,包括deploy(部署) jobs,但是在修复artifacts之后。它可以是一个数组或者是多行字符串。

2. stages

stages用来定义可以被job调用的stages。stages的规范允许有灵活的多级pipelines。

stages中的元素顺序决定了对应job的执行顺序:

1. 相同stage的job可以平行执行。
2. 下一个stage的job会在前一个stage的job成功后开始执行。

接下仔细看看这个例子,它包含了3个stage:

stages:
 - build
 - test
 - deploy
  1. 首先,所有build的jobs都是并行执行的。
  2. 所有build的jobs执行成功后,test的jobs才会开始并行执行。
  3. 所有test的jobs执行成功,deploy的jobs才会开始并行执行。
  4. 所有的deploy的jobs执行成功,commit才会标记为success
  5. 任何一个前置的jobs失败了,commit会标记为failed并且下一个stages的jobs都不会执行。

这有两个特殊的例子值得一提:

  1. 如果.gitlab-ci.yml中没有定义stages,那么job's stages 会默认定义为 buildtest 和 deploy
  2. 如果一个job没有指定stage,那么这个任务会分配到test stage。

3. cache

Gitlab Runner v0.7.0 开始引入。

cache用来指定需要在job之间缓存的文件或目录。只能使用该项目工作空间内的路径。

从GitLab 9.0开始,pipelines和job就默认开启了缓存

如果cache定义在jobs的作用域之外,那么它就是全局缓存,所有jobs都可以使用该缓存。

4. Jobs

.gitlab-ci.yml允许指定无限量jobs。每个jobs必须有一个唯一的名字,而且不能是上面提到的关键字。job由一列参数来定义jobs的行为。

job_name:
  script: // 要执行的脚本
    - rake spec
    - coverage
  stage: test // 定义job stage
  only:
    - master // 定义一列git分支,并为其创建job
  except: // 定义一列git分支,不创建job
    - develop
  tags: // 定义一列tags,用来指定选择哪个Runner(同时Runner也要设置tags)
    - ruby
    - postgres
  allow_failure: true //允许job失败。失败的job不影响commit状态

tags

tags可以从允许运行此项目的所有Runners中选择特定的Runners来执行jobs。

在注册Runner的过程中,我们可以设置Runner的标签,比如rubypostgresdevelopment

提到 runner,必须要说明,如果只有 .gitlab.yml 文件却没有 gitlab runner,ci/cd 也是不会执行的。

gitlab runner

有三种配置方式,一般我们采用 Specific Runners 下 Set up a specific Runner manually 就够了。

按照文档提供的流程就可以:

  1. Install GitLab Runner
  2. Specify the following URL during the Runner setup: https://git.guahao-inc.com/ 
  3. Use the following registration token during setup: 9PN8vkZezz1BuAVQcskp 
  4. Start the Runner!

具体配置中出现的问题后面补上。