gitlabci yml 笔记
以下内容来自GitlabCI官方文档
最基础的
- jobs作为最顶级的元素。每个job至少包含一个script - 1 
 2- job1: 
 script1: pwd- 每个job的执行都是完全独立于其他的job 
关于Docker Image和Service的使用
- Using Docker Build。主要讲述怎么在Docker里面使用Docker构建镜像。(最简单的是在注册Runner的时候共享/var/run/docker.sock) 
- 注册的时候可以同时运行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 | 如果失败则重试几次 | 
额外说明:
- environment配合deploy使用.部署的时候人为标记是部署到了哪个环境。方便在gitlab后台查看历史记录。同时方便错误的时候可以直接在gitlab后台回滚部署。其实这个参数不要也是可以的。添加上去只是更方便一点
- artifacts和cache的区别.
- 用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

 官方网站:
 官方网站: