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

news2025/2/9 6:06:02

在这里插入图片描述

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

  大家好,我是 展菲,目前在上市企业从事人工智能项目研发管理工作,平时热衷于分享各种编程领域的软硬技能知识以及前沿技术,包括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
  - deploy

job_build:
  stage: build
  script:
    - echo "Building the application..."
    - mvn package
  artifacts:
    paths:
      - target/*.jar

job_test:
  stage: test
  script:
    - echo "Running tests..."
    - mvn test

job_deploy:
  stage: deploy
  script:
    - 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/*.jar
  expire_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 示例

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

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

相关文章

Django开发入门 – 1.搭建基于Python Web框架Django的IDE开发环境

Django开发入门 – 1.搭建基于Python Web框架Django的IDE开发环境 Build A Integrated Development Environment(IDE) for Python Web Framework - django By JacksonML 1. 获取及安装最新版Python 打开Chrome浏览器,访问Python官网链接:https://www…

【Java基础】序列化、反序列化和不可变类

Hi~!这里是奋斗的明志,很荣幸您能阅读我的文章,诚请评论指点,欢迎欢迎 ~~ 🌱🌱个人主页:奋斗的明志 🌱🌱所属专栏:Java基础面经 📚本系列文章为个…

USB子系统学习(四)使用libusb读取鼠标数据

文章目录 1、声明2、HID协议2.1、描述符2.2、鼠标数据格式 3、应用程序4、编译应用程序5、测试 1、声明 本文是在学习韦东山《驱动大全》USB子系统时,为梳理知识点和自己回看而记录,全部内容高度复制粘贴。 韦老师的《驱动大全》:商品详情 …

深度剖析 Redisson 分布式锁:原理、实现与应用实践

文章目录 写在文章开头详解Redisson 分布式锁使用和实现前置准备工作分布式锁的基本使用公平锁的使用联锁的使用读写锁基本使用常见问题Redisson和Jedis有什么区别redisson如何实现分布式锁redisson如何实现分布式锁的可重入redisson如何实现公平锁Redisson的watchdog机制是什么…

基于微信小程序的医院预约挂号系统的设计与实现

hello hello~ ,这里是 code袁~💖💖 ,欢迎大家点赞🥳🥳关注💥💥收藏🌹🌹🌹 🦁作者简介:一名喜欢分享和记录学习的在校大学生…

仅128个token达到ImageNet生成SOTA性能!MAETok:有效的扩散模型的关键是什么?(卡内基梅隆港大等)

论文链接:https://arxiv.org/pdf/2502.03444 项目链接:https://github.com/Hhhhhhao/continuous_tokenizer 亮点直击 理论与实验分析:通过实验和理论分析建立了潜空间结构与扩散模型性能之间的联系。揭示了具有更少高斯混合模型(G…

示例:JAVA调用deepseek

近日,国产AI DeepSeek在中国、美国的科技圈受到广泛关注,甚至被认为是大模型行业的最大“黑马”。在外网,DeepSeek被不少人称为“神秘的东方力量”。1月27日,DeepSeek应用登顶苹果美国地区应用商店免费APP下载排行榜,在…

Linux系统命令无法使用(glib库相关问题)

1.背景描述 Yum强制安装了一些软件,安装软件成功无报错,完成后不久突然发现系统出问题了,所有的命令无法使用了,如ls、mv、cat等基本命令报错。 relocation error: /lib64/libpthread.so.0: symbol_libc_dl_error_tsd …

电脑黑屏按什么键恢复?电脑黑屏的解决办法

电脑黑屏的原因有很多,可能是硬件、软件、系统或者病毒等方面造成的。那么,当我们遇到电脑黑屏时,应该怎么做呢?有没有什么快捷的方法可以恢复正常呢?本文将为您介绍一些常见的电脑黑屏情况及其解决办法。 一、电脑开机…

思翼遥控器疑问?

1.地面端与遥控端对频,地面端选择数传2为串口,天空端的UART2通过USB转TTL模块连接电脑,通过串口助手观察得有1Hz输出帧(开启遥控器APP时间段为10Hz),共21字节,请问,这个是什么含义&a…

anaconda中可以import cv2,但是notebook中cv2 module not found

一、问题 anaconda中成功import cv2 但是jupyter notebook中却无法导入cv2 二、排查 anaconda中使用python路径如下: jupyter notebook中使用python路径如下: 可以发现路径不一致。 三、解决 ①查看可用的kernel ②选中想要修改的kernel,打…

如何解决 Linux 文件系统挂载失败的问题

当遇到Linux文件系统挂载失败的问题时,您可以通过以下步骤来解决问题: 解决方法: 检查挂载点: 确保要挂载的目标文件系统存在,并且挂载点是正确的。检查挂载点是否已经被其他文件系统占用。 检查文件系统状态&#x…

PHP填表统计预约打卡表单系统小程序

📋 填表统计预约打卡表单系统——专属定制,信息互动新纪元 📊 填表统计预约打卡表单系统,一款专为现代快节奏生活量身打造的多元化自定义表单统计小程序,集信息填表、预约报名、签到打卡、活动通知、报名投票、班级统…

PAT乙级( 1009 说反话 1010 一元多项式求导)C语言版本超详细解析

1009 说反话 给定一句英语,要求你编写程序,将句中所有单词的顺序颠倒输出。 输入格式: 测试输入包含一个测试用例,在一行内给出总长度不超过 80的字符串。字符串由若干单词和若干空格组成,其中单词是由英文字母&#x…

LVSNAT服务搭建

LVSNAT实验环境搭建 在虚拟机上,我的NAT模式ip划分为:172.25.254.0 仅主机模式IP为:192.168.0.0 拓补图如下 配置服务:LVS服务端添加两个网卡,分别为NAT模式和仅主机模式 LVS服务端配置: systemctl st…

apisix网关ip-restriction插件使用说明

ip-restriction插件可以在网关层进行客户端请求ip拦截。 当然了,一般不推荐使用该方法,专业的事专业工具做。建议有条件,还是上防火墙或者waf来做。 官方文档:ip-restriction | Apache APISIX -- Cloud-Native API Gateway whit…

html 列动态布局

样式说明: /* 列动态布局,列之间以空格填充 */ li {display: flex;/* flex-direction: column; */justify-content: space-between; }

