参考:YAML语法教程
- .gitlab-ci.yml 这个文件是定义 CI/CD 所有流程,包括 stage,job。每一个项目都有自己的.gitlab-ci.yml 文件,一般存放在项目的根目录。如果不存放在根目录,则需要特殊配置一下 CI/CD 才能被 runner 调用。
- 最常用的对象有 stages、job、cache、script、image。
1、常用关键字解析:
- stages 定义阶段的执行顺序 ,值是一个数组
stages:
- install
- lint-code
- build
- deploy
- job 是pipeline的任务节点,它构成了pipeline的基本单元
主要包含: tags 、stage、script 几部分
install:
tags:
- test #指定runner
stage: install # 指定哪个阶段
script:
- npm install # 执行的shell脚本
2、job 配置参数
script 被 runner 执行的 shell script
after_script 在 job 之后执行的脚本
allow_failure 是否允许 job 失败
artifacts 在 job 成功后将一个文件列表或目录列表制成制品上传
before_script 在 job 之前执行的脚本
cache 缓存在随后的 job 的一些文件、目录
coverage 代码覆盖率设置
dependencies 依赖某个 job 的制品并下载到当前的 job 中
environment job 依赖的环境变量
except 限制那些情况 job 不会被触发
extends job 的继承的配置项
image 依赖的 Docker 镜像
include 运行 job 包含额外的 yml 文件
interruptible 定义当作业因较新的运行而变得冗余时是否可以取消。
only 限制 job 何时可以被触发
pages 上传 job 的结果到 GitLab Pages
parallel 一个 job 应该并行运行多少个实例。
release 通知 runner 生成一个 release
resource_group 限制 job 的并发性
retry 是否重试 重试几次
rules 与 only/except 类似,限制 job 的调起
services 使用 Docker 镜像服务
stage 阶段
tags 选择 runner 的 tag
timeout 超时
trigger 定义下游 pipelines 触发器
variables 定义 job 级别的变量
when 何时触发任务
image: node:alpine
stages:
- install
- lint-code
- build
- deploy
cache:
key: cicdDemo
paths:
- node_modules
- dist
job_install:
stage: install
tags:
- test
script:
- npm install
timeout: 3m
job_lint_code:
stage: lint-code
tags:
- test
script:
- npm run eslint
allow_failure: true #报错可以跳过。继续执行下游
job_build:
stage: build
tags:
- test
script:
- export # 输出预定义环境变量
- npm run build
artifacts:
paths:
- dist
job_deploy_dev:
stage: deploy
image: docker
tags:
- test
script:
- docker build -t testimagedev .
- if [ $(docker ps -aq --filter name=mycicd-container) ]; then docker rm -f mycicd-container;fi
- docker run -d -p 8092:80 --name mycicd-container testimagedev
environment:
name: silvaDev
url: http://1.116.55.82:8092
only:
- dev
when: manual
job_deploy_main:
stage: deploy
image: docker
tags:
- test
script:
- docker build -t testimageprod .
- if [ $(docker ps -aq --filter name=mycicd-containerprod) ]; then docker rm -f mycicd-containerprod;fi
- docker run -d -p 8082:80 --name mycicd-containerprod testimageprod
environment: #
name: silvaProd
url: http://1.116.55.82:8082
only:
- main
when: manual #手动操作
job_deploy_oss_dev:
stage: deploy
tags:
- test
script:
- wget http://gosspublic.alicdn.com/ossutil/1.6.18/ossutil64
- chmod 755 ossutil64 #更改文件权限 rwxr-xr-x公共用户有读取、执行的权限
- ./ossutil64 config -e ${endPoint} -i ${accessKeyID} -k ${accessKeySecret} -L CH --loglevel debug -c ~/.ossutilconfig
- ./ossutil64 -c ~/.ossutilconfig cp -r -f dist/ oss://hkcicd/
only:
- dev
when: manual
job_deploy_oss_prod:
stage: deploy
tags:
- test
script:
- wget http://gosspublic.alicdn.com/ossutil/1.6.18/ossutil64
- chmod 755 ossutil64
- ./ossutil64 config -e ${endPoint} -i ${accessKeyID} -k ${accessKeySecret} -L CH --loglevel debug -c ~/.ossutilconfig
- ./ossutil64 -c ~/.ossutilconfig cp -r -f dist/ oss://hkcicdprod/
only:
- main
when: manual
注:
- chmod 755的权限就是:rwxr-xr-x。第一位7等于4+2+1,所以就是rwx,所有者有读取、写入、执行的权限;第二位5也是4+0+1,r-x,同组用户具有读取、执行权限;第三位5,代表公共用户有读取、执行的权限。
- wegt 参考: www.gnu.org/software/wg…