【devops】gitlab 实现cicd 实践

 本站以分享各种运维经验和运维所需要的技能为主

《python零基础入门》:python零基础入门学习

《python运维脚本》: python运维脚本实践

《shell》:shell学习

《terraform》持续更新中:terraform_Aws学习零基础入门到最佳实战

《k8》暂未更新

《docker学习》暂未更新

《ceph学习》ceph日常问题解决分享

《日志收集》ELK+各种中间件

《运维日常》运维日常

《linux》运维面试100问

通过软件开发的持续方法,您可以持续构建、测试和部署迭代代码更改。这个迭代过程有助于减少您基于错误或失败的先前版本开发新代码的机会。使用这种方法,从开发新代码到部署,您努力减少人为干预,甚至完全不干预。

  • Continuous Integration (CI) 持续集成
  • Continuous Delivery (CD) 持续交付
  • Continuous Deployment (CD) 持续部署

GitLab CI/CD 介绍

Continuous Integration 持续集成

考虑一个应用程序,它的代码存储在 GitLab 的 Git 存储库中。开发人员每天多次推送代码更改。对于每次推送到存储库,您都可以创建一组脚本来自动构建和测试您的应用程序。这些脚本有助于减少您在应用程序中引入错误的机会。

这种做法被称为持续集成。提交给应用程序的每个更改,甚至是提交给开发分支的更改,都是自动且持续地构建和测试的。这些测试可确保更改通过您为应用程序建立的所有测试、指南和代码合规性标准。

GitLab 本身就是一个使用持续集成作为软件开发方法的项目示例。对于项目的每次推送,都会对代码进行一组检查

Continuous Delivery 持续交付

持续交付是超越持续集成的一步。每次将代码更改推送到代码库时,不仅会构建和测试您的应用程序,而且还会持续部署应用程序。但是,通过持续交付,您可以手动触发部署。

持续交付会自动检查代码,但需要人工干预才能手动和战略性地触发更改的部署

Continuous Deployment 持续部署

持续部署 是超越持续集成的又一步,类似于持续交付。不同之处在于,您无需手动部署应用程序,而是将其设置为自动部署。不需要人为干预。

GitLab CI/CD 是如何工作的

为了使用GitLab CI/CD,你需要一个托管在 GitLab 上的应用程序代码库,并且在根目录中的 .gitlab-ci.yml 文件中指定构建、测试和部署的脚本。

在这个文件中,你可以定义要运行的脚本,定义包含的依赖项,选择要按顺序运行的命令和要并行运行的命令,定义要在何处部署应用程序,以及指定是否 要自动运行脚本或手动触发脚本。

为了可视化处理过程,假设添加到配置文件中的所有脚本与在计算机的终端上运行的命令相同。

一旦你已经添加了.gitlab-ci.yml到仓库中,GitLab 将检测到该文件,并使用名为 GitLab Runner 的工具运行你的脚本。该工具的操作与终端类似。

这些脚本被分组到 jobs,它们共同组成一个 Pipeline。一个最简单的 .gitlab-ci.yml 文件可能是这样的:

before_script:   - apt-get install rubygems ruby-dev -y   run-test:   script:   - ruby --version 6 

before_script 属性将在运行任何内容之前为你的应用安装依赖,一个名为 run-test 的 job(作业)将打印当前系统的 Ruby 版本。二者共同构成了在每次推送到仓库的任何分支时都会被触发的 Pipeline(管道)。

GitLab CI/CD 不仅可以执行你设置的 job,还可以显示执行期间发生的情况,正如你在终端看到的那样:

https://tc.ctq6.cn/tc/20240707073341.png

为你的应用创建策略,GitLab 会根据你的定义来运行 Pipeline。你的管道状态也会由 GitLab 显示:

https://tc.ctq6.cn/tc/20240707073418.png

最后,如果出现任何问题,可以轻松地回滚所有更改:

https://tc.ctq6.cn/tc/20240707073503.png

基本CI/CD 工作流程

一旦你将提交推送到远程仓库的分支上,那么你为该项目设置的 CI/CD 管道将会被触发。GitLab CI/CD 通过这样做:

运行自动化脚本(串行或并行) 代码Review并获得批准 构建并测试你的应用 就像在你本机中看到的那样,使用 Review Apps 预览每个合并请求的更改 代码 Review 并获得批准 合并 feature 分支到默认分支,同时自动将此次更改部署到生产环境 如果出现问题,可以轻松回滚 通过 GitLab UI 所有的步骤都是可视化的 。

