docker部署gitlab CI/CD (二)终篇:部署gitlab runner和添加gitlab-ci.yml文件 终极踩坑版
关于gitlab部署的教程还好,有的看,但到了cicd环节,简直痛苦面具,教程虽多,但断断续续,先不说大部分都是只截取片段,让人云里雾里,不会的看不懂,懂的不需要看,根据步骤跑不起来不说,改了一堆,完全不解释为什么,也分不清是官方要求还是作者自己夹带的私货。痛定思痛,抛弃任何教程,根据报错实时改进,于2023年4月24日完成此篇。
官方文档:
https://docs.gitlab.com/runner/install/docker.html
前提:
已部署gitlab,可参阅 docker部署gitlab CI/CD (一)第一篇:部署gitlab及汉化,内附官方文档链接
开始:
#1.拉取并启动runner
docker run -d --name runner --network=host --restart always -v /srv/gitlab-runner/config:/etc/gitlab-runner -v /var/run/docker.sock:/var/run/docker.sock gitlab/gitlab-runner:latest
官网没有--network=host这句话,正常情况不需要加。但是我在公司实际测试中,在后面的过程会说请求不到gitlab,加上这句话就好了
注意,挂载目录不能改,不然到最后会报错,找不到docker的守护进程:Preparation failed: Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?

#2.进入容器内部
docker exec -it 容器id /bin/bash
#3.runner注册
gitlab-runner register

如下图,打开你的项目设置,把URL和token都复制进入

如下图,自己填,tag需要记一下,后续的ci文件里要用到。
镜像由于注册的时候还不懂,随便填了一个,应该填你的项目依赖的环境镜像,mcr.microsoft.com/dotnet/sdk:6.0,随便填也无所谓,yml文件里可以指定

如下图,刷新你的设置页面,会显示已经有了

#4.docker部署的必要环节:修改runner的config文件
默认他会每次拉取hub里的镜像,我想改成使用本地镜像,可以用vi命令,也可以自己用其他方法改
vi /srv/gitlab-runner/config/config.toml
有就改,没有就结尾加上 pull_policy = "if-not-present"
由于runner默认不识别docker命令,所以 volumes加上 "/usr/bin/docker:/usr/bin/docker", "/var/run/docker.sock:/var/run/docker.sock"
官方配置说明:https://docs.gitlab.com/runner/configuration/advanced-configuration.html
改完就生效,不用重启

#5.添加.gitlab-ci.yml文件
在项目根目录创建.gitlab-ci.yml文件,官方各语言项目模板参考:https://gitlab.com/gitlab-org/gitlab/-/tree/master/lib/gitlab/ci/templates
以下附上net6项目的简略文件
image: mcr.microsoft.com/dotnet/sdk:6.0 variables:
VERSION: "$CI_PIPELINE_ID" stages:
- deploy deploy:
stage: deploy
script:
- echo "开始构建镜像:webapi:${VERSION}"
- docker build -t webapi:${VERSION} -f ./webapi/Dockerfile .
- if [ $(docker ps -aq --filter name=webapi) ]; then
echo "暂停旧版容器";
docker stop webapi;
echo "删除旧版容器";
docker rm webapi;
fi
- echo "启动新容器"
- docker run -d --name webapi -p 5566:5566 -p 5567:5567 webapi:${VERSION}
only:
- production
tags:
- dotnet
解释:
image:mcr.microsoft.com/dotnet/sdk:6.0。依赖net6环境
stages: 定义了多个构建阶段,部署(deploy)阶段。这些阶段将按照定义的顺序依次执行。
$CI_PIPELINE_ID:内置变量,取当前流水线id为版本号
if,如果存在名为webapi的容器,就暂停并删除容器
only: -production 只有production分支的改动才启动deploy阶段
tages: 用于为任务指定标签,让标签为dotnet的runner执行。
#6.把环境拉取到本地
因为前文把runner改为了使用本地镜像,所以需要先把net6sdk拉取到本地
docker pull mcr.microsoft.com/dotnet/sdk:6.0
#7.项目提交改动到gitlab
个人建议先拿前端项目练手,因为后端项目依赖比较复杂,坑比较多,我这还涉及依赖私有nuget包等问题,带来的挫折感,陆陆续续搞了两周才完事。
提交改动,然后打开项目的CI/CD流水线,等一等就会发现已经通过

查看控制台,也可以看到,任务执行成功,build成功,且把我docker里的旧容器删了,重新拿新镜像run了一个新的

