关于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文件 终极踩坑版的更多相关文章

  1. CI/CD持续集成/持续部署 敏捷开发

    敏捷软件开发(英语:Agile software development),又称敏捷开发,是一种从1990年代开始逐渐引起广泛关注的一些新型软件开发方法,是一种应对快速变化的需求的一种软件开发能力.它 ...

  2. Azure DevOps+Docker+Asp.NET Core 实现CI/CD(二.创建CI持续集成管道)

    前言 本文主要是讲解如何使用Azure DevOps+Docker 来实现持续集成Asp.NET Core项目(当然 也可以是任意项目). 上一篇: Azure DevOps+Docker+Asp.N ...

  3. 使用Gitlab CI/CD功能在本地部署 Spring Boot 项目

    前提条件: 1.Docker安装Gitlab,地址:https://www.cnblogs.com/sanduzxcvbnm/p/13814730.html 2.Docker安装Gitlab-runn ...

  4. GitLab私有化部署 - CI/CD - 持续集成/交付/部署 - 源代码托管 & 自动化部署

    预期目标 源代码管理 借助GitLab实现源代码托管,私有化部署版本,创建项目,创建用户组,分配权限,项目的签入/牵出等. 自动化部署 源代码产生变更时(如签入),自动化编译并发布到指定服务器中部署, ...

  5. WTM框架使用技巧之:CI/CD(持续集成/持续部署)

    1. 什么是WTM框架? 一个快速.灵活.社区活跃.最最最最高效的.netcore 后台管理系统.详见 https://wtmdoc.walkingtec.cn/ 欢迎大家付费支持WTMPlus,反哺 ...

  6. 前端初探 Gitlab CI/CD

    前言 纵观人类历史的发展以及三次工业革命,你会发现利用机器来替代部分人力劳动,将重复的工作自动化从而解放生产力都是发展的必然趋势,在软件工程领域也不例外,其中 CI/CD 就是其中一项,那么什么是 C ...

  7. Gitlab CI/CD

    Gitlab CI/CD 前言 纵观人类历史的发展以及三次工业革命,你会发现利用机器来替代部分人力劳动,将重复的工作自动化从而解放生产力都是发展的必然趋势,在软件工程领域也不例外,其中 CI/CD 就 ...

  8. 使用Docker方式部署Gitlab,Gitlab-Runner并使用Gitlab提供的CI/CD功能自动化构建SpringBoot项目

    1.Docker安装Gitlab,地址:https://www.cnblogs.com/sanduzxcvbnm/p/13814730.html 2.Docker安装Gitlab-runner,地址: ...

  9. Gitlab CI 集成 Kubernetes 集群部署 Spring Boot 项目

    在上一篇博客中,我们成功将 Gitlab CI 部署到了 Docker 中去,成功创建了 Gitlab CI Pipline 来执行 CI/CD 任务.那么这篇文章我们更进一步,将它集成到 K8s 集 ...

  10. GitLab CI/CD的官译【原】

    CI / CD方法简介 软件开发的持续集成基于自动执行脚本,以最大限度地减少在开发应用程序时引入错误的可能性.从新代码的开发到部署,它们需要较少的人为干预甚至根本不需要干预. 它涉及在每次小迭代中不断 ...

随机推荐

  1. MySQL学习(一)大纲

    1.逻辑架构 参考博客:https://blog.csdn.net/fuzhongmin05/article/details/70904190 最上层为客户端层,并非mysql独有,诸如:连接处理.授 ...

  2. RTC月度小报6月丨编程挑战赛圆满收官;声网上市1周年回顾...

    本月亮点速览 产品与技术: 声网Agora 实时音视频服务正式上线 HTC VIVE Sync App,支持非 VR 用户 「灵动课堂」发布 1.1.2 版本 「互动直播」6 月共发布两个版,最新版本 ...

  3. 最简单的for循环语句

    前言 在前面的文章中,壹哥给大家讲解了顺序结构.分支结构,接下来我们就来学习Java里的循环结构.Java里的循环结构,可以通过while.do-while.for.foreach等方式进行实现,今天 ...

  4. Redis 性能优化

    一.Linux 操作系统 [1]ulimit 与 TCP backlog:1).修改 ulimit:通过 ulimit 修改 open files 参数,redis 建议把 open files 至少 ...

  5. Charlotte Holmes series

    Charlotte Holmes Novel The charactors are adorable. Jamie and Charlotte are a very cute couple. More ...

  6. 自编写二进制安装kubernetes脚本v2.0版本

    一键安装 二进制安装Kubernetes(k8s) v2.0 手动安装:https://github.com/cby-chen/Kubernetes 脚本安装:https://github.com/c ...

  7. Python简易学生管理系统

    目录结构: 1. 学生文件 student.py # 学生类 class Student(object): # 存放学生信息 student_info = {} # 学生初始化方法 def __ini ...

  8. arc076f F - Exhausted?

    ARC076 F - Exhausted? [题目大意] \(有m个座位,分别位于坐标为1,2,3,...,m的地方:n个客人,第i位客人只坐位于[0,li]∪[ri,m]的座位.每个座位只能坐一个人 ...

  9. 《花雕学AI》13:早出对策,积极应对ChatGPT带来的一系列风险和挑战

    ChatGPT是一款能和人类聊天的机器人,它可以学习和理解人类语言,也可以帮人们做一些工作,比如翻译.写文章.写代码等.ChatGPT很强大,让很多人感兴趣,也让很多人担心. 使用ChatGPT有一些 ...

  10. Python爬取pexels图片

    研究Python爬虫,网上很多爬取pexels图片的案例,我下载下来运行没有成功,总量有各种各样的问题. 作为菜鸟初学者,网上的各个案例代码对我还是有不少启发作用,我用搜索引擎+chatGPT逐步对代 ...