以下内容来自GitlabCI官方文档

最基础的

  • jobs作为最顶级的元素。每个job至少包含一个script

    1
    2
    job1:
    script1: pwd

    每个job的执行都是完全独立于其他的job

关于Docker Image和Service的使用

  • Using Docker Build。主要讲述怎么在Docker里面使用Docker构建镜像。(最简单的是在注册Runner的时候共享/var/run/docker.sock)

  • Using Docker images

  • 注册的时候可以同时运行Services。这样在任务执行期间可以访问services

    1
    2
    3
    4
    5
    6
    7
    8
    sudo gitlab-runner register \
    --url "https://gitlab.example.com/" \
    --registration-token "PROJECT_REGISTRATION_TOKEN" \
    --description "docker-ruby-2.1" \
    --executor "docker" \
    --docker-image ruby:2.1 \
    --docker-postgres latest \
    --docker-mysql latest
  • service就是任务执行的时候能够访问到别的容器。比如Mysql、Postgresql、Redis、Rabbitmq啥的

  • 访问service就和我们使用docker-compose差不多

其他的一些Top-Level设置

  • before_script: 在每个任务执行前执行.比如配置好ssh config
  • after_script: 在每个任务执行完成后执行.好像用处不大
  • stages: ** 每个任务都可以属于一个stage.同一个stage的job是并行的.但是只有一个stage所有都执行完毕才会执行下一个stage**
  • variables: 每个job都可以使用的环境变量。此处只能进行很简单的设置。比如我希望将当前日期用一个固定的格式表达(需要用date命令进行转换),在这里是行不通的
  • cache:

可选项最多的Jobs配置来了

  • jobs: 必须要有独立的名称
Keyword Description
script 定义shell脚本
image 使用的image.可以覆盖掉全局的
services 使用docker services,覆盖掉全局
stage 属于哪个阶段
variables 定义job的环境变量
only 只有满足某条件的时候才会被执行
except 满足某条件的时候不执行
tags 哪些Runners能够执行该任务
allow_failure 允许任务失败。正常情况下失败则会不进行后续步骤
when 定义任务什么时候执行。manual手动还挺有用┑( ̄Д  ̄)┍
artifacts 将构建生成的文件上传到gitlab。允许从gitlab后台进行下载
dependencies 配合artifacts使用。将生成的artifacts文件跨job使用
cache 缓存文件给后续job使用
before_script 覆盖全局
after_script 覆盖全局
environment 文档
coverage 代码覆盖率设置
retry 如果失败则重试几次

额外说明:

  1. environment配合deploy使用.部署的时候人为标记是部署到了哪个环境。方便在gitlab后台查看历史记录。同时方便错误的时候可以直接在gitlab后台回滚部署。其实这个参数不要也是可以的。添加上去只是更方便一点
  2. artifacts和cache的区别.
    • cache可以在全局使用也可以在job内部使用.但是artifacts只能在job内部使用

    • 特别注意 cache跨越该项目的整个生命周期。跨越不同的pipeline.job开始之前会先解压已有的cache.而artifacts只会再单个pipeline周期。且某个stage创建之后。在后续的stage中才能够使用。artifacts会同时上传文件到gitlab(上传步骤还是必须的)。

      YAML特殊语法

  • 用anchors(&)、aliases(*)、merging(<<) 来简化编写(大多数情况下应该没啥用)

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    .job_template: &job_definition  # Hidden key that defines an anchor named 'job_definition'
    image: ruby:2.1
    services:
    - postgres
    - redis

    test1:
    <<: *job_definition # Merge the contents of the 'job_definition' alias
    script:
    - test1 project

    test2:
    <<: *job_definition # Merge the contents of the 'job_definition' alias
    script:
    - test2 project

参考文档

Configuration of your jobs with .gitlab-ci.yml
Using Docker images