.gitlab-ci.yml说明

本文介绍了Gitlab CI通过YAML文件管理job,重点讲解了pipeline、stages和jobs的概念。pipeline是完整构建任务,stages定义构建阶段,jobs则在阶段中执行具体工作。每个job具有独立的运行环境,并可通过配置参数定制行为。了解更多详情,请参阅Gitlab官方文档。
摘要由CSDN通过智能技术生成

Gitlab官方文档:https://docs.gitlab.com/ee/ci/yaml/README.html

Gitlab CI通过YAML文件管理配置job,该文件存放于仓库的根目录, 默认名为.gitlab-ci.yml,定义了job应该如何工作。


  • pipeline:

一个pipeline就是一次完整的构建任务,里面可以包含多个阶段(stages)。

  • stage:

stages表示任务构建的阶段。一次pipeline中允许定义多个stages,这些stages 会有以下特点:

1. 所有 stages 会按照顺序运行,即当一个 stage 完成后,下一个 stage 才会开始

2. 只有当所有 stages 完成后,该构建任务 (pipeline) 才会成功

3. 如果任何一个 stage 失败,那么后面的 stages 不会执行,该构建任务 (pipeline) 失败
  • job:

jobs表示构建工作,表示某个stage里面执行的工作。 我们可以在stages里面定义多个jobs,这些jobs会有以下特点:

1. 相同stage中的jobs会并行执行

2. 相同stage中的jobs都执行成功时,该stage才会成功

3. 如果任何一个job失败,那么该stage失败,即该构建任务 (pipeline) 失败

jobs的定义:

1. 定义了在什么条件下执行它们的条件

2. 具有任意名称的顶级元素,并且必须至少包含script

3. 不受定义数量的限制

示例:

job1:
  script: "execute-script-for-job1"

job2:
  script: "execute-script-for-job2"

上面包含两个单独的job,其中每个job执行不同的命令。

每个job都是独立运行的,可以直接执行命令./configure; make; make install或运行脚本sh test.sh。jobs由runners获取并在runners各自的环境中执行。

每个job必须有一个唯一的名称,但有几个保留的关键字不能用作job名称:

image

services

stages

types

before_script

after_script

variables

cache
  • 配置参数列表:

一个job被定义为一列参数,这些参数指定了job的行为。下表列出了可用的job参数:

是否必须描述
scriptyes由Runner执行的shell脚本或命令
imageno使用的docker镜像
servicesno使用的docker服务镜像
before_scriptno在作业之前执行的脚本或命令
after_scriptno在作业之后执行的脚本或命令
stagesno一个pipeline的各个阶段
stageno一个job阶段,默认是test
onlyno限制job什么时候执行
exceptno限制job什么时候不执行
rulesno指定条件列表去确定一个job的可选属性以及是否执行该job。不可与only/except一起使用
tagsno指定job适用的runner,tags为runner标签
allow_failureno允许job失败,如果失败将不会改变提交状态
whenno指定job什么时候执行,可以是on_successon_failurealwaysmanual
environmentno指定job部署的环境名称
cacheno在后续运行之间应该缓存的文件列表
artifactsno要附加到一个job上的文件和目录列表
dependenciesno通过提供要从中获取artifacts的job列表来限制将哪些artifacts传递给特定的job
coverageno设置一个给定job的代码覆盖率
retrynojob失败后的自动重试次数
timeoutno设置优先于项目范围的job超时时间
parallelno一个job并行运行的实例数量
triggerno定义下游pipeline的触发器
includeno允许该job包含外部YAML文件
extendsno一个job将继承的配置项
pagesno上传job的结果与GitLab Pages一起使用
variablesno在job级别上定义变量
interruptibleno定义一个job在因为新的运行而变得多余时是否可以取消
  • 设置默认参数:

可以使用default关键字将某些参数全局设置为所有job的默认值,特定于job的配置可以覆盖默认参数。

下面的job参数可以被设置为默认值:

image
services
before_script
after_script
cache

示例:

default:                #指定默认参数
  image: ruby:2.5

rspec:              #指定特定参数
  script: bundle exec rspec

rspec 2.6:
  image: ruby:2.6
  script: bundle exec rspec
  • .gitlab-ci.yml示例:
stages:
  - pull_code_test
  - pull_code_production
  - install_deps
  - test
  - build
  - deploy_test
  - deploy_production
  
variables:
  PHP_FPM_CONTAINER: lnmp-php-fpm
  WORK_DIR: /usr/share/nginx/html/
  PROJECT: laravel-demo
  GIT_DIR: /mnt/lnmp-docker
  
# 拉取代码
pull_code_test:
  stage: pull_code_test
  only:
    - develop
  script:
     - cd ${GIT_DIR}/${PROJECT}
     - git pull origin develop
     
pull_code_production:
  stage: pull_code_production
  only:
    - master
  script:
    - cd ${GIT_DIR}/${PROJECT}
    - git pull origin master
    
# 安装依赖
install_deps:
  stage: install_deps
  script:
    - docker exec -w ${WORK_DIR}/${PROJECT} ${PHP_FPM_CONTAINER} composer install
    
build:
  stage: build
  script:
    # Run migrations
    - docker exec -w ${WORK_DIR}/${PROJECT} ${PHP_FPM_CONTAINER} php artisan migrate
    # Cache clearing
    - docker exec -w ${WORK_DIR}/${PROJECT} ${PHP_FPM_CONTAINER} php artisan cache:clear
    # Create a cache file for faster configuration loading
    - docker exec -w ${WORK_DIR}/${PROJECT} ${PHP_FPM_CONTAINER} php artisan config:cache
    # Create a route cache file for faster route registration
    - docker exec -w ${WORK_DIR}/${PROJECT} ${PHP_FPM_CONTAINER} php artisan route:clear
    
deploy_test:
  stage: deploy_test
  script:
    - cd ${GIT_DIR}
    - docker-compose down && docker-compose build && docker-compose up -d
    
deploy_production:
  stage: deploy_production
  script:
    - cd ${GIT_DIR}
    - docker-compose restart

更多.gitlab-ci.yml的说明请参考官方文档。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值