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

【GitLab CI/CD 实践】从 0 到 1 搭建高效自动化部署流程

在这里插入图片描述

网罗开发 (小红书、快手、视频号同名)

  大家好,我是 展菲,目前在上市企业从事人工智能项目研发管理工作,平时热衷于分享各种编程领域的软硬技能知识以及前沿技术,包括iOS、前端、Harmony OS、Java、Python等方向。在移动端开发、鸿蒙开发、物联网、嵌入式、云原生、开源等领域有深厚造诣。

图书作者:《ESP32-C3 物联网工程开发实战》
图书作者:《SwiftUI 入门,进阶与实战》
超级个体:COC上海社区主理人
特约讲师:大学讲师,谷歌亚马逊分享嘉宾
科技博主:极星会首批签约作者


文章目录

    • 摘要
    • 引言
    • GitLab CI/CD 基本概念
    • 配置 .gitlab-ci.yml
    • GitLab Runner 的使用
      • 安装 Runner(Linux 示例)
      • 注册 Runner
    • 使用 Artifacts 进行构件管理
    • QA 环节
    • 总结
    • 参考资料

摘要

GitLab CI/CD 是 GitLab 内置的持续集成和持续部署(CI/CD)工具,它可以帮助开发团队自动化代码测试、构建和部署。本指南将介绍如何使用 GitLab CI/CD 搭建完整的自动化部署流程,包括 .gitlab-ci.yml 配置文件的编写、Stages、Jobs、Artifacts 以及 Runner 的使用。

引言

在现代软件开发中,自动化部署成为提高开发效率和稳定性的关键环节。相比 GitHub Actions 和 Jenkins,GitLab CI/CD 具有与 GitLab 无缝集成的优势,但许多开发者仍然对其使用方式不太熟悉。本指南将提供详细的讲解和示例代码,帮助开发团队高效使用 GitLab CI/CD。

GitLab CI/CD 基本概念

  • Pipeline:GitLab CI/CD 的核心,由多个 Stage 组成。
  • Stage:定义 CI/CD 的不同阶段,如 buildtestdeploy
  • Job:具体执行的任务,例如编译代码或运行测试。
  • Runner:GitLab CI/CD 运行 Job 的环境,可以是共享 Runner 或自托管 Runner。

配置 .gitlab-ci.yml

.gitlab-ci.yml 是 GitLab CI/CD 的核心配置文件,以下是一个基本的 .gitlab-ci.yml 示例:

