日常--记一次gitlab Runner配置与CI/CD环境搭建流程

文章目录

  • 一、前言
  • 二、相关知识
    • 1.相关定义
      • 1.什么是 CI?
      • 2.什么是 CD?
    • 2.CI/CD 构建块与工具链
    • 3.为什么要使用 CI/CD?
  • 三、准备
  • 四、实现
    • 1.Runner安装与配置
      • 1.更新源
      • 2.安装Runner
      • 3.注册Runner
      • 4.启动Runner
      • 5.查看Runner信息
    • 2.CI/CD流程测试
      • 1.CI/CD构建环境搭建
    • 2.ssh权限问题解决
  • 五、总结


一、前言

本次详细使用图文的形式实现gitlab Runner配置与CI/CD环境搭建,网上搜了一些教程都是docker的,我们的架构比较简单,开发语言多是vue,所以本次使用shell实现CI流程。

二、相关知识

1.相关定义

持续集成(CI)与持续交付/部署(CD)合称为 CI/CD,是现代软件开发中 DevOps 实践的重要组成,旨在通过 构建—测试—部署 的自动化流水线,实现高效、稳定地发布代码。以下是系统性的介绍:
在这里插入图片描述

1.什么是 CI?

Continuous Integration(持续集成):开发者将代码频繁(理想情况每天多次)合并到共享主干,自动触发构建和测试流程,以便尽早发现集成问题,避免“集成地狱”

2.什么是 CD?

CD 有两种定义方式,依实施程度不同:

Continuous Delivery(持续交付):

构建完成且通过测试后,代码自动部署到预发布环境,但进入生产环境前还需人为审批

Continuous Deployment(持续部署):

每次构建并测试通过后,自动部署到生产环境,无需人工干预
CD 的典型流程包括从构建、打包到自动部署、监控反馈与回滚机制等,目标是实现代码随时可发布,并且发布快速稳定

2.CI/CD 构建块与工具链

版本控制系统:Git、SVN 等
CI 工具:Jenkins、Travis CI、CircleCI、GitLab CI、GitHub Actions
构建与测试工具:Maven、Gradle、pytest、JUnit、Selenium 等
部署工具与平台:Docker、Kubernetes、Ansible、Terraform、Argo CD等
监控与反馈:Prometheus、Grafana、日志分析、性能监控等

3.为什么要使用 CI/CD?

  1. 加快开发与发布速度:频繁小步提交,缩短迭代周期
  2. 提高软件质量:自动化测试确保每次提交的代码都是健壮的
  3. 减少发布风险 & 人为失误:自动部署与故障回滚机制降低人工操作风险
  4. 加强团队协作:透明流程与快速反馈提升开发—测试—运维间的协作效率

三、准备

  1. 服务器环境:Ubuntu20.04.3 X2台(一台用于配置Runner,另一台用于部署正式代码)
  2. gitlab:一个gitlab代码仓库

四、实现

1.Runner安装与配置

1.更新源

添加 GitLab Runner 的 APT 软件源,并导入其 GPG 密钥,为后续安装 GitLab Runner 做准备。

 curl -L https://packages.gitlab.com/install/repositories/runner/gitlab-ci-multi-runner/script.deb.sh | sudo bash

在这里插入图片描述

2.安装Runner

执行下面命令,在遇到红框中的询问对话时,输入y后按下回车

sudo apt-get install gitlab-runner

在这里插入图片描述

3.注册Runner

在终端输入下面的命令进入GitLab Runner注册交互对话

sudo gitlab-runner register

在这里插入图片描述
去gitlab的Runners settings页面查找相关配置:

url:http:/xxx.xxx/
注册token:xxxxxx

在这里插入图片描述
下面是具体的交互命令释义

Please enter the GitLab instance URL:
https://gitlab.com   ← 填写你项目所在的 GitLab 实例 URLPlease enter the registration token:
glrt-xxxxxxx         ← 填写注册 token(项目页面提供)Please enter a description for the runner:
[hostname]           ← 输入一个描述,如 ubuntu-runnerPlease enter tags for the runner (comma-separated):
docker,ubuntu        ← (可选)指定 tags,用于匹配 CI/CD jobWhether to run untagged builds [true/false]:
true                 ← 是否允许跑无 tag 的 JobWhether to lock the Runner to current project [true/false]:
false                ← 是否锁定 Runner 到当前项目Please enter the executor:
shell                ← 推荐用 docker 或 shell

