Gitlab-Runner基础教程
一、Intro
jenkins
和runner
,作为主流自动化运维工具来说,两者的大思路其实是一样的,就是将我们提交到代码仓库的代码拉到jenkins
或者runner
运行的机器里,然后执行一系列的命令(这里通常是指打包和发布的命令,当然你想执行什么样的命令都是可以自己定义的)
二、Runner安装注册
准备工作 在gitlab创建个人项目,注意查看如下信息,在注册runner的时候会用到(必须是项目的管理员才能看到)
gitlab-runner提供windows和linux版本的安装客户端,我这边使用docker
的方式安装举例
docker pull gitlab/gitlab-runner
为了演示流水线的效果,这边会将整个过程分成2个阶段编译
和发布
(中间可以根据自己的需要添加其他阶段,比如镜像打包上传到镜像仓库等)
注册对应的runner之前应该想清楚这个runner需要实现的目标是什么
编译
runner安装注册目标: 拉取对应项目的源码,编译项目,将编译后生成的文件保存到gitlab缓存中(这里可以想一下我们一般的在用CI自动化发布的时候是不是将编译阶段也放在
Dockerfile
里面,导致每次编译生成没有必要的镜像,其实这一步是不需要放在Dockerfile
里面的,因为生成的镜像对我们是没有作用的)。分析: 确定拉目标之后,就可以根据目标注册对应的runner了,想一下我们上面的步骤需要编译
netcore
项目,那么在这个runner里面必须有netcore sdk
的环境。实施:
# 创建配置文件目录
sudo mkdir -p runner/runnertest/builder # 运行runner
sudo docker run -d --name runnertest-builder --restart always \
> -v /home/yasewang/runner/runnertest/builder:/etc/gitlab-runner \
> -v /var/run/docker.sock:/var/run/docker.sock \
> gitlab/gitlab-runner:latest # 注册runner
sudo docker exec -it runnertest-builder gitlab-runner register # 配置runner
Please enter the gitlab-ci coordinator URL (e.g. https://gitlab.com/):
http://git.greedyint.com/ Please enter the gitlab-ci token for this runner:
_jooQZxyy6zCrs8HevDd Please enter the gitlab-ci description for this runner:
[653f2eda5bfa]: runnertest-builder Please enter the gitlab-ci tags for this runner (comma separated):
109-runnertest-builder Registering runner... succeeded runner=9x8kWsU1
Please enter the executor: docker-ssh, docker+machine, docker-ssh+machine, kubernetes, docker, parallels, shell, ssh, virtualbox:
docker Please enter the default Docker image (e.g. ruby:2.1):
microsoft/dotnet:latest #注意这里使用dotnet镜像,查看镜像https://hub.docker.com/
映射
/var/run/docker.sock
这个文件是为了让容器可以通过/var/run/docker.sock
与Docker守护进程
通信,管理其他Docker容器
-v /srv/gitlab-runner/config:/etc/gitlab-runner
是将runner的配置文件映射到宿主机/srv/gitlab-runner/config
方便调整和查看配置
按照上面的顺序操作下来,如果顺利的话就会在gitlab项目的ci里面看到这个runner已经上线
发布
runner安装注册目标: 将上一步生成的待发布文件打包成镜像,并运行容器。
分析: 确定拉目标之后,就可以根据目标注册对应的runner了,想一下我们上面的步骤需要生成
docker
镜像并运行容器,那么在这个runner里面必须能使用docker
命令。实施: 采用参数赋值的方式直接注册
# 创建配置文件目录
sudo mkdir -p runner/runnertest/deploy # 运行runner
sudo docker run -d --name runnertest-deploy --restart always \
> -v /home/yasewang/runner/runnertest/deploy:/etc/gitlab-runner \
> -v /var/run/docker.sock:/var/run/docker.sock \
> gitlab/gitlab-runner:latest # 注册runner
sudo docker exec -it runnertest-deploy gitlab-runner register # 配置runner
Please enter the gitlab-ci coordinator URL (e.g. https://gitlab.com/):
http://git.greedyint.com/ Please enter the gitlab-ci token for this runner:
_jooQZxyy6zCrs8HevDd Please enter the gitlab-ci description for this runner:
[653f2eda5bfa]: runnertest-deploy Please enter the gitlab-ci tags for this runner (comma separated):
109-runnertest-deploy Registering runner... succeeded runner=9x8kWsU1
Please enter the executor: docker-ssh, docker+machine, docker-ssh+machine, kubernetes, docker, parallels, shell, ssh, virtualbox:
docker Please enter the default Docker image (e.g. ruby:2.1):
docker:stable # 一定要指定,才能正常使用docker命令
三、CICD项目实战
新建webapi项目:
dotnet new webapi -n runnertest --no-https
添加镜像检测删除脚本(后续ci构建脚本会用到):
# check-dev.sh
if [ $(docker ps -a --format {{.Names}} | grep runnertest-dev) ]
then
docker rm -f runnertest-dev
docker rmi runnertest-dev
fi # check-master.sh
if [ $(docker ps -a --format {{.Names}} | grep runnertest-master) ]
then
docker rm -f runnertest-master
docker rmi runnertest-master
fi
添加
Dockerfile
文件FROM mcr.microsoft.com/dotnet/core/aspnet
WORKDIR /app
COPY out/ /app
ENTRYPOINT [ "dotnet", "/app/runnertest.dll" ]
gitlab-ci.yml
常用参数
- stages:
pipeline
的阶段列表。定义整个pipeline
的阶段 - stage:定义某个
job
的所在阶段。参考#1 - script:(唯一一个必须写的参数)
job
执行过程中的命令列表 - only/except:触发类型/限制
job
的创建条件。参考可用的选项 - tags:指定
runner
的tag
,只有拥有指定tag
的runner
才会接收到这个任务 - cache:缓存。可选部分目录或未被 git 追踪的文件进行缓存,参考
- environment:指定部署相关任务的环境,并非真实环境,是对要部署到某环境的任务的归类。方便在
gitlab
上聚合以便进行回滚和重新部署操作,参考 - artifacts:保留文档。在每次 job 之前
runner
会清除未被 git 跟踪的文件。为了让编译或其他操作后的产物可以留存到后续使用,添加该参数并设置保留的目录,保留时间等。被保留的文件将被上传到gitlab
以备后续使用。参考 - dependencies:任务依赖。指定
job
的前置job
。添加该参数后,可以获取到前置job
的artifacts
。注意如果前置 job 执行失败,导致没能生成artifacts
,则 job 也会直接失败。
yml阶段构建脚本(.gitlab-ci.yml)
stages:
- build
- deploy-dev
- deploy-master
# 构建
build-job:
stage: build
only:
- develop
- master
cache:
untracked: true
script:
- dotnet restore
- dotnet publish -o ./out -c Release
artifacts:
# 可以缓存在gitlab的流水线记录中,供直接下载
expire_in: 30 days
paths:
- out/
tags:
- 109-runnertest-builder
# 发布测试
deploy-dev-job:
stage: deploy-dev
only:
- develop
dependencies:
- build-job # 这里一定要依赖build-job,不然dockerfile里面的out目录无法使用
script:
- ls out/
- sh ./check-dev.sh
- docker build -t runnertest-dev .
# 这里可以添加将生成好的image上传到dockerhub或者docker本地仓库
### 如果生成的镜像需要统一上传到仓库管理,则后面的逻辑可以分离到另外一个runner去执行
# 这里可以添加从dockerhub或本地仓库拉取指定镜像
- docker run -d --name runnertest-dev -p 10001:80 runnertest-dev
tags:
- 109-runnertest-deploy
# 发布正式
deploy-master-job:
stage: deploy-master
only:
- master
dependencies:
- build-job # 这里一定要依赖build-job,不然dockerfile里面的out目录无法使用
script:
- ls out/
- sh ./check-master.sh
- docker build -t runnertest-master .
# 这里可以添加将生成好的image上传到dockerhub或者docker本地仓库
### 如果生成的镜像需要统一上传到仓库管理,则后面的逻辑可以分离到另外一个runner去执行
# 这里可以添加从dockerhub或本地仓库拉取指定镜像
- docker run -d --name runnertest-master -p 10000:80 runnertest-master
when: manual
tags:
- 109-runnertest-deploy
其他
做完上面的工作之后,将代码提交到gitlab的develop或者master分支就会自动触发构建任务了(第一次运行会比较慢,因为要拉取netcore
和docker
镜像,所以在没开始学习这个教程之前可以将几个镜像都准备好)。
各个阶段效果图如下:
- 构建
- 发布
服务器运行之后docker容器状态:
网页访问api效果图:
整个过程走下来会发现其实耗时的操作都是拉取镜像,这个情况只有第一次的时候才会出现,后续构建就不会有这个问题了。
Gitlab-Runner基础教程的更多相关文章
- 超详细Gitlab Runner环境配置中文教程
配置GitlabRunner环境 GitLab Runner 是一个开源项目, 它用来运行你定制的任务(jobs)并把结果返回给 GitLab. GitLab Runner 配合GitLab CI(G ...
- 基础架构之Gitlab Runner
基础架构之Gitlab Runner也是常用的基础设施,我们接着GitLab操作,具体使用GitlabRunner,如果不熟悉可以见官方详细介绍https://docs.gitlab.com/runn ...
- gitlab服务器搭建教程
gitlab服务器搭建教程 ----2016年终总结 三 参考https://bbs.gitlab.cc/topic/35/gitlab-ce-8-7-%E6%BA%90%E7%A0%81%E5%AE ...
- 用GitLab Runner自动部署GitBook并不难
相信很多程序员喜欢用 GitBook 来写电子书.教程或者博客,看了不少文章,貌似都缺少说明如何将 GitBook 部署到版本库,并自动在服务器上 build,然后将生成的静态网站部署到云服务器上. ...
- Java基础教程:IDEA单元测试
Java基础教程:IDEA单元测试 环境配置 使用idea IDE 进行单元测试,首先需要安装JUnit 插件. 安装JUnit插件步骤 File-->settings-->Plguins ...
- GitLab Runner
GitLab Runner是一个开源项目,用于运行你的作业(jobs)并将结果发送回GitLab.它与GitLab CI结合使用,GitLab CI是GitLab用于协调jobs的开源持续集成服务. ...
- Gitlab + Gitlab runner + Window powershell
需求说明 根据领导要求,要把python 项目移到Gitlab 进行管理,并利用Gitlab CI/CD 进行自动化测试,打包,部署.(听起来很简单吧) 比较头大,完全没有经验,python 也是刚上 ...
- matlab基础教程——根据Andrew Ng的machine learning整理
matlab基础教程--根据Andrew Ng的machine learning整理 基本运算 算数运算 逻辑运算 格式化输出 小数位全局修改 向量和矩阵运算 矩阵操作 申明一个矩阵或向量 快速建立一 ...
- <<Bootstrap基础教程>> 新书出手,有心栽花花不开,无心插柳柳成荫
并非闲的蛋疼,做技术也经常喜欢蛋疼,纠结于各种技术,各种需求变更,还有一个很苦恼的就是UI总是那么不尽人意.前不久自己开源了自己做了多年的仓储项目(开源地址:https://github.com/he ...
- Memcache教程 Memcache零基础教程
Memcache是什么 Memcache是danga.com的一个项目,来分担数据库的压力. 它可以应对任意多个连接,使用非阻塞的网络IO.由于它的工作机制是在内存中开辟一块空间,然后建立一个Hash ...
随机推荐
- modbus-RTU-crc16——c语言
为确保消息数据的完整性,除了验证消息CRC之外,建议实现检查串行端口(UART)成帧错误的代码.如果接收消息中的CRC与接收设备计算的CRC不匹配,则应忽略该消息.下面的C语言代码片段显示了如何使用逐 ...
- 【bzoj3083】遥远的国度(树链剖分+线段树)
题目描述 zcwwzdjn在追杀十分sb的zhx,而zhx逃入了一个遥远的国度.当zcwwzdjn准备进入遥远的国度继续追杀时,守护神RapiD阻拦了zcwwzdjn的去路,他需要zcwwzdjn完成 ...
- 初入SG-UAP
初入SG-UAP SpriderMan 关注 2019.06.19 14:10 字数 1130 阅读 10评论 0喜欢 0 初次接触SG-UAP,将自己的见解以文字形式记录下来,希望能对初入的伙伴们有 ...
- CSP-S 模拟53 题解
题解: T1 u: 一看到修改这么多,但询问其实只有一个不难想到差分,但是他这个形状可以说很不规则,于是我们想到分别维护竖着的和斜着的差分,然后最后合并即可. 考场上瞎调了一波系数莫名AC,其实是维护 ...
- [JSOI 2016] 最佳团体(树形背包+01分数规划)
4753: [Jsoi2016]最佳团体 Time Limit: 20 Sec Memory Limit: 512 MBSubmit: 2003 Solved: 790[Submit][Statu ...
- Pytest学习笔记(三) 在代码中运行pytest
前面介绍的是在cmd中执行pytest,平常我们一般都是通过编译器(如pycharm)来编写用例的,写完用例后,需要调试看看是否能运行,如果每次都切换到cmd中执行,太麻烦. 因此,这一节来说下怎么在 ...
- BZOJ1070: [SCOI2007]修车(最小费用最大流,思维)
Description 同一时刻有N位车主带着他们的爱车来到了汽车维修中心.维修中心共有M位技术人员,不同的技术人员对不同 的车进行维修所用的时间是不同的.现在需要安排这M位技术人员所维修的车及顺序, ...
- javascript操作表单
表单元素除了可以运用上述所有DOM相关操作外,为了简化,还有一系列自己的属性和方法. 表单除了支持鼠标,键盘,更改和html时间之外,还支持一些表单特有的事件,如focus,change,blur等等 ...
- Spring AOP潜入易懂的讲解
为什么会有面向切面编程(AOP),我们知道Java是一个面向对象(OOP)的语言,但它有一些弊端,比如当我们需要为多个不具有继承关系的对象引入一个公共行为,例如日志,权限验证,事务等功能时,只能在每个 ...
- redis 字符串数据(string)
Redis 字符串数据类型的相关命令用于管理 redis 字符串值,基本语法如下: 语法 redis 127.0.0.1:6379> COMMAND KEY_NAME 实例 redis 127. ...