使用GitLab CI
前提条件是: runner 能够成功跑通
安装请点击
最终目标,快速,漂亮的
.gitlab-ci.yml
文件
基础概念
文档位置> clicked
语法太多,用什么看什么吧!!!
以下是常用概念
PipeLine
一次Pipeline 相当于一次构建任务,里面包含多个流程,如安装依赖、运行测试、编译、部署测试服务器,部署生产服务器等流程
任何提交或者Merge Request 的合并 都可以出发PipeLine
Stages
Stages 表示构建阶段,就是Pipeline 的流程。
可以在一次PipeLine 中定义多个Stages ,具有以下特点:
- 所有Stages 会按照顺序执行,即当一个Stage 完成后,下一个Stage 才会开始
- 只有当所有Stages 完成后,该构建任务Pipeline 才会成功
- 如果任何一个Stage 失败,那么后面的Stages不会执行,此构建任务失败
Jobs
表示构建工作,表示某个Stage 里面执行的工作。我们可以在Stages 里面定义多个Jobs
- 相同 Stage 中的 Jobs 会并行执行
- 相同 Stage 中的 Jobs 都执行成功时,该 Stage 才会成功
- 如果任何一个 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
成功截图:
常用关键字
- stages
- 默认有三个 : build,test,deploy
- types
- stages 的别名
- before_script
- 定义任何jobs 运行前都会执行的命令
- after_script
- 定义任何jobs 运行完后都会执行的命令
- variable && job.variables
- 定义环境变量,如果定义了 Job 级别的环境变量的话,该 Job 会优先使用 Job 级别的环境变量。
- cache && Job.cache
- 定义需要缓存的文件。每个 Job 开始的时候,Runner 都会删掉
.gitignore
里面的文件。如果有些文件 (如node_modules/
) 需要多个 Jobs 共用的话,我们只能让每个 Job 都先执行一遍npm install
。 具体项目,具体分析
- job.script
- 定义job 要运行的命令,必填项
- job.stage
- 默认为test
- Job.artifacts
- 定义 Job 中生成的附件。当该 Job 运行成功后,生成的文件可以作为附件 (如生成的二进制文件) 保留下来,打包发送到 GitLab,之后我们可以在 GitLab 的项目页面下下载该附件。