Gitlab CI/CD概述

news2025/3/12 9:47:14

前言

CI/CD 是一种持续开发软件的方法,可以不断的进行构建、测试和部署代码迭代更改。这种迭代有助于减少基于错误或失败的版本进行开发新代码的可能性。使用这种方法,从新代码开发到部署,可以减少人工干预甚至不用干预。
达到持续的方法主要是:持续集成持续交付持续部署

Gitlab CI/CD

Gitlab CI/CD 也就是 Gitlab 提供了上面的 CI/CD 能力,可以进行持续集成,持续交付和持续部署。请添加图片描述
上面 Gitlab CI/CD 工作流程图,展示了主要的步骤。在实际项目中,CI 主要是提交或合并代码的时候触发,负责一些基本规则的检查,如果检查遇到失败,那么回滚或修改代码后再提交或合并,降低代码风险;CD 主要手动的触发,在CI的基础上,还负责功能检查,如果功能符合验收标准,那么就可以交付或部署。

如果更进一步看这个工作流程,可以看到 GitLab 在 DevOps 生命周期的每个阶段提供的功能:
在这里插入图片描述

Pipelines

Pipeline 是 CI/CD 重要组成之一。 也就是流水线,包括:

  • Jobs:也就是任务,定义了该做什么,比如:编译和测试代码;
  • Stages:也就是阶段,定义什么时候执行 Jobs,比如:在编译代码的阶段之后进入运行测试的阶段。

Job 是由 Runner 来执行,如果有足够多的并发 Runner,同一个 Stage 的 Job 可以并行执行。

如果同一个 Stage 中的所有 Job 都执行成功,Pipeline 就会进入下一个 Stage;如果一个 Stage 中的 任何一个 Job之 执行失败,Pipeline 就不会进入下一个 Stage,提前结束。

通常,Pipeline 是自动执行的,一旦创建就不需要干预。但是,有时也可以手动与 Pipeline 交互。

一般 Pipeline 包含四个 Stage(阶段),按照以下顺序执行:

  1. 一个 build(构建) 阶段,包含一个 compile 的 job;
  2. 一个 test(测试)阶段,包含两个 test1 和 test2 的 job;
  3. 一个 staging(预发) 阶段,包含一个 deploy to stage 的 job;
  4. 一个 production(生产)阶段,包含一个 deploy-to-prod 的 job。

Jobs

Job 其实就是任务,是 GitLab CI 系统中可以独立控制并运行的最小单位

  • 用约束来定义,说明在什么条件下应该执行这些约束;
  • 可以有任意名称,但是至少包含 script 元素;
  • 对定义多少没有限制。

Variables

为job执行提供的环境变量,主要分两类:

  1. CI/CD 提供了预定义好的环境变量
  2. 自定义环境变量

Cache and artifacts

cache 是 Job 下载并保存的一个或多个文件。使用相同 cahce 的后续 Job 不必再次下载文件,因此执行速度更快。即保留job结果

cache:

  1. 使用 cache 来定义每个 Job 的缓存;
  2. 后续的 Pipeline 可以使用缓存;
  3. 如果依赖相同的,同一个 Pipeline 的后续 Job 可以使用缓存;
  4. 不同的项目不能共用缓存。

artifacts:

  1. 定义每个 Job 的产物;
  2. 同一个 Pipeline 的后面 Stage 中 的后续 Job 可以使用前面 Job 的产物;
  3. 不同的项目不能共享产物;
  4. 默认情况下,产物在30天后过期。可以自定义过期时间;
  5. 如果启用了“保留最新产物”,则最新产物不会过期;
  6. 使用依赖项来控制哪些 Job 获取 产物。

cache 和 artifacts 的区别:

  1. 对依赖项使用 cache,比如从网络上下载的包。缓存存储在安装 GitLab Runner的地方,如果启用了分布式缓存,则将其安装并上传载到S3;
  2. 使用 artifacts 在 stage 之间传递中间构建结果。artifacts 由 Job 生成,存储在GitLab中,可以下载;
  3. artifacts 和 cache 都定义了它们相对于项目目录的路径,并且不能链接到项目目录之外的文件。

gitlab环境搭建

gitlab环境,主要分成两个部份,gitlab-ce(管理器)和gitlab-runner(执行器)。

## gitlab-ce安装
sudo apt-get update
sudo apt-get install -y curl openssh-server ca-certificates
curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.deb.sh | sudo bash
sudo apt-get install gitlab-ce

## 修改配置文件, 将external_url改成你可访问的地址
sudo vim /etc/gitlab/gitlab.rb
> external_url 'http://192.168.xx.xxx:6001'

## 重新加载配置,并重启动
sudo gitlab-ctl reconfigure
sudo gitlab-ctl restart

## 查看运行状态
sudo gitlab-ctl status

## 查看运行日志
sudo gitlab-ctl tail

现在可以通过刚配置好的http://192.168.xx.xxx:6001进行访问了。

