当前位置: 首页 > news >正文

一种DevOpts的实现方式:基于gitlab的CICD(二)

写在之前

前文已经搭建了基于gitlab的cicd环境,现在我们来更近一步,结合官网给出的案例来详细介绍如何一步一步实现CI的过程。

基于gitlab搭建一个前端静态页面

环境依赖: gitlab+gitlab runner(docker版本) 环境达吉安完毕
本地已经有nodejs和npm的基础环境(建议安装最新的nodejs版本)

步骤一:在UI界面上创建一个基础的项目
在这里插入图片描述

步骤二:在本地clone项目地址

git clone http://xxxx:8000/cicddemo/cicd.git

步骤三:利用npm生成前端项目
在本地的项目目录下执行以下命令,命令会需要显示填写的具体配置信息,我们全部选择默认选项即可。

npm init docusaurus

步骤三:将上一步生成的静态页面文件放到根目录下

在这里插入图片描述
步骤四:修改配置文件
修改文件docusaurus.config.js,将url配置成自己的gitlab地址,将baseUrl配置成项目路径。

步骤五:推送本地文件到远程git仓库

git add .
git commit -m "Add simple generated Docusaurus site"
git push origin

步骤六:创建CICD配置文件

cicd文件的语法

stages:          # List of stages for jobs and their order of execution- build- deploybuild-job:stage: build   # Set this job to run in the `build` stageimage: node:21script:- npm install- npm run buildartifacts:paths:- "build/"pages:stage: deploy  # Set this new job to run in the `deploy` stagescript:- mv build/ public/artifacts:paths:- "public/"

还记得我们之前是怎么查看cicd的每个阶段的日志记录的吗?我们观察到每一个第一个stage正在运行。趁着docker在构建容器,我们首先读懂这个cicd的yaml的具体语义是什么:

  • stages:最常见的配置文件将作业分为多个阶段。同一阶段的作业可以并行运行,而后面阶段的作业则等待前面阶段的作业完成。如果作业失败,则认为整个阶段失败,后面阶段的作业不会开始运行。这里共分两个执行阶段:build和deploy
  • build:build阶段是在node容器内运行了一段脚本。并将生成的文件放到目录build/下
  • deploy:是将上一步骤生成的文件切换了路径
npm install
npm run build

在这里插入图片描述
我们观察一下runner所在的机器上发生了什么变化,我们来回顾一下如何使用docker容器的方式安装gitlab-runner,这里将docker.sock挂载进入了runner所在的容器。

docker run -d --name gitlab-runner --restart always \-v /var/run/docker.sock:/var/run/docker.sock \-v gitlab-runner-config:/etc/gitlab-runner \gitlab/gitlab-runner:latest

/var/run/docker.sock 是 Docker 的 Unix 套接字文件,用于与 Docker
守护进程进行通信。Docker 守护进程负责管理和运行容器化应用程序。
Unix 套接字文件是一种特殊类型的文件,用于进程间的通信。在 Docker 中,/var/run/docker.sock 文件用于Docker 客户端(如 Docker CLI)与 Docker 守护进程之间的通信。当您在命令行中运行 Docker 命令时,Docker 客户端会与 Docker 守护进程进行通信来执行相应的操作。通常情况下,Docker
客户端通过网络接口与 Docker 守护进程通信,但是当 Docker 客户端连接到 /var/run/docker.sock文件时,通信会通过 Unix 套接字进行。通过 Docker 命令行界面或使用 Docker API,您可以使用 /var/run/docker.sock 文件与 Docker守护进程进行交互,例如创建、启动、停止和删除容器,构建和推送镜像,查看日志等等。这种本地通信的方式对于管理和监控 Docker容器非常有用。

gitlab-runner应在是在这一步通过与docker的守护进程通信,从而调用容器创建接口,使得每一个阶段都可以在不同的容器中执行。

在这里插入图片描述
我们进到容器内,发现这个额外的容器内运行的是scripts的指令

