使用GitLab CI

前提条件是: runner 能够成功跑通

安装请点击

最终目标,快速,漂亮的.gitlab-ci.yml文件

基础概念

文档位置> clicked

语法太多,用什么看什么吧!!!

以下是常用概念

PipeLine

一次Pipeline 相当于一次构建任务,里面包含多个流程,如安装依赖、运行测试、编译、部署测试服务器,部署生产服务器等流程

任何提交或者Merge Request 的合并 都可以出发PipeLine

Stages

Stages 表示构建阶段,就是Pipeline 的流程。

可以在一次PipeLine 中定义多个Stages ,具有以下特点:

  1. 所有Stages 会按照顺序执行,即当一个Stage 完成后,下一个Stage 才会开始
  2. 只有当所有Stages 完成后,该构建任务Pipeline 才会成功
  3. 如果任何一个Stage 失败,那么后面的Stages不会执行,此构建任务失败

Jobs

表示构建工作,表示某个Stage 里面执行的工作。我们可以在Stages 里面定义多个Jobs

  1. 相同 Stage 中的 Jobs 会并行执行
  2. 相同 Stage 中的 Jobs 都执行成功时,该 Stage 才会成功
  3. 如果任何一个 Job 失败,那么该 Stage 失败,即该构建任务 (Pipeline) 失败

GitLab Runner

构建任务,是由 GitLab Runner 进行 推动。

GitLab CI 最大的作用 是管理各个项目的构建状态

.gitlab-ci.yml

在 gitlab 中 有例子,例如下

# This file is a template, and might need editing before it works on your project.
# Official docker image.
image: docker:latest

services:
  - docker:dind

build:
  stage: build
  before_script:
    - docker login -u "$CI_REGISTRY_USER" -p "CI_REGISTRY_PASSWORD" $CI_REGISTRY
  script:
    - docker build --pull -t "$CI_REGISTRY_IMAGE:CI_COMMIT_REF_SLUG" .
    - docker push "$CI_REGISTRY_IMAGE:CI_COMMIT_REF_SLUG"

自己测试的模板

stages:
  - deploy

docker-deploy:
  stage: deploy
  # 执行Job内容
  script:
    # 通过Dockerfile生成cicd-demo镜像
    - docker build -t test-demo .
    # 删除已经在运行的容器
    -  if [ $(docker ps -aq --filter name=test-demo) ]; then docker rm -f test-demo;fi
    # 通过镜像启动容器,并把本机8000端口映射到容器8000端口
    - docker run -d -p 10001:10001 --name=test-demo test-demo:latest
  after_script:
    - curl http://127.0.0.1:10001/
  tags:
    # 执行Job的服务器
    - test
  only:
    # 只有在master分支才会执行
    - master

使用的环境

centos 8

裸机安装 gitlab-runner

docker

成功截图:

python gitlab ci项目示例 gitlab ci pipeline_ci

常用关键字
  1. stages
  1. 默认有三个 : build,test,deploy
  1. types
  1. stages 的别名
  1. before_script
  1. 定义任何jobs 运行前都会执行的命令
  1. after_script
  1. 定义任何jobs 运行完后都会执行的命令
  1. variable && job.variables
  1. 定义环境变量,如果定义了 Job 级别的环境变量的话,该 Job 会优先使用 Job 级别的环境变量。
  1. cache && Job.cache
  1. 定义需要缓存的文件。每个 Job 开始的时候,Runner 都会删掉 .gitignore 里面的文件。如果有些文件 (如 node_modules/) 需要多个 Jobs 共用的话,我们只能让每个 Job 都先执行一遍 npm install
  2. 具体项目,具体分析
  1. job.script
  1. 定义job 要运行的命令,必填项
  1. job.stage
  1. 默认为test
  1. Job.artifacts
  1. 定义 Job 中生成的附件。当该 Job 运行成功后,生成的文件可以作为附件 (如生成的二进制文件) 保留下来,打包发送到 GitLab,之后我们可以在 GitLab 的项目页面下下载该附件。