https://tc.ctq6.cn/tc/20240707073635.png

深入了解CI/CD 的基本工作流程

Verify:

  • 通过持续集成自动构建和测试你的应用程序
  • 使用 GitLab 代码质量(GitLab Code Quality)分析你的源代码质量
  • 通过浏览器性能测试(Browser Performance Testing)确定代码更改对性能的影响
  • 执行一系列测试,比如 Container Scanning,Dependency Scanning,JUnit tests
  • 用 Review Apps 部署更改,以预览每个分支上的应用程序更改

Package:

  • 用 Container Registry 存储 Docker 镜像
  • 用 NPM Registry 存储 NPM 包
  • 用 Maven Repository 存储 Maven artifacts
  • 用 Conan Repository 存储 Conan 包

Release:

  • 持续部署,自动将你的应用程序部署到生产环境
  • 持续交付,手动点击以将你的应用程序部署到生产环境
  • 用 GitLab Pages 部署静态网站
  • 仅将功能部署到一个 Pod 上,并让一定比例的用户群通过 Canary Deployments 访问临时部署的功能(PS:即灰度发布)
  • 在 Feature Flags 之后部署功能
  • 用 GitLab Releases 将发布说明添加到任意 Git tag
  • 使用 Deploy Boards 查看在 Kubernetes 上运行的每个 CI 环境的当前运行状况和状态
  • 使用 Auto Deploy 将应用程序部署到 Kubernetes 集群中的生产环境

使用 GitLab CI/CD,还可以:

  • 通过 Auto DevOps 轻松设置应用的整个生命周期
  • 将应用程序部署到不同的环境
  • 安装你自己的 GitLab Runner
  • Schedule pipelines
  • 使用安全测试报告(Security Test reports)检查应用程序漏洞

GitLab CI/CD 快速开始

.gitlab-ci.yml 文件告诉 GitLab Runner 要做什么。一个简单的管道通常包括三个阶段:build、test、deploy,管道在 CI/CD > Pipelines 页面。

创建一个.gitlab-ci.yml 文件

通过配置 .gitlab-ci.yml 文件来告诉 CI 要对你的项目做什么。它位于仓库的根目录下。

仓库一旦收到任何推送,GitLab 将立即查找 .gitlab-ci.yml 文件,并根据文件的内容在 Runner 上启动作业。

下面是一个 Ruby 项目配置例子:

image: "ruby:2.5"  before_script:  - apt-get update -qq && apt-get install -y -qq sqlite3 libsqlite3-dev nodejs  - ruby -v  - which ruby  - gem install bundler --no-document  - bundle install --jobs $(nproc)  "${FLAGS[@]}"  rspec:  script:  - bundle exec rspec  rubocop:  script:  - bundle exec rubocop

上面的例子中,定义里两个作业,分别是 rspec 和 rubocop,在每个作业开始执行前,要先执行 before_script 下的命令。

推送.gitlab-ci.yml 到GitLab
git add .gitlab-ci.yml  
git commit -m "Add .gitlab-ci.yml"   
git push origin master
配置一个Runner
在 GitLab 中,Runner 运行你定义在 .gitlab-ci.yml 中的作业(job)。

一个 Runner 可以是一个虚拟机、物理机、Docker 容器,或者一个容器集群。

GitLab 与 Runner 之间通过 API 进行通信,因此只需要 Runner 所在的机器有网络并且可以访问 GitLab 服务器即可。

你可以去 Settings ➔ CI/CD 看是否已经有 Runner 关联到你的项目,设置 Runner 简单又直接。

https://tc.ctq6.cn/tc/20240707074511.png

查看Pipeline和Jobs的状态

在成功配置 Runner 以后,你应该可以看到你最近的提交的状态。

https://tc.ctq6.cn/tc/20240707074604.png

为了查看所有 jobs,你可以去 Pipelines ➔ Jobs 页面。

https://tc.ctq6.cn/tc/20240707074634.png

通过点击作业的状态,你可以看到作业运行的日志。

https://tc.ctq6.cn/tc/20240707074701.png

回顾一下:

  • 首先,定义 .gitlab-ci.yml 文件。在这个文件中就定义了要执行的 job 和命令
  • 接着,将文件推送至远程仓库
  • 最后,配置 Runner,用于运行 job
示例

使用GitLab CI/CD 部署衣蛾Spring Boot 应用