GitLab初次安装后,登录GitLab网页的管理员账号和密码各是什么?

  • 管理员账号的账号名为 root,
  • 密码在一个自动生成的文件 /etc/gitlab/initial_root_password 中(密码不会含空格),且会在 24 小时后自动被删除。
## 安装runner
sudo curl --output /usr/local/bin/gitlab-runner "https://gitlab-runner-downloads.s3.amazonaws.com/latest/binaries/gitlab-runner-darwin-arm64"

## 授权
sudo chmod +x /usr/local/bin/gitlab-runner

##  使用root,安装并启动
sudo su 
cd ~
gitlab-runner install --user root
gitlab-runner start

## 启动完后注册服务
## 通过 Gitlab项目首页=> setting => CI/CD => Runners => Project runners 获取token
## 填写之前gitlab-ce设置的external_url
sudo gitlab-runner register

## 激活
sudo gitlab-runner verify

在这里插入图片描述
编写.gitlab-ci.yml配置文件

stages:          # List of stages for jobs, and their order of execution
  - build
  - test
  - deploy

build-job:       # This job runs in the build stage, which runs first.
  stage: build
  tags:          ## 加上tag
    - sss
  script:
    - echo "Compiling the code..."
    - echo "Compile complete."

unit-test-job:   # This job runs in the test stage.
  stage: test    # It only starts when the job in the build stage completes successfully.
  tags:
    - sss
  script:
    - echo "Running unit tests... This will take about 60 seconds."
    - sleep 60
    - echo "Code coverage is 90%"

lint-test-job:   # This job also runs in the test stage.
  stage: test    # It can run at the same time as unit-test-job (in parallel).
  tags:
    - sss
  script:
    - echo "Linting code... This will take about 10 seconds."
    - sleep 10
    - echo "No lint issues found."

deploy-job:      # This job runs in the deploy stage.
  stage: deploy  # It only runs when *both* jobs in the test stage complete successfully.
  tags:
    - sss
  environment: production
  script:
    - echo "Deploying application..."
    - echo "Application successfully deployed."

在这里插入图片描述

主要参考

《Gitlab CI/CD 简单介绍》
《ubuntu 安装 gitlab》
《Gitlab-ci:从零开始的前端自动化部署》

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

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

相关文章

Python实例属性和实例方法_类对象、类属性、类方法、静态方法

一、实例属性 实例属性是从属于实例对象的属性,也称为“实例变量”。他的使用有如下几个要点: 实例属性一般在__init__()方法中通过如下代码定义: self.实例属性名 初始值 在本类的其他实例方法中,也是通过self进行访问&#x…

QGIS下载天地图瓦片数据

说明 介绍利用QGIS下载天地图瓦片数据。 关键字:window、QGIS、天地图 环境准备 QGIS版本为3.28.3 基本步骤 一、在Browser面板中找到XYZ Tiles 二、New Connection 参数设置 天地图参数 name:如"天地图影像"url :https://t5.tianditu.gov.cn/DataServer?T=…

U-Mail邮件系统:严防数据泄露 保障企业数据安全

在数字经济时代,数据已经成为企业的核心生产要素,也由此滋生了牟取暴利的黑色产业链,企业数据泄露事件有增无减。根据IdentifyTheft Research Center中心的数据显示,2022年世界范围内的数据泄露事件比2021年增长了14%。其中&#…

chatgpt赋能python:Python如何得出结果:从基础语法到高级算法

Python如何得出结果:从基础语法到高级算法 作为一种流行的编程语言,Python被广泛应用于数据分析、人工智能、Web开发等领域。但是,Python也是一种非常值得学习的SEO工具,它可以帮助你得出有关网站排名、竞争对手分析、关键词选择…

JavaScript-Vue

2 Vue 2.1 Vue概述 通过我们学习的htmlcssjs已经能够开发美观的页面了,但是开发的效率还有待提高,那么如何提高呢?我们先来分析下页面的组成。一个完整的html页面包括了视图和数据,数据是通过请求 从后台获取的,那么…

游览器获取用户位置信息,不同游览器获取位置信息不一致

问题 游览器获取用户位置信息&#xff0c;不同游览器获取位置信息不一致 详细问题 对于下述代码 <!DOCTYPE html> <html> <head><title>获取用户经纬度</title><script>function getLocation() {if (navigator.geolocation) {navigato…

数据库原理

做应用开发的同学常常觉得数据库由DBA运维&#xff0c;自己会写SQL就可以了&#xff0c;数据库原理不需要学习。其实即使是写SQL也需要了解数据库原理&#xff0c;比如我们都知道&#xff0c;SQL的查询条件尽量包含索引字段&#xff0c;但是为什么呢&#xff1f;这样做有什么好…

第三章Java锁—基础