stages:- build- test- deployjob_build:stage: buildscript:- echo "Building the application..."- mvn packageartifacts:paths:- target/*.jarjob_test:stage: testscript:- echo "Running tests..."- mvn testjob_deploy:stage: deployscript:- echo "Deploying the application..."- scp target/*.jar user@server:/deploy/path

解析:

  • stages 定义了 CI/CD 流程的阶段(buildtestdeploy)。
  • job_build 任务构建应用,并保存 target/*.jar 产物(Artifacts)。
  • job_test 任务执行单元测试,确保代码质量。
  • job_deploy 任务自动化部署,将产物上传至服务器。

GitLab Runner 的使用

GitLab CI/CD 依赖 Runner 执行 Job,可以使用 GitLab 提供的共享 Runner,或者自己托管 Runner。

安装 Runner(Linux 示例)

curl -L --output gitlab-runner https://gitlab-runner-downloads.s3.amazonaws.com/latest/binaries/gitlab-runner-linux-amd64
chmod +x gitlab-runner
sudo mv gitlab-runner /usr/local/bin/
sudo gitlab-runner install --user=gitlab-runner --working-directory=/home/gitlab-runner
sudo gitlab-runner start

注册 Runner

sudo gitlab-runner register \--url https://gitlab.com/ \--registration-token YOUR_TOKEN \--executor shell \--description "My Runner" \--tag-list "ci,deploy" \--run-untagged=false \--locked=false

说明:

  • --executor shell 选择 Shell 作为执行环境(可换为 dockerkubernetes)。
  • --tag-list "ci,deploy" 设定 Runner 适用的 CI/CD 任务。

使用 Artifacts 进行构件管理

Artifacts 用于存储和共享 Job 产生的文件,例如构建产物。

artifacts:paths:- target/*.jarexpire_in: 1 hour
  • paths:指定要保存的文件路径。
  • expire_in:设置过期时间,默认 30 天。

QA 环节

Q1: GitLab CI/CD 和 Jenkins 有什么区别?

  • GitLab CI/CD 集成在 GitLab 中,使用 YAML 文件配置,而 Jenkins 需要单独安装和维护。

Q2: 如何在 GitLab CI/CD 中使用环境变量?

  • 可以在 GitLab 项目的 Settings > CI/CD > Variables 添加环境变量,然后在 .gitlab-ci.yml 文件中使用 $VAR_NAME

总结

GitLab CI/CD 提供了一种高效的自动化部署方式,能够帮助团队提高开发效率和代码质量。本文介绍了 GitLab CI/CD 的基本概念、.gitlab-ci.yml 配置、Runner 的使用以及 Artifacts 处理方式。

未来,我们可以进一步探索 GitLab CI/CD 的进阶功能,如:

  • 使用 Docker 进行容器化部署
  • 结合 Kubernetes 进行自动化运维
  • 监控和优化 CI/CD 运行效率

参考资料

  • GitLab 官方文档
  • GitLab CI/CD 示例

相关文章:

【GitLab CI/CD 实践】从 0 到 1 搭建高效自动化部署流程

网罗开发 (小红书、快手、视频号同名) 大家好,我是 展菲,目前在上市企业从事人工智能项目研发管理工作,平时热衷于分享各种编程领域的软硬技能知识以及前沿技术,包括iOS、前端、Harmony OS、Java、Python等…...

【DeepSeek-R1训练笔记】随手记录一些训练log

背景说明 DeepSeek系列解读请移步我的上一篇blog:【完整版】DeepSeek-R1大模型学习笔记(架构、训练、Infra)代码仓库【科大的大四老哥太太太太太值得倾佩了】:https://github.com/Unakar/Logic-RLDeepSeek-R1-Zero复现文档&#…...

【自开发工具介绍】SQLSERVER的ImpDp和ExpDp工具04

SQLSERVER的ImpDp和ExpDp工具演示 1、指定某些表作为导出对象外 (-exclude_table) 验证用:导出的表,导入到新的数据库 2、指定某些表作为导出对象外 (-exclude_table) 支持模糊检索,可以使用星号 以s开头的表作为导出对象外,…...

「全网最细 + 实战源码案例」设计模式——策略模式

核心思想 策略模式(Strategy Pattern)是一种行为型设计模式,用于定义一系列算法或策略,将它们封装成独立的类,并使它们可以相互替换,而不影响客户端的代码,提高代码的可维护性和扩展性。 结构 …...

[MoeCTF 2022]baby_file

题目 <html> <title>Heres a secret. Can you find it?</title> <?phpif(isset($_GET[file])){$file $_GET[file];include($file); }else{highlight_file(__FILE__); } ?> </html> 读取flag /?filephp://filter/readconvert.base64-encode…...

【AI日记】25.02.07 探索开辟第二战场

【AI论文解读】【AI知识点】【AI小项目】【AI战略思考】【AI日记】【读书与思考】【AI应用】 探索 探索如何做视频博主一边坚持主攻方向&#xff08; 找工作&#xff0c;包括 AI 学习和 kaggle比赛&#xff09;&#xff0c;一边尝试开辟第二战场&#xff08;比如&#xff1a;视…...

path 路径模块

在开发基于 Node.js 的应用程序时&#xff0c;处理文件路径是一个常见的需求。为了简化这一过程并避免跨平台兼容性问题&#xff0c;Node.js 提供了 path 模块。该模块提供了一系列实用的方法来解析、格式化和操作文件路径。本文将详细介绍 path 模块的功能及其使用方法&#x…...

SpringBoot中的多环境配置管理

SpringBoot中的多环境配置管理 文章目录 SpringBoot中的多环境配置管理SpringBoot中的多环境配置管理 多环境配置的概述1. 为什么需要多环境配置&#xff1f;2. Spring Boot 中如何实现多环境配置&#xff1f;3. 多环境配置的应用场景4. 如何实现配置隔离&#xff1f; Spring B…...

mac下生成.icns图标

笔记原因&#xff1a; 今日需要在mac下开发涉及图标文件的使用及icons文件的生成&#xff0c;所以记录一下。 网络上都是一堆命令行需要打印太麻烦了&#xff0c;写一个一键脚本。 步骤一 将需要生成的png格式文件重命名为“pic.png” mv xxxx.png pic.png 步骤二 下载我…...

关于JS继承的七种方式和理解

1.原型链继承 function Fun1() {this.name parentthis.play [1, 2, 3] } function Fun2() {this.type child }Fun2.prototype new Fun1()let s1 new Fun2() let s2 new Fun2() s1.play.push(4) console.log(s1.play, s2.play) // [1, 2, 3, 4] [1, 2, 3, 4]可以看到两个…...

储能系统-系统架构

已更新系列文章包括104、61850、modbus 、单片机等&#xff0c;欢迎关注 IEC61850实现方案和测试-1-CSDN博客 快速了解104协议-CSDN博客 104调试工具2_104协议调试工具-CSDN博客 1 电池储能系统&#xff08;BESS&#xff09; 架构 电池储能系统主要包括、电池、pcs、本地控制…...

AI智算-k8s部署DeepSeek Janus-Pro-7B 多模态大模型

文章目录 简介环境依赖模型下载下载Janus库GPU环境镜像模型manifest调用Janus多模态文生图 简介 DeepSeek Janus Pro 作为一款强大的多模态理解与生成框架&#xff0c;正在成为研究人员和开发者的热门选择。本文将详细介绍如何在云原生k8s环境中部署配置和使用 DeepSeek Janus…...

【截图】selenium自动通过浏览器截取指定元素div的图片

【截图】selenium自动通过浏览器截取指定元素div的图片 思路 截取完整网页截图 通过元素的坐标 截图到指定位置的图片 前提是已经获取到 driver 了 # 定位目标divtarget_div driver.find_element(By.CLASS_NAME, headlines-right)# 获取div的位置和大小location target_div…...

如何导入第三方sdk | 引入第三方jar 包

0. 背景1. 上传私有仓库2. 使用本地文件系统 0. 背景 对接一些第三方功能&#xff0c;会拿到第三方的sdk&#xff0c;也就是jar包&#xff0c;如何导入呢 1. 上传私有仓库 最好的方式就是将第三方jar包&#xff0c;上传到私有的仓库&#xff0c;这样直接正常在pom引用即可如果只…...

HarmonyOS 5.0应用开发——ContentSlot的使用

【高心星出品】 文章目录 ContentSlot的使用使用方法案例运行结果 完整代码 ContentSlot的使用 用于渲染并管理Native层使用C-API创建的组件同时也支持ArkTS创建的NodeContent对象。 支持混合模式开发&#xff0c;当容器是ArkTS组件&#xff0c;子组件在Native侧创建时&#…...

C#常用集合优缺点对比

先上结论&#xff1a; 在C#中&#xff0c;链表、一维数组、字典、List<T>和ArrayList是常见的数据集合类型&#xff0c;它们各有优缺点&#xff0c;适用于不同的场景。以下是它们的比较&#xff1a; 1. 一维数组 (T[]) 优点&#xff1a; 性能高&#xff1a;数组在内存中…...

基于CLIP视觉语言大模型的行人重识别方法的简单框架设计

以下是一个基于CLIP视觉语言大模型的行人重识别方法的简单框架设计&#xff0c;用于数据集测试。我们将使用torch和clip库&#xff0c;假设数据集是一个包含行人图像的文件夹结构&#xff0c;每个子文件夹代表一个行人身份。 步骤概述 安装必要的库加载CLIP模型定义数据集类提…...

RabbitMQ 从入门到精通:从工作模式到集群部署实战(三)

文章目录 使用CLI管理RabbitMQrabbitmqctlrabbitmq-queuesrabbitmq-diagnosticsrabbitmq-pluginsrabbitmq-streamsrabbitmq-upgraderabbitmqadmin 使用CLI管理RabbitMQ RabbitMQ CLI 工具需要安装兼容的 Erlang/OTP版本。 这些工具假定系统区域设置为 UTF-8&#xff08;例如en…...

BurpSuite抓包与HTTP基础

文章目录 前言一、BurpSuite1.BurpSuite简介2.BurpSuite安装教程(1)BurpSuite安装与激活(2)安装 https 证书 3.BurpSuite使用4.BurpSuite资料 二、图解HTTP1.HTTP基础知识2.HTTP客户端请求消息3.HTTP服务端响应消息4.HTTP部分请求方法理解5.HTTPS与HTTP 总结 前言 在网络安全和…...

SQL Server 数据库迁移到 MySQL 的完整指南

文章目录 引言一、迁移前的准备工作1.1 确定迁移范围1.2 评估兼容性1.3 备份数据 二、迁移工具的选择2.1 使用 MySQL Workbench2.2 使用第三方工具2.3 手动迁移 三、迁移步骤3.1 导出 SQL Server 数据库结构3.2 转换数据类型和语法3.3 导入 MySQL 数据库3.4 迁移数据3.5 迁移存…...

谷歌浏览器插件

项目中有时候会用到插件 sync-cookie-extension1.0.0&#xff1a;开发环境同步测试 cookie 至 localhost&#xff0c;便于本地请求服务携带 cookie 参考地址&#xff1a;https://juejin.cn/post/7139354571712757767 里面有源码下载下来&#xff0c;加在到扩展即可使用FeHelp…...

高频面试之3Zookeeper

高频面试之3Zookeeper 文章目录 高频面试之3Zookeeper3.1 常用命令3.2 选举机制3.3 Zookeeper符合法则中哪两个&#xff1f;3.4 Zookeeper脑裂3.5 Zookeeper用来干嘛了 3.1 常用命令 ls、get、create、delete、deleteall3.2 选举机制 半数机制&#xff08;过半机制&#xff0…...

Nginx server_name 配置说明

Nginx 是一个高性能的反向代理和负载均衡服务器&#xff0c;其核心配置之一是 server 块中的 server_name 指令。server_name 决定了 Nginx 如何根据客户端请求的 Host 头匹配对应的虚拟主机&#xff08;Virtual Host&#xff09;。 1. 简介 Nginx 使用 server_name 指令来确定…...

Axios请求超时重发机制

Axios 超时重新请求实现方案 在 Axios 中实现超时重新请求可以通过以下几种方式&#xff1a; 1. 使用拦截器实现自动重试 import axios from axios;// 创建axios实例 const instance axios.create();// 设置超时时间 instance.defaults.timeout 5000;// 最大重试次数 cons…...

【Java_EE】Spring MVC

目录 Spring Web MVC ​编辑注解 RestController RequestMapping RequestParam RequestParam RequestBody PathVariable RequestPart 参数传递 注意事项 ​编辑参数重命名 RequestParam ​编辑​编辑传递集合 RequestParam 传递JSON数据 ​编辑RequestBody ​…...

Maven 概述、安装、配置、仓库、私服详解

目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...

云原生玩法三问:构建自定义开发环境

云原生玩法三问&#xff1a;构建自定义开发环境 引言 临时运维一个古董项目&#xff0c;无文档&#xff0c;无环境&#xff0c;无交接人&#xff0c;俗称三无。 运行设备的环境老&#xff0c;本地环境版本高&#xff0c;ssh不过去。正好最近对 腾讯出品的云原生 cnb 感兴趣&…...

安宝特方案丨船舶智造的“AR+AI+作业标准化管理解决方案”(装配)

船舶制造装配管理现状&#xff1a;装配工作依赖人工经验&#xff0c;装配工人凭借长期实践积累的操作技巧完成零部件组装。企业通常制定了装配作业指导书&#xff0c;但在实际执行中&#xff0c;工人对指导书的理解和遵循程度参差不齐。 船舶装配过程中的挑战与需求 挑战 (1…...

VisualXML全新升级 | 新增数据库编辑功能

VisualXML是一个功能强大的网络总线设计工具&#xff0c;专注于简化汽车电子系统中复杂的网络数据设计操作。它支持多种主流总线网络格式的数据编辑&#xff08;如DBC、LDF、ARXML、HEX等&#xff09;&#xff0c;并能够基于Excel表格的方式生成和转换多种数据库文件。由此&…...

JS红宝书笔记 - 3.3 变量

要定义变量&#xff0c;可以使用var操作符&#xff0c;后跟变量名 ES实现变量初始化&#xff0c;因此可以同时定义变量并设置它的值 使用var操作符定义的变量会成为包含它的函数的局部变量。 在函数内定义变量时省略var操作符&#xff0c;可以创建一个全局变量 如果需要定义…...