CI/CD基础知识
什么是CI/CD
CI:持续集成,开发人员频繁地将代码集成到主干(主分支)中每次集成都通过自动化构建和测试来验证,从而尽早发现集成错误,常用的CI工具包括Jenkins、Travis CI、CircleCI、GitLab CI等
CD: 持续交付或持续部署,持续交付是指在持续集成的基础上,自动化将代码部署到生产环境或预生产环境的过程。它确保代码在任何时候都可以安全地部署到生产环境。自动化部署:通过自动化脚本将应用程序部署到服务器,减少手动操作的错误。可随时发布:代码经过测试后,可以随时选择将其发布到生产环境。环境一致性:确保开发、测试和生产环境的一致性,以减少环境差异带来的问题。工具:常用的持续交付工具包括Spinnaker、Octopus Deploy、AWS CodeDeploy等。
1、常用的CI/CD工具
| 特性 | GitLab CI/CD | Travis CI | Jenkins |
|---|---|---|---|
| 部署模式 | 内置于 GitLab(SaaS/自托管) | 纯 SaaS(无自托管版) | 自托管为主(支持云托管) |
| 配置方式 | .gitlab-ci.yml 文件 | .travis.yml 文件 | Jenkinsfile(Groovy DSL) |
| 执行环境 | GitLab Runner(可自定义) | 预置的虚拟机环境 | Agent/Node 自由扩展 |
| 依赖管理 | 自带 Artifact 存储 | 有限缓存机制 | 需插件(如 Nexus 集成) |
| 网络拓扑 | 原生 Kubernetes 集成 | 固定环境无集群管理 | 支持混合云集群调度 |
第三方服务集成
| 服务类型 | GitLab CI | Travis CI | Jenkins |
|---|---|---|---|
| 代码质量 | 内置 SAST/DAST 扫描 | 需通过插件扩展 | 需安装 SonarQube 插件 |
| 通知渠道 | 20+ 内置通知方式 | 基础邮件/Slack | 500+ 通知插件 |
| 安全扫描 | 集成 Dependency Scanning | 依赖第三方脚本 | 需配置安全工具链 |
| K8s 集成 | 原生支持 Auto DevOps | 需手动配置 kubectl | 通过 Kubernetes 插件 |
2、CI/CD中的jenkins
1、jenkins的基本知识
Jenkins是一款开源的自动化服务器,广泛用于持续集成(CI)和持续交付(CD)过程。它提供了一系列功能,帮助开发团队自动化软件构建、测试和部署。
| 主要功能 | 持续集成:自动化构建和测试代码,确保每次提交都能快速反馈 |
| 插件支持 | Jenkins有丰富的插件生态系统,支持与各种工具和技术集成如Git、Maven、Docker、K8s等 |
| 构建自动化 | 支持多种构建工具和语言,能够自动化构建过程,生成可执行文件或其他工件。 |
| 分布式构建 | 支持在多台机器上并行构建,提升构建效率,适用于大型项目。 |
| 可视化界面 | 提供用户友好的Web界面,方便用户配置和监控构建任务 |
| 定时构建 | 支持定时触发构建任务,能够根据预设的时间表自动执行 |
| 通知和报告 | 提供构建状态通知功能,可以通过电子邮件、Slack等方式发送构建结果 |
| 集成测试 | 支持自动化测试框架,能够在构建过程中运行单元测试和集成测试 |
优势:开源和免费:灵活性和可扩展性:社区支持:跨平台支持:提高开发效率:快速反馈:
2、在jenkins如何配置实现CI/CD
| 一:安装Jenkins | 1、下载和安装Jenkins:2、启动Jenkins并完成初始配置。3、安装必要的插件:git、docker、“Pipeline”插件(通常默认已安装) |
| 二:创建流水线项目 | 新建流水线项目:在Jenkins主页,点击“新建任务”。输入项目名称,选择“流水线”,然后点击“确定”。 配置流水线:在项目配置页面,找到“流水线”部分。 |
| 三:编写流水线脚本 | Jenkins支持两种类型的流水线:声明式流水线和脚本式流水线。 |
| 四:保存和构建 | 保存配置:完成流水线脚本的编写后,点击“保存”。 |
| 五:监控和通知 | 监控构建状态:Jenkins提供了实时的构建日志和状态监控,可以查看每个阶段的执行情况。 |
1、实现重点
- Pipeline脚本
在Jenkins中,Pipeline脚本主要有两种类型:声明式流水线(Declarative Pipeline)和脚本式流水线(Scripted Pipeline)。
| 声明式流水线(Declarative Pipeline) | 脚本式流水线(Scripted Pipeline) |
| 易读性:声明式流水线的语法更为简洁和直观。 结构化:使用固定的结构,便于理解和维护。 内置功能:提供了一些内置的功能,如post、options等,简化了常见的任务。 | 灵活性:使用Groovy语言编写,提供了更大的灵活性和控制能力 复杂逻辑:适合需要复杂逻辑和条件判断的场景 不规则结构:没有固定的结构,可能会导致可读性降低,尤其是对于大型项目 |
| 组成元素: pipeline:整个流水线的定义。 | 组成元素: node:定义在某个代理节点上执行的代码块。 stage:定义流水线中的一个阶段。 steps:在每个阶段中执行的具体操作。 try-catch-finally:用于处理异常和控制流程。 environment:定义环境变量。 |
声明式流水线
pipeline {agent anyenvironment {// 定义环境变量NODE_ENV = 'production'}stages {stage('Checkout') {steps {// 从Git仓库检出代码git url: 'https://github.com/your-repo.git', branch: 'main'}}stage('Build') {steps {// 执行构建命令sh 'npm install'sh 'npm run build'}}stage('Code Quality') {steps {// 运行代码质量检查sh 'npm run lint'}}stage('Test') {steps {// 执行单元测试sh 'npm test'}}stage('Deploy') {steps {script {// 根据环境变量决定部署目标if (NODE_ENV == 'production') {sh 'scp -r dist/* user@production-server:/path/to/deploy'} else {sh 'scp -r dist/* user@staging-server:/path/to/deploy'}}}}}post {success {// 构建成功后的操作echo 'Build succeeded!'}failure {// 构建失败后的操作echo 'Build failed!'}always {// 无论成功与否都执行的操作cleanWs() // 清理工作区}}
}
脚本式流水线
node {// 定义环境变量def NODE_ENV = 'production'stage('Checkout') {echo 'Checking out code...'// 从Git仓库检出代码git url: 'https://github.com/your-repo.git', branch: 'main'}stage('Build') {echo 'Building the application...'// 执行构建命令sh 'npm install'sh 'npm run build'}stage('Code Quality') {echo 'Running code quality checks...'// 运行代码质量检查sh 'npm run lint'}stage('Test') {echo 'Running tests...'// 执行单元测试sh 'npm test'}stage('Deploy') {echo 'Deploying the application...'// 根据环境变量决定部署目标if (NODE_ENV == 'production') {sh 'scp -r dist/* user@production-server:/path/to/deploy'} else {sh 'scp -r dist/* user@staging-server:/path/to/deploy'}}// 后处理步骤try {// 这里可以添加一些后处理逻辑} catch (Exception e) {echo 'An error occurred: ' + e.getMessage()} finally {// 清理工作区cleanWs()}
}
2、多分支流水线管理
1、安装pipline和multibranch pipline插件;
2、创建multobranch pipline项目;
3、配置git仓库,指定git的url配置凭证;
4、配置分支发现,添加branch Sources配置发现策略,按命名发现和按分支发现。
5、在git存储的每个分支根目录下添加jenkinsfile定义该分支的流水线逻辑;
6、保存并构建:jenkins会自动扫描git存储库的分支找到分支创建对应的pipline。
3、jenkins配置git集成出发自动集成
Webhook 自动触发(推荐方案)1、安装jenkins和git插件;2、创建jenkins任务配置git仓库url;3、Git 设置 Webhook: URL: http://jenkins.example.com/project/my-pipeline;Secret Token: 与Jenkins全局配置一致;触发事件: Push events, Merge Request events;4、验证配置提交代码观察是否自动构建。
4、jenkins如何配置构建参数实现不同环境的部署
在Jenkins中,可以通过配置构建参数来实现不同环境的部署。这通常涉及到使用参数化构建,使得用户在触发构建时可以选择目标环境。
1、创建参数化构建 步骤:1)创建或配置一个Pipeline项目:2)启用参数化构建:在项目配置页面,找到“参数化构建过程”选项,勾选“参数化构建过程”。点击“添加参数”,选择合适的参数类型。例如,可以选择“选择参数”(Choice Parameter)或“字符串参数”(String Parameter)。3)配置参数:如果选择“选择参数”,可以在“选择参数”字段中输入不同的环境选项,例如:development;staging;production 如果选择“字符串参数”,可以设置一个默认值,用户可以在构建时输入目标环境。
2. 修改Jenkinsfile: 在Jenkinsfile中,使用传入的参数来决定部署的目标环境。
pipeline {agent anyparameters {choice(name: 'DEPLOY_ENV', choices: ['development', 'staging', 'production'], description: '选择部署环境')}stages {stage('Checkout') {steps {git url: 'https://github.com/your-repo.git', branch: 'main'}}stage('Build') {steps {sh 'npm install'sh 'npm run build'}}stage('Deploy') {steps {script {// 根据选择的环境进行部署if (params.DEPLOY_ENV == 'production') {sh 'scp -r dist/* user@production-server:/path/to/deploy'} else if (params.DEPLOY_ENV == 'staging') {sh 'scp -r dist/* user@staging-server:/path/to/deploy'} else {sh 'scp -r dist/* user@development-server:/path/to/deploy'}}}}}post {success {echo 'Deployment succeeded!'}failure {echo 'Deployment failed!'}}
}
3)触发构建:当用户在Jenkins界面中触发构建时,会看到一个下拉菜单或输入框,允许他们选择或输入目标环境。Jenkins会根据用户选择的环境执行相应的部署步骤。
相关文章:
CI/CD基础知识
什么是CI/CD CI:持续集成,开发人员频繁地将代码集成到主干(主分支)中每次集成都通过自动化构建和测试来验证,从而尽早发现集成错误,常用的CI工具包括Jenkins、Travis CI、CircleCI、GitLab CI等 CD&#…...
蓝桥杯 之 图论基础+并查集
文章目录 习题联盟X蓝桥幼儿园 图论基础 并查集 并查集,总的来说,操作分为三步初始化(每一个节点的父亲是自己),定义union(index1,index2)函数,定义find(index)函数 并查集详细内容博客 习题 联盟X 联盟X 典型的求解连通分支…...
C# .net ai Agent AI视觉应用 写代码 改作业 识别屏幕 标注等
C# net deepseek RAG AI开发 全流程 介绍_c# 向量处理 deepseek-CSDN博客 视觉多模态大模型 通义千问2.5-VL-72B AI大模型能看懂图 看懂了后能干啥呢 如看懂图 让Agent 写代码 ,改作业,识别屏幕 标注等等。。。 据说是目前最好的免费图片识别框架 通…...
不使用自动映射驼峰命名法,直接在接口上使用注解@Results方法映射
3. 使用注解方式配置 在接口方法上使用 Results 注解: java 复制 Select("SELECT user_name, create_time FROM user WHERE id #{id}") Results({Result(column "user_name", property "userName"),Result(column "crea…...
15届蓝桥JavaB组 前6道题解
15届蓝桥JavaB组 前6道题解 报数游戏类斐波那契循环数分布式队列食堂最优分组星际旅行 报数游戏 import java.util.Scanner;//分析: //20和24的最小公倍数是120 //题目给出了前10个数,发现第10个数是120,说明每10个数出现一个公倍数 //第20个…...
蓝桥杯 14 天 十五届蓝桥杯 数字诗意
static boolean kkk(long x) {if(x1)return true;else {// 初始化xx为1,用于计算2的幂long xx 1;// 循环60次,检查2的幂是否等于xfor (int i 1; i < 60; i) {xx * 2; // 每次将xx乘以2if (xx x) { // 如果xx等于x,说明x是2的幂…...
MP4音视频格式
1.MP4 MP4是一种用于封装音视频/字幕/图片/章节信息等数据的多媒体容器格式,是MPEG-4系列的成员之一 2.文件结构 MP4由一层层的嵌套Box(atom)组成 [ size (4 bytes) ][ type (4 bytes)][ payload (嵌套box或者数据) ] 3.常见Box 类型名称…...
国内GitHub镜像源全解析:加速访问与替代方案指南
在数字化开发日益普及的今天,GitHub作为全球最大的代码托管平台,已成为开发者不可或缺的资源库。然而,由于网络环境的限制,国内用户在访问GitHub时常常面临速度慢、连接不稳定等问题。为了提升开发效率,国内涌现出多个GitHub镜像源,为开发者提供了快速、稳定的代码克隆与…...
CentOS 7 挂载与卸载文件系统笔记
挂载文件系统 挂载的基本概念 挂载是将存储设备(如硬盘分区、U 盘、光盘等)连接到 Linux 文件系统的特定目录(挂载点),使得系统能够访问存储设备上的数据。 查看已挂载的文件系统 命令:mount 或 df -h mo…...
责任链模式-java
1、spring依赖注入模式 @Configuration public class ChainConfig {@Beanpublic ChainSpringFactory chainSpringFactory(List<IHandler<DemoOne,Boolean>> handlerList){return new ChainSpringFactory(handlerList);}} public class DemoOne { }public abstract…...
Vue3动态加载组件,警告:Vue received a Component than was made a reactive object
场景 2个按钮,点击之后,下面加载不同的组件。 现象 分析 实际动态加载的组件,不是深层响应式的,推荐使用 shallowReactive 或 shallowRef,即浅层作用形式,仅最外层是响应式,以此来提升性能。…...
【源码阅读/Vue Flask前后端】简历数据查询功能
目录 一、Flask后端部分modelServiceroute 二、Vue前端部分index.js main.vue功能界面templatescriptstyle 一般就是三个层面,model层面用来建立数据库的字段,service用来对model进行操作,写一些数据库操作的代码,route就是具体的…...
Vue背景介绍+声明式渲染+数据响应式
一、Vue背景 1. 为什么学Vue 1.前后端开发就业必备技能 2.岗位多,绝⼤互联⽹公司都在使⽤Vue,还可以助⼒SpringBoot、C等项⽬开发 3.提⾼开发效率 更少的时间,干更多的活,提高项目开发速度 原生JS做法 Vue做法 总而言之: 使用Vue能够赋能、提升就业竞争…...
HarmonyOS NEXT 鸿蒙中手写和使用第三方仓库封装Logger打印工具
应用场景 在鸿蒙开发中,我们在很多时候调试代码都需要用到日志打印工具,但无论是hilog还是console.log,都用起来相对麻烦,而且需要手动将对象转换为JSON字符串的方式才能打印,并且在控制台日志中输出的格式也非常丑。所以下面我们…...
如何使用 CSS 的backdrop - filter属性实现背景模糊等特效,有哪些兼容性问题?
大白话如何使用 CSS 的backdrop - filter属性实现背景模糊等特效,有哪些兼容性问题? 嘿,朋友!今天咱们来聊聊 CSS 里超酷的 backdrop-filter 属性,它能让你轻松实现背景模糊等超炫特效。咱们先看看这属性到底是啥&…...
批量合并 PDF 文档,支持合并成单个文档,也支持按文件夹合并 PDF 文档
在日常工作中,合并多个 PDF 文档为一个文件是非常常见的需求。通过合并 PDF,不仅能够更方便地进行管理,还能在特定场景下(如批量打印)提高效率。那么,当我们需要批量合并多个 PDF 文件时,是否有…...
rbpf虚拟机-汇编和反汇编器
文章目录 一、概述二、主要功能三、关键函数解析3.1 汇编器3.1.1 parse -转换为Instruction列表3.1.2 assemble_internal-转换为Insn 3.2 反汇编器3.2.1 to_insn_vec-转换为机器指令 四、总结 Welcome to Code Blocks blog 本篇文章主要介绍了 [rbpf虚拟机-汇编和反汇编器] ❤…...
虚拟现实--->unity学习
前言:这学期劳动课选了虚拟现实,其中老师算挺认真的,当然对一些不感兴趣的同学来说是一种折磨,我对这个unity的学习以及后续的虚幻引擎刚开始连基础的概念都没有,后面渐渐也是滋生了一些兴趣,用这篇博客记录…...
一文详解QT环境搭建:ubuntu20.4安装配置Qt5
随着软件开发技术的不断进步,跨平台应用程序的需求日益增长,开发者们面临着如何在不同操作系统之间保持代码的一致性和效率的问题。Qt作为一个成熟的跨平台C框架,在这方面提供了卓越的支持,不仅简化了GUI应用程序的创建过程&#…...
Gateway实战(三)、断言-时间、Cookie信息
spring cloud-Gateway实战三、断言 断言一)、时间断言相关1、适用场景2、Demo案例二)、断言- Cookie信息1、用户身份验证与会话管理场景及Demo案例2、A/B测试及Demo案例断言 简单了解: 断言是一种在程序设计中用于检查程序状态或条件的机制,在gateway网关里,断言的作用是…...
PyTorch中的Tensor
PyTorch中的Tensor 是核心数据结构,类似于 NumPy 的多维数组,但具备 GPU 加速和自动求导等深度学习特性。 一、基本概念 核心数据结构 Tensor 是存储和操作数据的基础单元,支持标量(0D)、向量(1D&am…...
C++11大数加减
C11大数加减 // 20190412.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。 //#include "pch.h" #include <iostream> #include <algorithm> // sort find find_if #include <string> #include <vector> using names…...
OpenGL —— 基于Qt的视频播放器 - ffmpeg硬解码,QOpenGL渲染yuv420p或nv12视频(附源码)
🔔 OpenGL 相关技术、疑难杂症文章合集(掌握后可自封大侠 ⓿_⓿)(记得收藏,持续更新中…) 运行效果...
【IDEA的个性化配置】
目录: 一:隐藏项目路径二:禁用斜体注释三:重新Maven构建未完待续... 一:隐藏项目路径 😊在IDEA左侧的Project目录中,项目名称后面显示了项目的文件路径地址,如果不喜欢可以隐藏&…...
Vue 类与样式
数据绑定的一个常见需求场景是操纵元素的 CSS class 列表和内联样式。因为 class 和 style 都是 attribute,我们可以和其他 attribute 一样使用 v-bind 将它们和动态的字符串绑定。但是,在处理比较复杂的绑定时,通过拼接生成字符串是麻烦且易…...
【Kafka】分布式消息队列的核心奥秘
文章目录 一、Kafka 的基石概念主题(Topic)分区(Partition)生产者(Producer)消费者(Consumer) 二、Kafka 的架构探秘Broker 集群副本机制 三、Kafka 的卓越特性高…...
自动化发布工具CI/CD实践Jenkins部署与配置教程
1. 前言背景 其实一直想把jenkins 的笔记整理下,介于公司这次升级jenkins2.0 ,根据自己部署的一些经验,我把它整理成笔记。 之前我们的jenkins1.0 时代 还一直停留在 free style 或者 maven 风格的项目,随着项目的日益增多&#x…...
python中的demjson包介绍
demjson是Python中的一个第三方模块库,专门用于编码和解码JSON数据。以下是关于demjson包的详细介绍: 一、主要功能 编码与解码: demjson提供了将Python对象(如字典、列表等)编码成JSON字符串的功能。同时,…...
什么是SQL作业
SQL作业是在数据库服务器上按特定时间或间隔自动执行的计划任务或流程,这些作业由Microsoft SQL Server中的SQL Server代理管理,对于自动执行日常任务(如数据库系统中的备份、数据导入和报告生成)以及确保及时准确地处理和更新数据…...
Android实践开发制作小猴子摘桃小游戏
Android实践制作小猴子摘桃小游戏 实践素材项目源文件获取:Android可能存在版本差异项目如果不能正确运行,可以使用里面的素材自己构建项目Android实践制作小猴子摘桃小游戏Android实践制作小猴子摘桃小游戏https://mp.weixin.qq.com/s/jNU_hVfj9xklsil…...