结束
docker部署gitlab CI/CD (二)终篇:部署gitlab runner和添加gitlab-ci.yml文件 终极踩坑版的更多相关文章
- CI/CD持续集成/持续部署 敏捷开发
敏捷软件开发(英语:Agile software development),又称敏捷开发,是一种从1990年代开始逐渐引起广泛关注的一些新型软件开发方法,是一种应对快速变化的需求的一种软件开发能力.它 ...
- Azure DevOps+Docker+Asp.NET Core 实现CI/CD(二.创建CI持续集成管道)
前言 本文主要是讲解如何使用Azure DevOps+Docker 来实现持续集成Asp.NET Core项目(当然 也可以是任意项目). 上一篇: Azure DevOps+Docker+Asp.N ...
- 使用Gitlab CI/CD功能在本地部署 Spring Boot 项目
前提条件: 1.Docker安装Gitlab,地址:https://www.cnblogs.com/sanduzxcvbnm/p/13814730.html 2.Docker安装Gitlab-runn ...
- GitLab私有化部署 - CI/CD - 持续集成/交付/部署 - 源代码托管 & 自动化部署
预期目标 源代码管理 借助GitLab实现源代码托管,私有化部署版本,创建项目,创建用户组,分配权限,项目的签入/牵出等. 自动化部署 源代码产生变更时(如签入),自动化编译并发布到指定服务器中部署, ...
- WTM框架使用技巧之:CI/CD(持续集成/持续部署)
1. 什么是WTM框架? 一个快速.灵活.社区活跃.最最最最高效的.netcore 后台管理系统.详见 https://wtmdoc.walkingtec.cn/ 欢迎大家付费支持WTMPlus,反哺 ...
- 前端初探 Gitlab CI/CD
前言 纵观人类历史的发展以及三次工业革命,你会发现利用机器来替代部分人力劳动,将重复的工作自动化从而解放生产力都是发展的必然趋势,在软件工程领域也不例外,其中 CI/CD 就是其中一项,那么什么是 C ...
- Gitlab CI/CD
Gitlab CI/CD 前言 纵观人类历史的发展以及三次工业革命,你会发现利用机器来替代部分人力劳动,将重复的工作自动化从而解放生产力都是发展的必然趋势,在软件工程领域也不例外,其中 CI/CD 就 ...
- 使用Docker方式部署Gitlab,Gitlab-Runner并使用Gitlab提供的CI/CD功能自动化构建SpringBoot项目
1.Docker安装Gitlab,地址:https://www.cnblogs.com/sanduzxcvbnm/p/13814730.html 2.Docker安装Gitlab-runner,地址: ...
- Gitlab CI 集成 Kubernetes 集群部署 Spring Boot 项目
在上一篇博客中,我们成功将 Gitlab CI 部署到了 Docker 中去,成功创建了 Gitlab CI Pipline 来执行 CI/CD 任务.那么这篇文章我们更进一步,将它集成到 K8s 集 ...
- GitLab CI/CD的官译【原】
CI / CD方法简介 软件开发的持续集成基于自动执行脚本,以最大限度地减少在开发应用程序时引入错误的可能性.从新代码的开发到部署,它们需要较少的人为干预甚至根本不需要干预. 它涉及在每次小迭代中不断 ...
随机推荐
- 一招教你 Notion 文章导出到公众号
Notion是一个功能强大的笔记应用程序,有许多优点,包括: 用户友好的界面 跨平台支持 可以结构化组织笔记 多人协作 可以添加多种类型的媒体文件 可以添加评论和任务 这些优点使Notion成为一个广 ...
- JVM 频繁 FULL GC 快速排查整理
在分享此案例前,先聊聊哪些场景会导致频繁Full GC: 内存泄漏(代码有问题,对象引用没及时释放,导致对象不能及时回收)死循环大对象程序执行了System.gc() 尤其是大对象,80%以上的情况就 ...
- ZGC 最新一代垃圾回收器[NO]
ZGC(The Z Garbage Collector)是JDK 11中推出的一款低延迟垃圾回收器,ZGC可以说源自于 Azul System 公司开发的C4收集器[基本不用调优]它的设计目标包括: ...
- Xenomai 源码分析-Part I
Xenomai Edition v3.0.5 xenomai_init() static int __init xenomai_init(void) 源码分析 setup_init_state // ...
- uniapp H5图片编辑器(安卓/iOS适用)
箭头绘制参考了:https://blog.csdn.net/qq_45939676/article/details/127425426 这位大佬的文章 gitee地址: https://gitee.c ...
- 第一次博客:PTA题目集1-3总结
第一次博客:PTA题目集1-3总结 前言:JAVA是一门非常好的语言,因其面向对象的思想,在解决问题时思路与上学期学习的C语言截然不同,但是其优势也是显然易见的,特别是在写大型程序时其面向对象的思想, ...
- tidyr包几个函数的用法
在R语言中,tidyr主要提供了一个类似Excel中数据透视表 (pivottable)的功能; gather和spread函数将数据在长格式和宽格式之间相互转化,应用在比如稀疏矩阵和稠密矩阵之间的转 ...
- pandas之concat链接操作
Pandas 通过 concat() 函数能够轻松地将 Series 与 DataFrame 对象组合在一起,函数的语法格式如下: pd.concat(objs,axis=0,join='outer' ...
- AI人工智能简史
AI人工智能简史 最近学习AI,顺便整理了一份AI人工智能简史,大家参考: 1951年 第一台神经网络机,称为SNARC: 1956年 达特茅斯学院会议,正式确立了人工智能的研究领域: 1966年 M ...
- css 利用 linear-gradient 实现条纹背景
1. 水平条纹背景 当给背景设置渐变效果时,默认的渐变方向是垂直由上到下的,效果如下: { background: linear-gradient(#aaa, #ddd); } 尝试拉近色标的距离,会 ...