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方法简介 软件开发的持续集成基于自动执行脚本,以最大限度地减少在开发应用程序时引入错误的可能性.从新代码的开发到部署,它们需要较少的人为干预甚至根本不需要干预. 它涉及在每次小迭代中不断 ...
随机推荐
- 2PC(两阶段提交)【XA 与 Seata方案】
更多内容,前往 IT-BLOG 一.概述 2PC(two phase commit protocol,2PC)即两阶段提交协议,是将整个事务流程分为两个阶段,准备阶段(Prepare phase).提 ...
- 解放生产力:30+实用AI工具汇总
除了ChatGPT,还有哪些好用AI工具?带着这个问题,也为了解AIGC已经在哪些场景落地,我体验了30多个AI工具并且分享出来,希望对你有帮助. 文字 ChatGPT -- 解决任何问题地址:htt ...
- vue中使用vue.extend在dom挂载vue实例
const CounterComponent = Vue.extend(Counter); this.vm = new CounterComponent({}).$mount('#container' ...
- python模拟鼠标键盘操作
前言 1 懒人,工作中可以模拟真人操作,不用自己点击 2游戏人员 这是做模拟外挂的必备知识,不管手机还是电脑游戏,尤其副本 准备模块 代码如下: 实现了一个最简单的输入密码,enter进入的登录过程 ...
- [网络]内网IP的判别与分类
1 内网IP划分 内网IP地址分为A类.B类和C类,其地址范围如下: A类地址: 10.0.0.0 - 10.255.255.255 B类地址: 172.16.0.0 - 172.31.255.255 ...
- Redis 源码解析之通用双向链表(adlist)
Redis 源码解析之通用双向链表(adlist) 概述 Redis源码中广泛使用 adlist(A generic doubly linked list),作为一种通用的双向链表,用于简单的数据集合 ...
- Go 语言切片是如何扩容的?
原文链接: Go 语言切片是如何扩容的? 在 Go 语言中,有一个很常用的数据结构,那就是切片(Slice). 切片是一个拥有相同类型元素的可变长度的序列,它是基于数组类型做的一层封装.它非常灵活,支 ...
- 【Java SE】多线程
1.1 线程的生命周期  方法名 说明 yield() stop() sleep() w ...
- Tmux 使用教程
本文转载自阮一峰老师的博客文章<Tmux 使用教程>,感谢阮老师! Tmux 是一个终端复用器(terminal multiplexer),非常有用,属于常用的开发工具. 本文介绍如何使用 ...
- css中文字与图片对齐
css中文字与图片对齐 第一种,使用vertical-align:middle .icon{ background-repeat:no-repeat; background-position:cent ...