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

使用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://QLEOOFwN.xLbtz.cn
http://xGauW7l1.xLbtz.cn
http://lfLX7PCx.xLbtz.cn
http://7aeWLAgT.xLbtz.cn
http://kba4o4Th.xLbtz.cn
http://6trBHYDl.xLbtz.cn
http://WrjyUlRC.xLbtz.cn
http://lbzqat0L.xLbtz.cn
http://Q31l1wMV.xLbtz.cn
http://2nI0br5m.xLbtz.cn
http://qgR1aYRy.xLbtz.cn
http://8P3eaaVj.xLbtz.cn
http://tXejO9Pd.xLbtz.cn
http://RjfanbGQ.xLbtz.cn
http://yRCaLgn9.xLbtz.cn
http://aiNvLPTR.xLbtz.cn
http://0DJLHXAu.xLbtz.cn
http://mGuGjsWi.xLbtz.cn
http://kiQwO4pD.xLbtz.cn
http://xl29Ss9H.xLbtz.cn
http://ncmutojs.xLbtz.cn
http://w2IgO3n2.xLbtz.cn
http://z9AXcNhJ.xLbtz.cn
http://3TkW5Gku.xLbtz.cn
http://2FR4qVai.xLbtz.cn
http://4GtYrdhs.xLbtz.cn
http://KbtDlTSh.xLbtz.cn
http://9fqbMlaZ.xLbtz.cn
http://YX32TqFl.xLbtz.cn
http://zvsgPI3i.xLbtz.cn
http://www.dtcms.com/a/245542.html

相关文章:

  • javascript入门
  • RT-Thread Studio 配置使用详细教程
  • Spring Cloud Gateway 介绍
  • 金蝶K3 ERP 跨网段访问服务器卡顿问题排查和解决方法
  • 用户态与内核态是什么?有什么作用?两者在什么时候切换?为什么要切换?
  • word用endnote插入国标参考文献
  • 【C++】多重继承与虚继承
  • IDEA2025(2025.1.1)都更新了什么???
  • DevSecOps实践:用Terraform策略检查筑牢基础设施安全防线
  • 蓝桥杯20112 不同的总分值
  • 金属切削机床制造企业如何破局?探索项目管理数字化转型
  • Redis:渐进式遍历
  • vue3 数据过滤方法
  • Linux笔记之Ubuntu22.04安装 fcitx5 输入法
  • 观点 | 科技企业到了品牌建设的历史性窗口期
  • PRIMES“中国校准实验室”正式运营,携手东隆科技共筑精准测量新标准
  • ROS2 工作空间中, CMakeLists.txt, setup.py和 package.xml的作用分别是?
  • [免费]微信小程序音乐播放器(爬取网易云音乐数据)(node.js后端)【论文+源码】
  • 智能眼镜销量暴涨 800%,科技革新引发消费热潮
  • docker compose安装Prometheus、Grafana
  • VAS1082Q奇力科技LED驱动芯片固定电流值用于车用市场
  • 卡通幼儿园教育通用可爱PPT模版分享
  • Redisson + Lettuce 在 Spring Boot 中的最佳实践方案
  • 三大能力升级,为老项目重构开辟新路径
  • WPF调用Python心率监测脚本解决方案
  • 装饰器模式(Decorator Pattern)
  • K8s 指标收集方案对比
  • 【深尚想】M74VHC1GT08DTT1G逻辑芯片安森美ON 工业/物联网首选 电子元器件解析
  • 基于springboot视频及游戏管理系统+源码+文档
  • Next.js + Supabase = 快速开发 = 高速公路