文章目录 乐观锁和悲观锁悲观锁悲观锁的实现方式 乐观锁乐观锁的实现方式版本号实现的大致流程 8锁案例弄清synchronized锁了什么3个体现同步方法和同步块&#xff0c;哪个是更好的选择 字节码角度分析synchronized实现文件反编译技巧synchronized同步代码块synchronized普通同…

pikachu靶场-Over Permission

Over Permission&#xff08;越权&#xff09; 用户A 的权限小于用户B 的权限&#xff0c;此时用用户 A 的权限去操作用户 B 的数据&#xff0c;如果能够操作成功&#xff0c;就称之为越权操作。 越权漏洞一般容易出现在权限页面&#xff08;需要登录的页面&#xff09;增、删…

文件系统原理

文件及硬盘管理是计算机操作系统的重要组成部分&#xff0c;让微软走上成功之路的正是微软最早推出的个人电脑PC操作系统&#xff0c;这个操作系统就叫DOS&#xff0c;即Disk Operating System&#xff0c;硬盘操作系统。我们每天使用电脑都离不开硬盘&#xff0c;硬盘既有大小…

黑龙江二造开始报名!文件指出建设单位对现场人员配备达标负首责

注意&#xff01;2023年黑龙江二级造价考试报名时间公布&#xff01;&#xff01;&#xff01;可以开始报名&#xff01; ✨考试时间&#xff1a;7月9日 ✨报名时间&#xff1a;6月6日—6月14日 ✨缴费时间&#xff1a;6月6日—6月16日 ✨打印准考证时间&#xff1a;7月4日&am…

程序运行原理

程序是如何运行起来的 软件被开发出来&#xff0c;是文本格式的代码&#xff0c;这些代码通常不能直接运行&#xff0c;需要使用编译器编译成操作系统或者虚拟机可以运行的代码&#xff0c;即可执行代码&#xff0c;它们都被存储在文件系统中。不管是文本格式的代码还是可执行…

ChatGPT付费创作系统V2.0.2独立版+小程序安装教程

ChatGPT付费创作系统V2.0.2独立版播播资源测试了下相比&#xff0c;本版核心WEB端进行升级优化&#xff0c;前端增加了创作、模拟、使用帮助等选项&#xff0c;小程序端相比上一版无大的变化。体验下来问答速度感觉体验更好。小程序端有更新请对应开发工具更新上传&#xff0c;…

HAL库记录-SDRAM的使用

正点原子--阿波罗开发板STM32F429IGT6 CLK 时钟信号&#xff0c;在该时钟的上升沿采集输入信号 CKE 时钟使能&#xff0c;禁止时钟时&#xff0c;SDRAM 会进入自刷新模式 CS# 片选信号&#xff0c;低电平有效 RAS# 行地址选通信号&#xff…

剑指offer57.和为s的两个数字

双指针i从左往右&#xff0c;j从右往左&#xff0c;如果大于目标值&#xff0c;j往左走否则i往右走&#xff0c;直到等于目标值 class Solution {public int[] twoSum(int[] nums, int target) {int[] res new int[2];int i 0; int j nums.length-1;int sum nums[i] nums…

docker指令

镜像命令 镜像命令 命令描述docker images php查看名字为php的镜像docker images查看所有镜像docker search搜索镜像docker pull 镜像名:tag 拉取镜像docker rmi php删除php镜像 (保存php镜像到目录) docker image save php > D:\phpstudy_pro\WWW\docker\php.tgz 或者 …

【利用AI让知识体系化】简要了解面向对象编程设计

文章目录 I. 面向对象编程简介面向对象编程的定义与发展历程面向对象编程的优点和特点面向对象和面向过程和面向函数式编程之间的对比 II. 面向对象编程的基本概念类和对象抽象和封装继承和多态封装、继承和多态之间的一些对比 III. 面向对象编程设计原则单一职责原则&#xff…

如何搭建高可用redis架构?

题记 Redis 是一个开源的使用 ANSI C 语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value 数据库&#xff0c;并提供多种语言的 API。 如今&#xff0c;互联网业务的数据正以更快的速度在增长&#xff0c;数据类型越来越丰富&#xff0c;这对数据处理的速度和能力提…

chatgpt赋能python:Python怎么建网站的SEO

Python怎么建网站的SEO 介绍 Python是一种流行的编程语言&#xff0c;其灵活性和可靠性使其成为了许多网站开发人员的首选语言之一。Python可以用于构建各种类型的网站&#xff0c;包括电子商务和企业级应用程序等。但是&#xff0c;构建一个网站是不够的&#xff0c;您还需要…

力扣刷题记录--二叉树相关问题

目录 二叉树的前中后序遍历递归方法迭代方法&#xff08;未统一写法&#xff09;前序迭代中序迭代后序迭代 迭代方法&#xff08;统一模板&#xff09;二叉树遍历LeetCode 144. 二叉树的前序遍历LeetCode 145. 二叉树的后序遍历LeetCode 94. 二叉树的中序遍历 n叉树的遍历LeetC…