1、gitlab-ci.yml参数列表


是否必须

描述

script

必须

 定义由Runner执行的shell脚本或命令

extends

非必须

 定义此作业将继承的配置条目

image

非必须

 需要使用的docker镜像,请查阅该文档

services

非必须

 定义所需的docker服务,请查阅该文档

stage

非必须

 定义一个工作场景阶段,默认是test

type

非必须

 stage的别名,不赞成使用

variables

非必须

 在job级别上定义的变量

only

非必须

 定义job所引用的git分支

except

非必须

 定义job所不适用的git分支

tags

非必须

 定义job所适用的runner,tags为runner标签

allow_failure

非必须

 允许任务失败,但是如果失败,将不会改变提交状态

when

非必须

 定义了job什么时候执行,可以是on_success、on_failure、always和manual

dependencies

非必须

 定义了该job依赖哪一个job,如果设置该项,可以通过artifacts设置

artifacts

非必须

 工件,在依赖项之间传递的东西,类似cache,但原理与cache不同

cache

非必须

定义需要被缓存的文件、文件夹列表

 before_script

非必须

 覆盖在作业之前执行的脚本或命令

 after_script

非必须

 覆盖在作业之后执行的脚本或命令

 environment

非必须

 定义让job完成部署的环境名称

 coverage

非必须

 定义job设置代码覆盖率

 retry

非必须

 定义job失败后的自动重试次数

 

2、gitlab-ci配置示例

# docker镜像
image: ruby:2.1
# 依赖的docker服务
services:
  - postgres
# 开始执行脚本前所需执行脚本
before_script:
  - bundle install
# 脚本执行完后的钩子,执行所需脚本
after_script:
  - rm secrets
# 该ci pipeline适合的场景
stages:
  - build
  - test
  - deploy
# 定义的任务1
job1:
  # 场景为构建
  stage: build
  # 所需执行的脚本
  script:
    - execute-script-for-job1
  # 在哪个分支上可用
  only:
    - master
  # 指定哪个ci runner跑该工作
  tags:
    - docker

 

3、生产环境配置示例

# general settings for all
.general: &general
  stage: deploy     #定义构建场景为部署,1.init初始化、2.lint代码规范、3.unit_test单元测试、4.build构建、5.deploy部署,若其中任务一个步骤出错,都不会到部署
  only:
    - hotfix/hotfix-conference      #指定分支名为紧急修bug,master主开发分支、feature新功能分支、release发布分支、hotfix紧急修bug分支
  when: manual   #触发条件为手工执行
  tags:
    - cloud         #指定在哪个ci runner工作,云
  image: ip:30050/builder/maven:v1-alpine      #青云maven容器
  script:
    - echo "current branch ****** $CI_COMMIT_REF_NAME ******"
    - echo "deploy start ..."

    - /share/script/deploy.sh $CI_JOB_NAME     #执行脚本,此脚本路径是被映射至gitlab runner容器内的路径,参数为CI_JOB_NAME变量
    
    - echo "deploy done."

# general settings for dev 
.dev: &dev        #开发环境
  <<: *general    #继承general定义的变量,若重新定义将被覆盖
  tags:
    - local     #本地
  image: ip:30050/builder/maven:v1-alpine   #本地maven容器


# golive deploy setting
.golive: &golive   
  <<: *general  #继承general定义的变量,若再定义将被覆盖
  only:
    - master    #指定分支名
  script:
    - echo "current branch ****** $CI_COMMIT_REF_NAME ******"
    - echo "deploy golive start ..."

    - /share/script/golive/deploy.sh $CI_JOB_NAME
    
    - echo "deploy golive done."


#######定义hotfix/hotfix-conference 分支使用dev使用dev job的配置、test使用 general job的配置   
# deploy discovery
discovery - dev: *dev
discovery - test: *general

# deploy services
services - dev: *dev
services - test: *general

######定义仅master分支使用golive job定义的配置
backend - staging - node1: *golive
backend - staging - node2: *golive

backend - prod - node1: *golive   
backend - prod - node2: *golive

 

4、测试

hotfix/hotfix-conference分支仅能发布dev和test环境

gitlab配置redis gitlab配置文件详解_docker

#master分支仅能发布staging和prod环境

gitlab配置redis gitlab配置文件详解_ci_02