使用Gitlab CI/CD结合docker容器实现自动化部署

Gitlab CI/CD基本介绍

  1. 核心概念

    持续集成(CI):每次代码提交后自动触发构建、测试和代码检查,确保代码质量

    持续交付/部署(CD):在 CI 基础上自动将代码部署到测试或生产环境,支持人工审核(交付)或全自动发布(部署)

  2. 核心组件

    Pipeline(流水线):由多个阶段(stages)组成,每个阶段包含并行执行的作业(jobs

    .gitlab-ci.yml:YAML 格式的配置文件,定义流水线的逻辑,需放置在项目根目录

    Runner:执行作业的代理,支持 Docker、Shell 等运行环境,分为共享 Runner 和私有 Runner

  3. 工作流程

    代码提交:触发流水线执行

    阶段执行

    • 构建阶段:编译代码、安装依赖
    • 测试阶段:运行单元测试、集成测试等
    • 部署阶段:自动发布到指定环境

    结果反馈:通过 GitLab 界面查看日志和状态

  4. 优势

    • 自动化:减少手动操作,提升效率
    • 可视化:提供流水线状态和日志的实时监控
    • 灵活性:支持多语言、多环境部署,可集成 Kubernetes 等云原生工具

预先准备

  1. 用于发布程序的机器一台,负责执行任务、部署程序
  2. 若干台服务器(生产环境)

发布程序

在发布程序的机器上安装gitlab-runner
  1. 添加官方仓库

    curl -L "https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.deb.sh" | sudo bash
    
  2. 使用apt安装

    sudo apt-get install gitlab-runner
    
  3. 验证是否安装成功

    gitlab-runner --version
    
注册Runner到项目
  1. 注册runner到项目,在项目目录下执行

    sudo gitlab-runner register
    

    填写gitlab的地址,token,其余信息不必要填
    在这里插入图片描述

    token在gitlab的网页端可以找到

    在这里插入图片描述

    按照下图填写服务器的必要信息,地址、端口号、ssh用户名和密码

    在这里插入图片描述

  2. 注册完成后,可以看到runner的配置文件在**/etc/gitlab-runner/config.toml**下

    在这里插入图片描述

  3. 查看gitlab-runner运行状态

    在这里插入图片描述

在安装runner的机器上生成ssh密钥
  1. 生成密钥,需要指定格式

    ssh-keygen -t rsa -b 4096 -f ~/.ssh/id_rsa
    
  2. 查看id_rsa私钥格式,必须有开头和结尾,否则密钥加载会失败

    -----BEGIN OPENSSH PRIVATE KEY-----
    密钥内容
    -----END OPENSSH PRIVATE KEY-----
    
  3. 将本地生成的 SSH 公钥添加到目标服务器(生产环境)上,使用以下命令将公钥添加到目标服务器的 authorized_keys 文件中

    ssh-copy-id username@remote_host
    

在项目目录下编写.gitlab-ci.yml

下面是我的一个示例

stages:- build- deploybuild_image:stage: buildimage: docker:latestservices:- docker:dindscript:- docker rmi ems-simulate 2>/dev/null || true- docker build --no-cache -t ems-simulate .- docker save ems-simulate | gzip > ~/ems_simulate.tar.gzonly:- maindeploy_ems_simulate:stage: deployparallel:matrix: # 使用矩阵同时部署4台服务器- HOST: ["10.10.112.4", "10.10.112.5", "10.10.112.6", "10.10.110.33"]before_script:# 禁用严格主机密钥检查(仅限测试环境)- echo -e "Host *\n\tStrictHostKeyChecking no\n\n" > ~/.ssh/configscript:# 传输镜像到远程主机- scp ~/ems_simulate.tar.gz narada@$HOST:~# 远程执行部署命令- ssh narada@$HOST "gunzip -c ~/ems_simulate.tar.gz | docker load && docker stop ems_simulate_container 2>/dev/null && docker rm ems_simulate_container 2>/dev/null && docker volume rm ems_simulate_volume 2>/dev/null || true && docker volume create ems_simulate_volume 2>/dev/null || true && docker run -d --name ems_simulate_container --network host -v ems_simulate_volume:/app ems-simulate /bin/bash -c 'cd /app && python3 start_back_end.py'"needs: [build_image]only:- main

结合docker使用分为两个阶段

  1. 构建阶段,制作docker镜像并导出为tar.gz文件
  2. 将镜像文件分发到每台生产环境,部署docker容器

当将代码提交到gitlab时,将会自动执行任务,下面是执行的效果

在这里插入图片描述

点进某个任务可以看到具体的执行情况

在这里插入图片描述

执行成功的任务最后会显示Job succeeded

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

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

相关文章

初学者运行Pycharm程序可能会出现的问题,及解决办法

文章目录 前言一、ModuleNotFoundError: No module named sklearn二、ImportError: cannot import name show_config from numpy (unknown location)三、Pycharm报错:“Original error was: DLL load failed: 找不到指定的模块“ 的解决办法四、ImportError: cannot…

Android开发中的Java与Kotlin:全面对比与深度解析

Android开发中的Java与Kotlin:全面对比与深度解析 在Android开发领域,Java和Kotlin是两种主流编程语言。自Google在2017年宣布Kotlin为Android官方支持语言以来,Kotlin凭借其现代语法特性和与Java的无缝兼容性,逐渐成为开发者的新…

为应对激烈竞争环境,IBMS系统如何提升企业管理效率

IBMS智能管理系统:赋能企业高效运营,决胜竞争新时代 在瞬息万变的商业环境中,效率就是竞争力!企业如何快速响应市场变化、优化内部流程、降低成本并实现精准决策?IBMS智能管理系统以创新科技为引擎,为企业…

2.3 ASPICE的架构与设计

在ASPICE中,架构与设计是汽车软件开发过程中非常重要的一环,它涉及到定义和设计软件系统的整体结构、组件以及其相互关系。良好的架构与设计可以帮助团队更好地理解和管理软件系统,提高系统的可维护性、可扩展性和性能。以下是ASPICE中架构与…

生益PCB耐高温PCB板材怎么样?

在5G基站昼夜不停地吞吐数据时,在新能源汽车电池管理系统经受极寒酷暑考验时,在航空航天器穿越大气层承受2000℃热浪冲击时,一块优质PCB板材的“抗热基因”正在决定着整个系统的生死存亡。生益科技研发的耐高温PCB板材,正是在这场…

Java Spring ApplicationEvent 概述

一、Spring 事件机制核心概念 1. 事件驱动架构模型 发布-订阅模式:解耦事件生产者和消费者观察者模式:监听器监听特定事件事件驱动优势: 组件间松耦合系统扩展性好支持异步处理事件溯源支持 2. 核心组件 组件作用实现方式ApplicationEve…

Spring核心框架完全指南 - 基础知识全解析

📖 目录 🌟 Spring框架简介 🏗️ IoC容器详解 💉 依赖注入(DI)深入理解 ⚙️ Bean配置与管理 🎯 Bean的作用域 🔄 Bean生命周期 🎭 面向切面编程(AOP) 📝 Spring注解详解 📁 资源管理 📢 事件机制 🔤 SpEL表达式语言 🎯 实战案例 📚 总…

Parasoft C++Test软件集成测试(部件测试)_操作指南

系列文章目录 Parasoft C++Test软件静态分析:操作指南(编码规范、质量度量)、常见问题及处理 Parasoft C++Test软件单元测试:操作指南、实例讲解、常见问题及处理 Parasoft C++Test软件集成测试:操作指南、实例讲解、常见问题及处理 进阶扩展:自动生成静态分析文档、自动…

聊一聊 Linux 上对函数进行 hook 的两种方式

一:背景 1. 讲故事 前两篇我们介绍了 Minhook 在 Windows 平台上的强大功效,这一篇我们来聊一聊如何在 Linux 上对函数进行hook,这里介绍两种方式。 轻量级的 LD_PRELOAD 拦截 LD_PRELOAD是一种共享库拦截,这种方式的优点在于…

【免费分享】GWO-BP-AdaBoost预测!灰狼优化、人工神经网络与AdaBoost集成学习算法预测研究

一、模型组成原理 1. 灰狼优化算法(GWO) 核心思想:模拟灰狼群体的社会等级和狩猎行为(包围、跟踪、攻击猎物),通过α、β、δ三级领导层引导种群搜索最优解。算法流程包括: 社会分层&#xff…

matlab实现非线性Granger因果检验

matlab程序包。用于格兰杰因果分析,分析数据时,直接带入数据即可。 hjt2/README , 1804 hjt2/c-code/Makefile , 57 hjt2/c-code/hjt2_tval.c , 10862 hjt2/matlab/spx_rp.dat , 175202 hjt2/matlab/spx_ur.dat , 174522 hjt2/matlab/spx_uv.dat , 1745…

从SQL Server到分布式大数据平台:重构企业数据架构

在企业数字化加速的背景下,越来越多的组织开始意识到:传统的数据系统正逐渐成为增长的“瓶颈”而非“助力”。其中,SQL Server 作为许多企业IT架构中曾经的中坚力量,正面临前所未有的挑战。它曾以稳定、易用、成本可控等优势&…

【网关】互联网公司的接入网关和业务网关怎么设计

网关 网关基础知识 RGW全称 Red GateWay :小红书网关(网关英文:Gateway; 接入网关:Access Gateway) 网关(通用):Gateway 接入网关:API Gateway、Access Gateway 业务网关…

安全虚拟磁盘技术的创新与实践

文章目录 前言一、数据安全保护的新挑战1. 数据安全态势日益严峻,法律法规陆续出台2. 加强数据安全管控成为银行数据安全管理核心之一3. 银行终端数据安全管控存在的难题 二、安全虚拟磁盘的探索与实践1. 敏感文件的入盘及操作2. 敏感文件的流转及出盘三、安全虚拟磁…

uni-app项目实战笔记4--使用组件具名插槽slot定义公共标题模块

先来看效果: 如图,“每日推荐”,“专题精选”这些公共标题有相同的地方,也有自己的独特的地方,像这类有共性又有个性的可考虑使用slot插槽来实现。 实现步骤: 1.在前面文章创建的公共组件common-title定义…

Appium + Java 测试全流程

💖亲爱的技术爱好者们,热烈欢迎来到 Kant2048 的博客!我是 Thomas Kant,很开心能在CSDN上与你们相遇~💖 本博客的精华专栏: 【自动化测试】

vue3 双容器自动扩展布局 根据 内容的多少 动态定义宽度

需求: 左右两个列表 挨着排列,当左边内容超出滚动条时,换列显示,右边的列表随之移动 效果图: 1.左边数据:10,右边数据:5 2.左边数据:30,右边数据&#xff…

linux-java部署

version: 3 services:nacos_host:image: nacos/nacos-server:v2.2.0restart: alwayscontainer_name: nacos_hostenvironment:- MODEstandalone- PREFER_HOST_MODEhostnamevolumes:- ./sores/nacos/log:/home/nacos/logsports:- 8848:8848- 9848:9848 #2.0新增了两个端口&#x…

010502管道符_防火墙出入站_不回显带外-渗透命令-基础入门-网络安全

文章目录 1 管道符2 防火墙出入站3 不回显外带典型场景常见OOB通道实现示例(以DNS为例)1. 利用DNS外带数据2. 使用工具监听 防御建议扩展:无回显OOB自动化工具注意事项演示结语 1 管道符 | (管道符号) ||(…

智慧养老与数字健康:科技赋能老年生活,构建全方位养老体系

在全球人口老龄化进程不断加速的当下,我国的老龄化程度也日益加深。 截至 2023 年末,我国 60 岁及以上人口达 2.97 亿人,占总人口的 21.1%,其中 65 岁及以上人口为 2.17 亿人,占总人口的 15.4%。 养老问题已成为全社…