值得一提的是,这里我们选择了shell作为环境,但是博主推荐docker,因为能实现环境的隔离。
在这里插入图片描述

Executor推荐程度说明
docker⭐⭐⭐⭐⭐最推荐。如果你的系统支持 Docker,Runner 会用容器执行每个 Job,干净、安全、易管理。
shell⭐⭐⭐最简单的方式,Runner 直接在宿主机的 shell 里执行。适合没有 Docker 的环境,但缺乏隔离性。
ssh⭐⭐通过 SSH 在远程服务器上执行 Job。用于部署时可能有用,但设置复杂。
docker+machine⭐⭐⭐动态创建 VM + Docker,用于大规模 CI/CD。配置复杂,适合企业级。
其他⭐ 或无kubernetes, parallels, virtualbox 等,特定场景下用,配置成本较高。

4.启动Runner

输入下面命令,启动Runner

sudo gitlab-runner start 

下面命令可以查看运行状态

sudo gitlab-runner status

在这里插入图片描述

查看当前已注册的 runners

sudo gitlab-runner list 

在这里插入图片描述

5.查看Runner信息

这时,我们已经可以在gitlab后台的Runner设置页面里看到已经启用的Runner了

在这里插入图片描述
下图为Runner的详细信息
在这里插入图片描述

2.CI/CD流程测试

1.CI/CD构建环境搭建

我们的测试项目是基于vue3.0、node.js18环境开发的,需要在Runner服务器上安装构建环境

安装 Node.js

curl -fsSL https://deb.nodesource.com/setup_18.x | sudo -E bash -

安装 npm

sudo apt install -y nodejs

在git项目中创建.gitlab-ci.yml

这段 GitLab CI/CD 配置定义了一个简单的两阶段流水线:build 和 deploy。在 build 阶段中,使用 Node.js 命令安装依赖并构建项目,构建产物(dist/ 目录)作为 artifact 保存 1 小时;在 deploy 阶段,依赖 build 阶段的输出,通过 SSH 将构建结果部署到远程服务器(包括建立 SSH 连接、复制文件、重启 Nginx),并在所有分支上触发部署流程。整个流程实现了从构建到自动部署的连续交付。

stages:- build- deploybuild:stage: buildscript:- npm install- npm run buildartifacts:paths:- dist/expire_in: 1 hourdeploy:stage: deploydependencies:- buildbefore_script:- which ssh || (echo "SSH not installed!" && exit 1)script:- echo "$SSH_PRIVATE_KEY" | tee /tmp/id_rsa > /dev/null- chmod 600 /tmp/id_rsa- ssh -o StrictHostKeyChecking=no -i /tmp/id_rsa $SSH_USER@$SSH_HOST "echo 'SSH connected successfully'"- scp -o StrictHostKeyChecking=no -i /tmp/id_rsa -r dist/ $SSH_USER@$SSH_HOST:/www/movie_tmp/- ssh -o StrictHostKeyChecking=no -i /tmp/id_rsa $SSH_USER@$SSH_HOST "sudo service nginx restart"- rm -f /tmp/id_rsaonly:- branches  # 任何分支都会触发部署

上面的配置需要我们在本地创建构建目录,并给予适当的权限,我们手动在服务器上执行下面👇🏻命令即可

sudo mkdir -p /var/lib/gitlab-runner
sudo chown gitlab-runner:gitlab-runner /var/lib/gitlab-runner

然后设置好变量
在这里插入图片描述

在git上触发一次代码提交操作
在这里插入图片描述
流水线job开始工作,自动实现构建、部署操作
在这里插入图片描述
建议自己亲自拉代码试一下

2.ssh权限问题解决

由于我们使用ssh连接到目标服务器,所以我们要保证Runner服务器与目标服务器之间通顺:
如果我们执行下面的命令,控制台打印了“OK”则无需下面额外的操作了

