4、.gitlab-ci.yml 文件

523 阅读2分钟

参考: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脚本

image.png

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…