【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.mzph.cn/news/873501.shtml

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

相关文章

HarmonyOS页面跳转和页面间传值

IndexPage 定义一个参数类 export class RouterParams {src:stringconstructor(str:string) {this.src str} }点击按钮后,将创建的RouterParams 对象传递到第二页 Button($r(app.string.next)).fontSize(16).width(300).height(50).backgroundColor($r(app.color.…

Android 视频音量图标

attrs.xml <?xml version"1.0" encoding"utf-8"?> <resources><!--图标颜色--><attr name"ijkSolid" format"color|reference" /><!--喇叭底座宽度--><attr name"ijkCornerWidth" form…

WINUI或WPF灵活使用样式、控件模板、自定义控件、用户控件

在WINUI与WPF 中&#xff0c;控件模板&#xff08;ControlTemplate&#xff09;、样式&#xff08;Style&#xff09;、自定义控件&#xff08;CustomControl&#xff09;和用户控件&#xff08;UserControl&#xff09;都是构建复杂和灵活用户界面的重要工具&#xff0c;但它们…

【electron6】浏览器实时播放PCM数据

pcm介绍&#xff1a;PCM&#xff08;Puls Code Modulation&#xff09;全称脉码调制录音&#xff0c;PCM录音就是将声音的模拟信号表示成0,1标识的数字信号&#xff0c;未经任何编码和压缩处理&#xff0c;所以可以认为PCM是未经压缩的音频原始格式。PCM格式文件中不包含头部信…

ForCloud全栈安全体验,一站式云安全托管试用 开启全能高效攻防

对于正处于业务快速发展阶段的企业&#xff0c;特别是大型央国企而言&#xff0c;日常的安全部署和运营管理往往横跨多家子公司&#xff0c;所面临的挑战不言而喻。尤其是在面对当前常态化的大型攻防演练任务时&#xff0c;难度更是呈“几何级数”上升&#xff1a; 合规难 众…

安卓 mvp 的架构的详细介绍

MVP 架构介绍 MVP&#xff08;Model-View-Presenter&#xff09;是一种软件架构模式&#xff0c;常用于构建用户界面&#xff08;UI&#xff09;。它将应用程序的逻辑划分为三个部分&#xff1a;Model、View 和 Presenter。MVP 的主要目标是分离视图和业务逻辑&#xff0c;使代…

使用github actions构建多平台electron应用

1. 创建electron项目 使用pnpm创建项目 pnpm create quick-start/electron 2. 修改electron-builder.yml文件 修改mac的target mac:target:- target: dmgarch: universal 3. 添加workflow 创建 .github/workflows/main.yml 文件 name: Build/release Electron appon:work…

二、原型模式

文章目录 原型模式1 基本介绍2 实现方式深浅拷贝目标2.1 使用 Object 的 clone() 方法2.1.1 代码2.1.2 特性2.1.3 实现深拷贝 2.2 在 clone() 方法中使用序列化2.2.1 代码 2.2.2 特性 3 实现的要点4 Spring 中的原型模式5 原型模式的类图及角色5.1 类图5.1.1 不限制语言5.1.2 在…

8、添加第三方包

目录 1、安装Django Debug Toolbar Django的一个优势就是有丰富的第三方包生态系统。这些由社区开发的包&#xff0c;可以用来快速扩展应用程序的功能集 1、安装Django Debug Toolbar Django Debug Toolbar位于名列前三的第三方包之一 这是一个用于调试Debug Web应用程序的有…

小程序-5(vant组件+全局数据共享+分包+tabBar案例)

目录 1.使用npm包 小程序对npm的支持和限制 使用vant组件 使用CSS变量定制主题样式 API的promise化 2.全局数据共享 小程序中的全局数据共享方案 安装MobX相关的包 创建MobX的store实例 将Store中的成员绑定到页面中 在页面上使用Store中的成员 将Store中的成员绑定…

Python——使用Seaborn钻石数据可视化分析(2)

续 Python——使用Seaborn钻石数据可视化分析(1) 目录 📈 4、非数值变量描述性统计分析 1️⃣ 柱状图——分析钻石切工的情况 📍 sns.countplot —— 绘制柱状图、条形图 2️⃣ 箱线图——分析不同切工的钻石的价格情况 📍 sns.barplot —— 不同分类变量之间的数…

【论文阅读】Mamba: Linear-Time Sequence Modeling with Selective State Spaces

Mamba: Linear-Time Sequence Modeling with Selective State Spaces 论文&#xff1a;[2312.00752] Mamba: Linear-Time Sequence Modeling with Selective State Spaces 作者&#xff1a;Albert Gu 和 Tri Dao&#xff0c;分别来自卡内基梅隆大学机器学习系和普林斯顿大学计…

HarmonyOS ArkUi 唤起系统APP:指定设置界面、浏览器、相机、拨号界面、选择通讯录联系人

效果&#xff1a; 完整工具类&#xff1a; import { common, Want } from kit.AbilityKit; import { BusinessError } from kit.BasicServicesKit; import { call } from kit.TelephonyKit; import { promptAction } from kit.ArkUI; import { contact } from kit.Contacts…

docker 部署wechatbot-webhook 并获取接口实现微信群图片自动保存到chevereto图库等

功能如图&#xff1a; docker部署 version: "3" services:excalidraw:image: dannicool/docker-wechatbot-webhook:latestcontainer_name: wechatbot-webhookdeploy:resources:limits:cpus: 0.15memory: 500Mreservations:cpus: 0.05memory: 80Mrestart: alwayspor…

RabbitMQ学习实践二:MQ的实现

文章是本人在学习springboot实现消息队列功能时所经历的过程的记录&#xff0c;仅供参考&#xff0c;如有侵权请随时指出。 参考文章地址&#xff1a; RabbitMQ安装与入门_rabbitmq win11配置-CSDN博客 RabbitMQ入门到实战一篇文章就够了-CSDN博客 RabbitMQ系列&#xff08…

走进数组的奇妙之旅

引言&#xff1a; 在前几篇文章中&#xff0c;我们深入探讨了函数的奥秘。在讲述函数知识的过程中&#xff0c;我们邂逅了一个新的概念&#xff0c;你或许还记得在演示 strcpy函数时&#xff0c;出现的这行代码&#xff1a;char1[20]{0};。当时&#xff0c;你是否感到好奇&…

scp免密复制文件

实现在服务器A和服务器B之间使用scp命令免密互相传输文件 1. 在服务器A中免密复制到服务器B 1.1 生成服务器A的公钥私钥 #在服务器A中执行 ssh-keygen -t rsa -P ""命令执行完毕会在服务器A的 ~/.ssh 目录下生成两个文件&#xff1a;id_rsa 和 id_rsa.pub 1.2 拷…

《Towards Black-Box Membership Inference Attack for Diffusion Models》论文笔记

《Towards Black-Box Membership Inference Attack for Diffusion Models》 Abstract 识别艺术品是否用于训练扩散模型的挑战&#xff0c;重点是人工智能生成的艺术品中的成员推断攻击——copyright protection不需要访问内部模型组件的新型黑盒攻击方法展示了在评估 DALL-E …

外企跨境传输应该如何做到安全有效的文件管控?

跨境文件传输并非易事&#xff0c;它面临着多重挑战&#xff0c;尤其是数据安全、隐私保护以及法律法规遵守等问题。所以如何做到安全有效的文件管控&#xff0c;却是一个让许多企业头疼的问题。小编今天将说说跨境文件传输面临的主要挑战&#xff0c;并讨论如何选择合适的加密…

【深度学习】PyTorch框架(3):优化与初始化

1.引言 在本文中&#xff0c;我们将探讨神经网络的优化与初始化技术。随着神经网络深度的增加&#xff0c;我们会遇到多种挑战。最关键的是确保网络中梯度流动的稳定性&#xff0c;否则可能会遭遇梯度消失或梯度爆炸的问题。因此&#xff0c;我们将深入探讨以下两个核心概念&a…