ssh -i /tmp/id_rsa root@xx.xx.xx.190 "echo OK"

在这里插入图片描述

否则 需要在runner服务器中查看对应的公钥内容

ssh-keygen -y -f /tmp/id_rsa

会打印下面的内容
在这里插入图片描述
然后去目标服务器 将上面的公钥配置到~root/.ssh/authorized_keys文件中,最后查看

cat ~root/.ssh/authorized_keys

在这里插入图片描述

五、总结

本次和大家分享了gitlab Runner配置与CI/CD环境搭建流程。

CI/CD 是自动化构建—测试—部署流程的集大成,在 DevOps 文化中扮演核心角色,不仅提升软件交付效率,而且显著增强质量与协作。具体实践中,通过工具链构建流水线,辅以策略与监控,最终实现稳定、可控、频繁的发布能力。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/diannao/90289.shtml
繁体地址,请注明出处:http://hk.pswp.cn/diannao/90289.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

东方仙盟AI数据中间件使用教程:开启数据交互与自动化应用新时代——仙盟创梦IDE

一、启动未来之窗AI 二、初始化数据接口三、便捷接口数据进入东方仙盟获取接口标准四、同步参数仙界界牌,冥界界牌,仙盟界牌 五、开始同步六、东方仙盟青云剑魂架构在当今数字化浪潮下,数据的采集、处理与传输成为众多应用场景的核心需求。而…

Rust 仿射类型(Affine Types)

在 Rust 中,仿射类型(Affine Types) 是所有权系统的理论基础,它规定了每个值有且仅有一次使用机会。这与线性类型(必须恰好使用一次)有所不同,允许值未被使用就被丢弃。Rust 中的仿射类型核心特…

python库 arrow 库的各种案例的使用详解(更人性化的日期时间处理)

文章目录 一、arrow概述1.1 arrow介绍1.2 安装 arrow1.3 注意事项二、基本使用2.1 创建 Arrow 对象2.2 格式化输出2.3 时间运算三、高级功能3.1 时区处理3.2 时间范围3.3 时间间隔四、实际应用案例4.1 日志时间处理4.2 会议时间提醒4.3 国际化时间显示5. Arrow 与 datetime 互操…

window 服务器上部署前端静态资源以及nginx 配置

最近搞了一台境外服务器 这种境外服务器是不可以配置域名的 但是可以使用ip访问 但是如果需要 配置 需要下载nginx nginx: download 我这个是windows 的 服务器 所以下载windows 的nginx 下载完成以后 这个里面的html 文件 就是前端项目 里面必须要有index.html文件 部署…

行业实践案例:医疗行业数据治理的挑战与突破

“医疗数据不仅是资源,更关乎生命。” ——医疗行业的数据治理,是合规、安全、质量与智能化的多重挑战。 📘 本文目录 为什么医疗行业亟需数据治理? 医疗行业数据治理的独特挑战 医疗数据治理体系设计原则 关键能力模块与实践案例 工具选型与落地建议 总结与下一步 1️⃣ …

单细胞转录组学和空间转录组学数据的整合方法