C++小等于的所有奇数和=最大奇数除2加1的平方。

缘由 三种思路解题&#xff1a;依据算术推导得到一个规律&#xff1a;小等于的所有奇数和等于最大奇数除以2加1的平方。将在后续发布&#xff0c;总计有十种推导出来的实现代码。 int a 0,aa 1,aaa 0;cin >> a; while (aa<a) aaa aa, aa 2;cout << aaa;i…

政采云业务网关实践:使用 Higress 统一替代 APISIX/Kong/Istio Ingress

作者&#xff1a;政采云基础架构团队技术专家 朱海峰&#xff08;片风&#xff09; 业务网关项目背景 由于一些历史的背景&#xff0c;政采云平台在网关建设上遇到一些问题&#xff1a; 容器网关配置较多&#xff0c;配置方式多样&#xff0c;运维压力较大&#xff1a; 配置…

【嵌入式 Linux 音视频+ AI 实战项目】瑞芯微 Rockchip 系列 RK3588-基于深度学习的人脸门禁+ IPC 智能安防监控系统

前言 本文主要介绍我最近开发的一个个人实战项目&#xff0c;“基于深度学习的人脸门禁 IPC 智能安防监控系统”&#xff0c;全程满帧流畅运行。这个项目我目前全网搜了一圈&#xff0c;还没发现有相关类型的开源项目。这个项目只要稍微改进下&#xff0c;就可以变成市面上目前…