在这里插入图片描述
容器内已经clone了git仓库的文件
在这里插入图片描述
注意:这里有npm install卡住报错的解决方案
npm WARN tarball tarball data for xxxx@^0.25… npm项目依赖安装卡住
当两个阶段执行完毕后,可以下载打包完毕完成的静态web界面
在这里插入图片描述

写在之后

本文仅介绍了gitlab的CI过程,至于如何基于上述生成的静态页面在不同节点上部署,答主给出一种最简单的实现步骤:利用ssh登录到一个发布节点,将上文中的public共享静态页面拷贝过去。由于答主不是前端出身,所以不太清楚这个静态页面如何暴露给用户查看,所以暂时没有实现cd的步骤,留一个坑在这里,后续有空补充上吧。

相关文章:

  • ROS OpenCV 图像基本处理函数
  • kylin集群使用nginx反向代理
  • 快速预览图片类PDF报告,PDF转文字并统计词频
  • ORB SLAM2 编译
  • Tampermonkey油猴插件-各大网盘批量分享,解放双手-下
  • 大模型训练营Day3 基于 InternLM 和 LangChain 搭建你的知识库
  • Unity 鼠标点击或触摸任意拖动UGUI的方法
  • 生活自来水厂污水处理设备需要哪些
  • qt-C++笔记之QProcess
  • C++(9)——内存管理
  • androj studio安装及运行源码
  • 人工智能:未来智慧城市建设的“智慧大脑”与核心价值
  • 【DotNetGuide】C#/.NET/.NET Core学习、工作、面试指南
  • 2023年全国职业院校技能大赛(高职组)“云计算应用”赛项赛卷⑧
  • redis缓存雪崩、穿透和击穿
  • Facebook AccountKit 接入的坑点
  • input的行数自动增减
  • iOS筛选菜单、分段选择器、导航栏、悬浮窗、转场动画、启动视频等源码
  • Java 23种设计模式 之单例模式 7种实现方式
  • JavaScript异步流程控制的前世今生
  • supervisor 永不挂掉的进程 安装以及使用
  • ubuntu 下nginx安装 并支持https协议
  • vue2.0一起在懵逼的海洋里越陷越深(四)
  • vue数据传递--我有特殊的实现技巧
  • 阿里云前端周刊 - 第 26 期
  • 不发不行!Netty集成文字图片聊天室外加TCP/IP软硬件通信
  • 从@property说起(二)当我们写下@property (nonatomic, weak) id obj时,我们究竟写了什么...
  • 服务器之间,相同帐号,实现免密钥登录
  • 记录:CentOS7.2配置LNMP环境记录
  • 今年的LC3大会没了?
  • 用简单代码看卷积组块发展
  • Java数据解析之JSON
  • PostgreSQL 快速给指定表每个字段创建索引 - 1
  • Unity3D - 异步加载游戏场景与异步加载游戏资源进度条 ...
  • ​【已解决】npm install​卡主不动的情况
  • #if 1...#endif
  • #宝哥教你#查看jquery绑定的事件函数
  • (arch)linux 转换文件编码格式
  • (html5)在移动端input输入搜索项后 输入法下面为什么不想百度那样出现前往? 而我的出现的是换行...
  • (论文阅读32/100)Flowing convnets for human pose estimation in videos
  • (排序详解之 堆排序)
  • (转载)Linux 多线程条件变量同步
  • .net core使用RPC方式进行高效的HTTP服务访问
  • .net 使用ajax控件后如何调用前端脚本
  • .net6 webapi log4net完整配置使用流程
  • .NetCore 如何动态路由
  • .NetCore实践篇:分布式监控Zipkin持久化之殇
  • .NET关于 跳过SSL中遇到的问题
  • .Net环境下的缓存技术介绍
  • .net开发时的诡异问题,button的onclick事件无效
  • ??myeclipse+tomcat
  • [2018][note]用于超快偏振开关和动态光束分裂的all-optical有源THz超表——
  • [Android]How to use FFmpeg to decode Android f...
  • [C# 开发技巧]如何使不符合要求的元素等于离它最近的一个元素
  • [C++11 多线程同步] --- 条件变量的那些坑【条件变量信号丢失和条件变量虚假唤醒(spurious wakeup)】