文章目录问题1:现有技术是否可以拿取固定数目的细胞进行组合形成spot问题2:是否有关于这方面的研究问题3:相关论文推荐一、细胞反卷积的核心目标与挑战二、单细胞与空间转录组数据的整合方法分类1. 概率型方法(Probabilistic-base…

【Java EE】SpringBoot 配置文件、日志和单元测试

1. 什么是配置文件在我们的计算机上诸如 C:/Users,C:/Windows,.config,.xml 都是配置文件,配置文件主要为了解决硬编码带来的问题。硬编码是将数据直接写在程序的源代码中,代码写死后再想改变就很麻烦。因此&#xff0…

CMake实践:常见的调试技巧

目录 1.简介 2.用 message() 输出关键信息 2.1.message简介 2.2.常用模式及作用 2.3.核心用法示例 2.4.常见问题及解决 3.查看缓存变量:cmake -L 与缓存文件 3.1.列出所有缓存变量(cmake -L) 3.2.直接查看 / 删除 CMakeCache.txt 4…

爬虫-第一个爬虫程序

浏览器里面都是html数据,拿到的都是页面源代码,可以用自己的方式打开测试。打开浏览器decode找charset

从SEO到GEO:优化策略如何应对传统搜索与AI搜索的巨变

AI 搜索与传统搜索结果优化之间有什么重叠之处? 为了帮助确定主要的差异,以及那些重叠程度最高的区域,我创建了一个比较(我会保持更新),通过搜索行为、优化领域、结果展示和交付,以及要跟踪的 K…

mysql5.7系列-InnoDB的MVCC实现原理

谈到数据库事务都要提一下ACID 特性: 原子性(Atomicity):事务中的操作要么全部执行,要么全部不执行。 一致性(Consistency):事务执行前后,数据库的状态必须是一致的。 …

力扣-287.寻找重复数

题目链接 287.寻找重复数 class Solution {public int findDuplicate(int[] nums) {int low nums[0];int fast nums[nums[0]];//1.快慢指针找相遇点while (low ! fast) {low nums[low];fast nums[nums[fast]];}//2.双指针找入环点int pre 0;while (pre ! low) {pre num…

Java 大视界 -- Java 大数据在智能教育个性化学习计划制定与动态调整中的应用(338)

Java 大视界 -- Java 大数据在智能教育个性化学习计划制定与动态调整中的应用(338) 引言:正文:一、Java 构建的学习行为数据采集与分析体系1.1 全场景数据接入引擎1.2 家校协同数据交互模块1.3 学习特征提取与建模 二、Java 驱动的…

uniapp返回webview返回小程序并且跳转回webview

webview页面提示:wx一定要导入sdk// 返回小程序,并携带当前 WebView 的 URL 和状态wx.miniProgram.postMessage({type: requestPayment,data: {webviewUrl: window.location.href,orderNum: this.orderNum,type: requestPayment}})setTimeout(() > {w…

[java: Cleaner]-一文述之

Cleaner Cleaner 是 Java 9 引入的资源清理机制,用于在对象被垃圾回收后自动或手动执行清理操作,替代 finalize(),安全、异步且高效。 public final class Cleaner {final CleanerImpl impl;static {CleanerImpl.setCleanerImplAccess(new Fu…

知识库中如何确实嵌入文本块大小?语义完整性与检索颗粒度的平衡机制

一、文本块大小确定的理论基础与历史演进 1.1 概念起源与发展脉络 文本块(Text Chunk) 这一概念最初源于信息检索领域的实践需求。早期的全文检索系统面临着一个根本性矛盾:如何在保持文档语义完整性的同时,实现高效的信息定位。这…

C/C++ 实现在快速排序Quick Sort中的三种分区方式

1. 简介神说, 要有光. 于是就有了光. 神说要有快排, 于是就有了快排. 快速排序Quick Sort的发明者 托尼 霍尔 是1980年的图灵奖得主. 快速排序就是他发明的. 当时发明的背景是: 由于霍尔要高效地对俄语词汇进行排序以优化翻译程序, 而当时的排序算法(如冒泡, 插入排序)效率较低…

Flink TiDB CDC 环境配置与验证

一、TiDB 数据库核心配置 1. 启用 TiCDC 服务 确保 TiDB 集群已部署 TiCDC 组件(版本需兼容 Flink CDC 3.0.1),并启动同步服务: # 示例:启动 TiCDC 捕获 changefeed cdc cli changefeed create \--pd"localhos…

2025年数据挖掘与计算机科学国际会议 (DMCS 2025)

2025 International Conference on Data Mining and Computer Science【一】、大会信息 会议简称:DMCS 2025 大会地点:中国广州 收录检索:提交Ei Compendex,CPCI,CNKI,Google Scholar等【二】会议简介2025年数…

腾讯轻量云和云服务器的区别

从问题本身来看,用户应该对云计算有基本了解,但可能不太清楚腾讯云产品线的细分定位。这类问题通常出现在项目初期技术选型阶段,用户需要权衡成本和性能。 让我先梳理两者的核心差异点。轻量云本质是面向轻量级应用的打包解决方案&#xff0c…