Gitlab的CI/CD学习(二) —— .gitlab-ci.yml文件

简介

背景

目前市面上常用的自动化部署的工具比较常见的是Jenkins,但是使用过程中,总会遇到各种奇奇怪怪的错误,很难定位问题所在;今天我要介绍的gitlab中的CI/CD功能,个人觉得部署起来更加简单,有效,易排查,可视化界面也更加整洁~

.gitlab-ci.yml

在前面文章中我们知道了整个Gitlab的CI/CD流程,那我们就在这里介绍以下在流程中,起到工作式指令的配置文件.gitlab-ci.yml文件;

其核心作用是:将它放置于项目仓库的根目录,则仓库提交合并后,则会根据该配置文件进行一系列工作

案例

该配置文件为yaml文件,所以一定要注意空格层级。

# 定义 stages
stages:
  - package #打包
  - build #构建docker镜像
  - run #运行docker

variables:
  TAG: microservice #镜像名称

# job
# 打包
package:
  stage: package
  script:
    - mvn clean package -Dmaven.test.skip=true
    - cp ./target/*.jar /home/gitlab-runner/docker_project/microservice.jar
  only:
    - master

# 构建镜像
docker-build:
  stage: build
  script:
    - cd /home/gitlab-runner/docker_project
    - docker build -t $TAG .
  when: manual  #手动
  only:
    - master
docker-build-log:
  stage: build
  script:
    - echo "test"
  when: manual  #手动
  only:
    - master

# 运行容器
decker-run:
  stage: run
  script:
    - docker rm -f $TAG || true
    - docker run -d --name $TAG -p 1883:8080 $TAG
  when: manual #手动
  only:
    - master

相关配置参数介绍

其实配置文件中看似配置了很多参数,但其实核心就只有两个概念: stage 和 job;

stage

表示执行步骤;它和核心体现就是当代码提交后,需要执行多少步骤,如上例所示:

# 定义 stages
stages:
  - package #打包
  - build #构建docker镜像
  - run #运行docker

在这里插入图片描述
当我的Java代码提交后,将分为三步执行:

  1. package首先拉取代码打包成jar文件;
  2. 构建docker镜像
  3. 运行docker镜像

job

job表示每一步执行步骤的工作内容;

package:  // 1
  stage: package // 2
  script: // 3 
    - mvn clean package -Dmaven.test.skip=true
    - cp ./target/*.jar /home/gitlab-runner/docker_project/microservice.jar
  only: // 4
    - master

根据上例所示:

  1. 表示这个job的名称

  2. 表示该job属于哪一个stage;一个stage可以有多个job,例子中,我的构建步骤build中,是有两个job,分别是docker-build 和docker-build-log。而它在gitlab中的呈现方式如下图:
    Gitlab的CI/CD学习(二) —— .gitlab-ci.yml文件_第1张图片

  3. 表示该job所执行的命令,可执行所在服务器中的Runner具备权限的所有命令脚本;也可以在服务器中写好shell脚本,在这执行shell脚本也是可行的。

  4. 表示该job只会在master分支提交合并后才会出现在CI/CD的流水线中;这样可区分,每个分支对应的环境不同,执行的Runner不同,则执行的命令/脚本也不同。

gitlab-ci.yml参数列表

值 1 是否必须 描述
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失败后的自动重试次数

其他相关文章

  • Gitlab的CI/CD学习(一) —— 简介

  • Gitlab的CI/CD学习(二) —— .gitlab-ci.yml文件

  • Gitlab的CI/CD学习(三) —— gitlab-runner

你可能感兴趣的:(运维)