image: java:8  stages:  - build  - deploy  before_script:  - chmod +x mvnw  build:  stage: build  script: ./mvnw package  artifacts:  paths:  - target/demo-0.0.1-SNAPSHOT.jar  production:  stage: deploy  script:  - curl --location "https://cli.run.pivotal.io/stable?release=linux64-binary&source=github" | tar zx  - ./cf login -u $CF_USERNAME -p $CF_PASSWORD -a api.run.pivotal.io  - ./cf push  only:  - master

管道内部分为2个阶段,可以查看每个阶段有几个作业在运行

构建 -> 部署

并且部署阶段绑定了分支,在构建之前,定义预操作,执行脚本,没有匹配到的分支将不会执行部署阶段。

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

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

相关文章

npm 安装报错(已解决)+ 运行 “wue-cli-service”不是内部或外部命令,也不是可运行的程序(已解决)

首先先说一下我这个项目是3年前的一个项目了,中间也是经过了多个人的修改惨咋了布置多少个人的思想,这这道我手里直接npm都安装不上,在网上也查询了多种方法,终于是找到问题所在了 问题1: 先是npm i 报错在下面图片&…

海康视频WEB插件

引入相关依赖 index.html <script src"/video/web-control_1.2.5.min.js"></script> <script src"/video/jquery-1.12.4.min.js" type"text/javascript"></script> <script src"/video/jsencrypt.min.js" …

嵌入式C/C++、FreeRTOS、STM32F407VGT6和TCP:智能家居安防系统的全流程介绍(代码示例)

1. 项目概述 随着物联网技术的快速发展,智能家居安防系统越来越受到人们的重视。本文介绍了一种基于STM32单片机的嵌入式安防中控系统的设计与实现方案。该系统集成了多种传感器,实现了实时监控、报警和远程控制等功能,为用户提供了一个安全、可靠的家居安防解决方案。 1.1 系…

【深度学习】LLaMA-Factory 大模型微调工具, 大模型GLM-4-9B Chat ,微调与部署 (2)

资料&#xff1a; https://github.com/hiyouga/LLaMA-Factory/blob/main/README_zh.md https://www.53ai.com/news/qianyanjishu/2015.html 代码拉取&#xff1a; git clone https://github.com/hiyouga/LLaMA-Factory.git cd LLaMA-Factorybuild镜像和执行镜像&#xff1a; …

“机器说人话”-AI 时代的物联网

万物互联的物联网愿景已经提了许多年了&#xff0c;但是实际效果并不理想&#xff0c;除了某些厂商自己的产品生态中的产品实现了互联之外&#xff0c;就连手机控制空调&#xff0c;电视机和调光灯都没有实现。感觉小米做的好一点&#xff0c;而华为的鸿蒙的全场景&#xff0c;…

【云原生】Kubernetes 中的 PV 和 PVC 介绍、原理、用法及实战案例分析

✨✨ 欢迎大家来到景天科技苑✨✨ &#x1f388;&#x1f388; 养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; &#x1f3c6; 作者简介&#xff1a;景天科技苑 &#x1f3c6;《头衔》&#xff1a;大厂架构师&#xff0c;华为云开发者社区专家博主&#xff0c;…

nginx漏洞修复 ngx_http_mp4_module漏洞(CVE-2022-41742)【低可信】 nginx版本升级

风险描述&#xff1a; Nginx 是一款轻量级的Web服务器、反向代理服务器。 Nginx 的受影响版本中的ngx _http_mp4_module模块存在内存越界写入漏洞&#xff0c;当在配置中使用 mp4 directive时&#xff0c;攻击者可利用此漏洞使用使用ngx_http_mp4_module模块处理特制的音频或视…

Hive分布式SQL计算平台

Hive分布式SQL计算平台 一、Hive 概述二、Hive架构三、Hive客户端 1、Hive有哪些客户端可以使用2、Hive第三方客户端 四、Hive使用语法 1、数据库操作2、内部表&#xff0c;外部表3、数据的导入与导出4、分区表5、分桶表6、复杂类型操作7、数据抽样8、Virtual Columns 虚拟列9…

springboot 项目整合 AI (文心一言)

百度智能云网址&#xff1a;https://cloud.baidu.com/?fromconsole 注册——个人认证——登录成功 第一步&#xff1a;点击千帆大模型平台 ​ 第二步&#xff1a;点击应用接入——创建应用 ​ 第三步&#xff1a;点击接口文档——API列表——可以点击指定模型进行查看调…

Spring Boot集成Activity7实现简单的审批流

