CI/CD基础知识

news2025/4/3 2:27:31

什么是CI/CD

CI:持续集成,开发人员频繁地将代码集成到主干(主分支)中每次集成都通过自动化构建和测试来验证,从而尽早发现集成错误,常用的CI工具包括Jenkins、Travis CI、CircleCI、GitLab CI等

CD: 持续交付或持续部署,持续交付是指在持续集成的基础上,自动化将代码部署到生产环境或预生产环境的过程。它确保代码在任何时候都可以安全地部署到生产环境。自动化部署:通过自动化脚本将应用程序部署到服务器,减少手动操作的错误。可随时发布:代码经过测试后,可以随时选择将其发布到生产环境。环境一致性:确保开发、测试和生产环境的一致性,以减少环境差异带来的问题。工具:常用的持续交付工具包括Spinnaker、Octopus Deploy、AWS CodeDeploy等。

1、常用的CI/CD工具

特性GitLab CI/CDTravis CIJenkins
部署模式内置于 GitLab(SaaS/自托管)纯 SaaS(无自托管版)自托管为主(支持云托管)
配置方式.gitlab-ci.yml 文件.travis.yml 文件Jenkinsfile(Groovy DSL)
执行环境GitLab Runner(可自定义)预置的虚拟机环境Agent/Node 自由扩展
依赖管理自带 Artifact 存储有限缓存机制需插件(如 Nexus 集成)
网络拓扑原生 Kubernetes 集成固定环境无集群管理支持混合云集群调度

第三方服务集成

服务类型GitLab CITravis CIJenkins
代码质量内置 SAST/DAST 扫描需通过插件扩展需安装 SonarQube 插件
通知渠道20+ 内置通知方式基础邮件/Slack500+ 通知插件
安全扫描集成 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提供了实时的构建日志和状态监控,可以查看每个阶段的执行情况。
设置通知:可以通过邮件、Slack等方式配置构建通知,确保团队及时了解构建状态

1、实现重点

- Pipeline脚本

在Jenkins中,Pipeline脚本主要有两种类型:声明式流水线(Declarative Pipeline)和脚本式流水线(Scripted Pipeline)。

声明式流水线(Declarative Pipeline)脚本式流水线(Scripted Pipeline)
易读性:声明式流水线的语法更为简洁和直观。
结构化:使用固定的结构,便于理解和维护。
内置功能:提供了一些内置的功能,如post、options等,简化了常见的任务。
灵活性:使用Groovy语言编写,提供了更大的灵活性和控制能力
复杂逻辑:适合需要复杂逻辑和条件判断的场景
不规则结构:没有固定的结构,可能会导致可读性降低,尤其是对于大型项目

组成元素

pipeline:整个流水线的定义。
agent:指定代理上执行流水线,特定或任何可用的节点
stages:流水线的各个阶段,包含多个stage
stage:每个阶段的定义,表示流水线中的一个步骤
steps:在每个阶段中执行的具体操作可以是命令、脚本等
post:定义在流水线执行后的操作如成功、失败时的处理

 组成元素:
node:定义在某个代理节点上执行的代码块。
stage:定义流水线中的一个阶段。
steps:在每个阶段中执行的具体操作。
try-catch-finally:用于处理异常和控制流程。
environment:定义环境变量。
声明式流水线
pipeline {
    agent any

    environment {
        // 定义环境变量
        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 any

    parameters {
        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会根据用户选择的环境执行相应的部署步骤。

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

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

相关文章

蓝桥杯 之 图论基础+并查集

文章目录 习题联盟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 写代码 ,改作业,识别屏幕 标注等等。。。 据说是目前最好的免费图片识别框架 通…

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&#xff0c;用于计算2的幂long xx 1;// 循环60次&#xff0c;检查2的幂是否等于xfor (int i 1; i < 60; i) {xx * 2; // 每次将xx乘以2if (xx x) { // 如果xx等于x&#xff0c;说明x是2的幂&#xf…

MP4音视频格式

1.MP4 MP4是一种用于封装音视频/字幕/图片/章节信息等数据的多媒体容器格式&#xff0c;是MPEG-4系列的成员之一 2.文件结构 MP4由一层层的嵌套Box&#xff08;atom&#xff09;组成 [ size (4 bytes) ][ type (4 bytes)][ payload (嵌套box或者数据) ] 3.常见Box 类型名称…

国内GitHub镜像源全解析:加速访问与替代方案指南

在数字化开发日益普及的今天,GitHub作为全球最大的代码托管平台,已成为开发者不可或缺的资源库。然而,由于网络环境的限制,国内用户在访问GitHub时常常面临速度慢、连接不稳定等问题。为了提升开发效率,国内涌现出多个GitHub镜像源,为开发者提供了快速、稳定的代码克隆与…

Vue3动态加载组件,警告:Vue received a Component than was made a reactive object

场景 2个按钮&#xff0c;点击之后&#xff0c;下面加载不同的组件。 现象 分析 实际动态加载的组件&#xff0c;不是深层响应式的&#xff0c;推荐使用 shallowReactive 或 shallowRef&#xff0c;即浅层作用形式&#xff0c;仅最外层是响应式&#xff0c;以此来提升性能。…

【源码阅读/Vue Flask前后端】简历数据查询功能

目录 一、Flask后端部分modelServiceroute 二、Vue前端部分index.js main.vue功能界面templatescriptstyle 一般就是三个层面&#xff0c;model层面用来建立数据库的字段&#xff0c;service用来对model进行操作&#xff0c;写一些数据库操作的代码&#xff0c;route就是具体的…

Vue背景介绍+声明式渲染+数据响应式

一、Vue背景 1. 为什么学Vue 1.前后端开发就业必备技能 2.岗位多&#xff0c;绝⼤互联⽹公司都在使⽤Vue&#xff0c;还可以助⼒SpringBoot、C等项⽬开发 3.提⾼开发效率 更少的时间,干更多的活,提高项目开发速度 原生JS做法 Vue做法 总而言之: 使用Vue能够赋能、提升就业竞争…

HarmonyOS NEXT 鸿蒙中手写和使用第三方仓库封装Logger打印工具

应用场景 在鸿蒙开发中&#xff0c;我们在很多时候调试代码都需要用到日志打印工具&#xff0c;但无论是hilog还是console.log,都用起来相对麻烦&#xff0c;而且需要手动将对象转换为JSON字符串的方式才能打印&#xff0c;并且在控制台日志中输出的格式也非常丑。所以下面我们…

批量合并 PDF 文档,支持合并成单个文档,也支持按文件夹合并 PDF 文档

在日常工作中&#xff0c;合并多个 PDF 文档为一个文件是非常常见的需求。通过合并 PDF&#xff0c;不仅能够更方便地进行管理&#xff0c;还能在特定场景下&#xff08;如批量打印&#xff09;提高效率。那么&#xff0c;当我们需要批量合并多个 PDF 文件时&#xff0c;是否有…

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学习

前言&#xff1a;这学期劳动课选了虚拟现实&#xff0c;其中老师算挺认真的&#xff0c;当然对一些不感兴趣的同学来说是一种折磨&#xff0c;我对这个unity的学习以及后续的虚幻引擎刚开始连基础的概念都没有&#xff0c;后面渐渐也是滋生了一些兴趣&#xff0c;用这篇博客记录…

一文详解QT环境搭建:ubuntu20.4安装配置Qt5

随着软件开发技术的不断进步&#xff0c;跨平台应用程序的需求日益增长&#xff0c;开发者们面临着如何在不同操作系统之间保持代码的一致性和效率的问题。Qt作为一个成熟的跨平台C框架&#xff0c;在这方面提供了卓越的支持&#xff0c;不仅简化了GUI应用程序的创建过程&#…

【IDEA的个性化配置】

目录&#xff1a; 一&#xff1a;隐藏项目路径二&#xff1a;禁用斜体注释三&#xff1a;重新Maven构建未完待续... 一&#xff1a;隐藏项目路径 &#x1f60a;在IDEA左侧的Project目录中&#xff0c;项目名称后面显示了项目的文件路径地址&#xff0c;如果不喜欢可以隐藏&…

【Kafka】分布式消息队列的核心奥秘

文章目录 一、Kafka 的基石概念​主题&#xff08;Topic&#xff09;​分区&#xff08;Partition&#xff09;​生产者&#xff08;Producer&#xff09;​消费者&#xff08;Consumer&#xff09;​ 二、Kafka 的架构探秘​Broker 集群​副本机制​ 三、Kafka 的卓越特性​高…

自动化发布工具CI/CD实践Jenkins部署与配置教程

1. 前言背景 其实一直想把jenkins 的笔记整理下&#xff0c;介于公司这次升级jenkins2.0 &#xff0c;根据自己部署的一些经验&#xff0c;我把它整理成笔记。 之前我们的jenkins1.0 时代 还一直停留在 free style 或者 maven 风格的项目&#xff0c;随着项目的日益增多&#x…

什么是SQL作业

SQL作业是在数据库服务器上按特定时间或间隔自动执行的计划任务或流程&#xff0c;这些作业由Microsoft SQL Server中的SQL Server代理管理&#xff0c;对于自动执行日常任务&#xff08;如数据库系统中的备份、数据导入和报告生成&#xff09;以及确保及时准确地处理和更新数据…

Android实践开发制作小猴子摘桃小游戏

Android实践制作小猴子摘桃小游戏 实践素材项目源文件获取&#xff1a;Android可能存在版本差异项目如果不能正确运行&#xff0c;可以使用里面的素材自己构建项目Android实践制作小猴子摘桃小游戏Android实践制作小猴子摘桃小游戏https://mp.weixin.qq.com/s/jNU_hVfj9xklsil…

springboot整合couchbase(集群)

springboot整合couchbase 1、Couchbase1.1、介绍1.2、Bucket1.3、Couchbase SDK 2、(key,value)写入couchbase集群2.1、总体图2.2、依赖2.3、CouchbaseConfig 配置文件2.4、代码使用 1、Couchbase 1.1、介绍 1.2、Bucket 在 Couchbase 中&#xff0c;bucket 是一个重要的概念…