由于客户对于系统里的一些新增数据&#xff0c;例如照片墙、照片等&#xff0c;想实现上级逐级审批通过才可见的效果&#xff0c;于是引入了Acitivity7工作流技术来实现&#xff0c;本文是对实现过程的介绍讲解&#xff0c;由于我是中途交接前同事的这块需求&#xff0c;所以具…

DolphinDB Web 端权限管理:可视化操作指南

在现代数据库管理中&#xff0c;高效和直观的权限管理对于用户的数据安全是至关重要的。过去 DolphinDB 用户需要依赖系统脚本来管理用户和权限&#xff0c;这对于缺乏技术背景的管理员来说既复杂又容易出错。 为了提升用户体验和操作效率&#xff0c;DolphinDB 目前在 Web 上…

【ACM出版】2024集成电路设计与集成系统国际研讨会(ICDIS2024)

会议日期&#xff1a;2024年11月22-24日 会议地点&#xff1a;中国-厦门 会议官网&#xff1a;https://www.iaast.cn/meet/home/Bx122dOo 【大会主席】 Sri Niwas Singh&#xff0c;印度信息技术与管理研究所 【主讲嘉宾】 【论文出版与检索】 大会即日起围绕主题征集会…

Beyond Compare 5 for Mac/Win:高效文件同步与对比的专业工具

Beyond Compare 5是一款专为Mac和Windows用户设计的强大文件同步与对比软件&#xff0c;由Scooter Software精心打造。它凭借卓越的功能和易用性&#xff0c;在软件开发、系统管理和数据同步领域广受好评。 这款软件支持多种文件类型的对比&#xff0c;包括文件夹、文本文件、…

(7) cmake 编译C++程序(二)

文章目录 概要整体代码结构整体代码小结 概要 在ubuntu下&#xff0c;通过cmake编译一个稍微复杂的管理程序 整体代码结构 整体代码 boss.cpp #include "boss.h"Boss::Boss(int id, string name, int dId) {this->Id id;this->Name name;this->DeptId …

开发环境搭建

1、Ubuntu 系统设置 root 用户密码 新安装的ubuntu没有设置 root 用户密码,打开终端,输入 sudo passwd root 执行命令后依次输入密码 2、虚拟机设置网络适配器 3、Ubuntu 系统下搭建 FTP 服务器 sudo apt-get update sudo apt-get install vsftpd sudo apt-get install vim…

如何切换网络IP地址?IP切换的应用与方法

随着互联网的发展和普及&#xff0c;我们日常生活中的各种操作和通讯越来越依赖互联网。互联网上存在的一些问题和限制使得更换IP地址成为必要的步骤。下面我们将探讨在互联网业务中&#xff0c;需要更换IP地址的原因与方法。 一、IP轮换的应用 解决访问限制&#xff1a;解决访…

HTTPServer改进思路1

Nginx源码思考项目改进 架构模式 事件驱动架构(EDA&#xff09;用于处理大量并发连接和IO操作 优点&#xff1a;高效处理大量并发请求&#xff0c;减少线程切换和阻塞调用技术实现&#xff1a;直接使用EPOLL&#xff0c;参考Node.js的http服务器 网络通信 协议&#xff1a;HTT…

Spark_Oracle_II_Spark高效处理Oracle时间数据:通过JDBC桥接大数据与数据库的分析之旅

接前文背景&#xff0c; 当需要从关系型数据库&#xff08;如Oracle&#xff09;中读取数据时&#xff0c;Spark提供了JDBC连接功能&#xff0c;允许我们轻松地将数据从Oracle等数据库导入到Spark DataFrame中。然而&#xff0c;在处理时间字段时&#xff0c;可能会遇到一些挑战…

上手实测!绿联新系统虚拟机真的卡到爆?!

上手初体验 入手绿联DXP2800也有一段时间了,先说一下这段时间的使用体验吧。刚收到设备的时候确实遇到了不少的问题,如网友普遍反映的UGREENlink服务无法连接、AI占用CPU资源、设备高温等问题我都遇到了 目前更新固件的频率已提升至约一两天一次。尽管仍存在一些小BUG,但不影响…

银行业务知识全篇(财务知识、金融业务知识)

第一部分 零售业务 1.1 储蓄业务 4 1.1.1 普通活期储蓄(本外币) 4 1.1.2 定期储蓄(本外币) 5 1.1.3 活期一本通 9 1.1.4 定期一本通 10 1.1.5 电话银行 11 1.1.6 个人支票 11 1.1.7 通信存款 13 1.1.8 其他业务规…