当前位置: 首页 > article >正文

CI/CD构建与注意事项

1. CI/CD 概述

1.1 定义
  • CI(Continuous Integration,持续集成):是一种软件开发实践,开发团队成员频繁地将代码集成到共享的代码仓库中。每次集成都会通过自动化的构建(包括编译、打包等)和测试来验证,从而尽早发现集成错误。
  • CD(Continuous Delivery/Deployment,持续交付/持续部署)
    • 持续交付:是在持续集成的基础上,将经过测试的代码自动部署到预生产环境,保证软件可以随时发布到生产环境,但发布决策通常由人工触发。
    • 持续部署:是持续交付的更进一步,代码在通过自动化测试后会自动部署到生产环境,无需人工干预。
1.2 好处
  • 快速反馈:自动化的构建和测试过程能让开发人员快速得知代码的问题,及时修复。
  • 提高软件质量:频繁的集成和测试可以减少代码冲突和缺陷,提高软件的稳定性。
  • 加速开发流程:自动化部署减少了人工操作的时间和错误,加快了软件的交付速度。

2. CI/CD 常用工具及语法示例

2.1 GitLab CI/CD
  • 语法:GitLab CI/CD 使用 .gitlab-ci.yml 文件来定义 CI/CD 流程,该文件采用 YAML 格式。
    • 阶段(stages):定义了 CI/CD 流程的不同阶段,例如 buildtestdeploy 等。
    • 作业(jobs):每个阶段可以包含多个作业,作业定义了具体的操作。
# 定义阶段
stages:- build- test- deploy# 构建作业
build_job:stage: buildscript:- echo "Building the application..."- mvn clean package  # 假设是 Java 项目# 测试作业
test_job:stage: testscript:- echo "Running tests..."- mvn test# 部署作业
deploy_job:stage: deployscript:- echo "Deploying the application..."- kubectl apply -f deployment.yaml  # 假设部署到 Kubernetesonly:- main  # 只在 main 分支触发部署
2.2 Jenkins
  • 语法:Jenkins 使用 Jenkinsfile 来定义 CI/CD 流程,有声明式和脚本式两种语法。

声明式 Jenkinsfile 示例

pipeline {agent anystages {stage('Build') {steps {echo 'Building the application...'sh 'mvn clean package'}}stage('Test') {steps {echo 'Running tests...'sh 'mvn test'}}stage('Deploy') {steps {echo 'Deploying the application...'sh 'kubectl apply -f deployment.yaml'}}}
}

3. 实战示例:使用 GitLab CI/CD 部署一个 Node.js 应用到 Kubernetes

3.1 项目结构
my-node-app/
├── package.json
├── src/
│   └── index.js
├── Dockerfile
├── deployment.yaml
└── .gitlab-ci.yml
3.2 文件内容

Dockerfile

# 使用 Node.js 基础镜像
FROM node:14# 设置工作目录
WORKDIR /app# 复制 package.json 和 package-lock.json
COPY package*.json ./# 安装依赖
RUN npm install# 复制源代码
COPY src/ ./src# 暴露端口
EXPOSE 3000# 启动应用
CMD ["node", "src/index.js"]

deployment.yaml

apiVersion: apps/v1
kind: Deployment
metadata:name: my-node-app
spec:replicas: 3selector:matchLabels:app: my-node-apptemplate:metadata:labels:app: my-node-appspec:containers:- name: my-node-appimage: registry.gitlab.com/your-group/your-project/my-node-app:latestports:- containerPort: 3000

.gitlab-ci.yml

stages:- build- test- deploy# 构建 Docker 镜像
build_image:stage: buildimage: docker:latestservices:- docker:dindscript:- docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY- docker build -t $CI_REGISTRY_IMAGE:latest .- docker push $CI_REGISTRY_IMAGE:latest# 测试(这里简单示例,可根据实际添加测试命令)
test_app:stage: testimage: node:14script:- npm install- npm test# 部署到 Kubernetes
deploy_to_k8s:stage: deployimage: bitnami/kubectl:latestscript:- kubectl config set-cluster my-cluster --server=$KUBE_SERVER --certificate-authority=$KUBE_CA- kubectl config set-credentials my-user --token=$KUBE_TOKEN- kubectl config set-context my-context --cluster=my-cluster --user=my-user- kubectl config use-context my-context- kubectl apply -f deployment.yamlonly:- main

4. 注意事项

4.1 安全性
  • 凭证管理:对于敏感信息,如 Docker 镜像仓库的用户名和密码、Kubernetes 的访问令牌等,要使用 CI/CD 工具提供的安全机制进行管理,避免明文存储在配置文件中。
  • 代码审查:在代码集成到主分支前,进行严格的代码审查,防止引入安全漏洞。
4.2 资源管理
  • 合理分配资源:根据项目的实际需求,合理分配 CI/CD 服务器的资源,避免资源浪费或不足。
  • 清理无用资源:定期清理 CI/CD 过程中产生的临时文件和镜像,释放磁盘空间。
4.3 测试覆盖
  • 全面测试:确保测试用例覆盖了代码的各个方面,包括功能测试、性能测试、安全测试等,提高软件的质量。
  • 测试环境模拟:在测试阶段,尽量模拟生产环境的配置和数据,确保测试结果的准确性。
4.4 监控和日志
  • 监控 CI/CD 流程:使用监控工具对 CI/CD 流程进行监控,及时发现和解决问题。
  • 日志记录:记录 CI/CD 过程中的详细日志,方便后续的问题排查和审计。

相关文章:

CI/CD构建与注意事项

1. CI/CD 概述 1.1 定义 CI(Continuous Integration,持续集成):是一种软件开发实践,开发团队成员频繁地将代码集成到共享的代码仓库中。每次集成都会通过自动化的构建(包括编译、打包等)和测试…...

数据结构篇——二叉树的存储与遍历

一、引入 书接上文,文于此续。上文我们学到了树的存储结构,那么今天,我们来学习下几种特殊的二叉树以及关于它的各种遍历,让我们一起加油吧。 二、特殊的二叉树 二叉树的特殊形式这里介绍3种,其中需要着重记忆的有…...

分而治之:用于 RGB-T 显著目标检测的 Confluent Triple-Flow 网络(问题)

摘要 问题一:RGB-thermal显著对象检测这是什么? RGB图像是可见光的三通道图像,而thermal是热红外图像,通常为单通道,记录物体的热辐射信息。结合RGB和thermal两种模态的数据,可以利用两者的互补信息&…...

求职招聘网站源码,找工作招工系统,支持H5和各种小程序

招聘找活招工平台系统源码 招聘求职找工作软件 发布信息积分充值招聘系统,里面带纤细教程 功能介绍: 招工小程序主要针对工地招工工人找工作,工地可以发布招工信息,工人可以发布找活信息,招工信息可以置顶,置顶需要积分,积分可以通过签到、分享邀请好友、充值获取,后…...

18.使用读写包操作Excel文件:xlrd、xlwt 和 xlutils 包

一 xlrd、xlwt 和 xlutils 包的介绍 OpenPyXL 和 xlrd、xlwt 、xlutils 的区别在笔记 15 。 二 如何使用 xlrd 读取文件 1.获取所有工作表的名称 book.sheet_names():得到一个列表。 import xlrd import xlwt from xlwt.Utils import cell_to_rowcol2 import xluti…...

python脚本实现服务器内存和cpu使用监控,并记录日志,可以设置阈值和采样频率

Python 脚本,实现以下功能: 按日期自动生成日志文件(例如 cpu_mem_20231001.csv)当 CPU 或内存超过阈值时触发记录独立记录报警事件(保存到 alert.log)支持自定义阈值和监控间隔 脚本代码 import psutil …...

企业微信群聊机器人开发

拿到机器人hook 机器人开发文档 https://developer.work.weixin.qq.com/document/path/91770...

基于Python的tkinter开发的一个工具,解析图片文件名并将数据自动化导出为Excel文件

文章目录 一、开发背景与业务价值二、系统架构设计1. 分层架构图解2. 核心类结构3. 文件解析流程 三、关键技术实现详解1. 高性能文件名解析引擎2. 可视化数据展示3. 智能Excel导出模块 四、完整代码五、行业应用展望 一、开发背景与业务价值 在零售行业会员管理场景中&#x…...

c++面向对象笔记

本文章总结了所有面向对象可能会用到的笔记以及知识,同时也是cGESP6级的必考题,不推荐0基础阅读,请见谅! 一.面向对象三大特性 C面向对象的三大特性:封装、继承、多态 1.封装 1.1封装的意义 封装的意义如下&#…...

pyqt 上传文件或者文件夹打包压缩文件并添加密码并将密码和目标文件信息保存在json文件

一、完整代码实现 import sys import os import json import pyzipper from datetime import datetime from PyQt5.QtWidgets import (QApplication, QWidget, QVBoxLayout, QHBoxLayout,QPushButton, QLineEdit, QLabel, QFileDialog,QMessageBox, QProgressBar) from PyQt5.…...

Flutter_学习记录_状态管理之GetX

1. 状态管理、Flutter Getx介绍 1.1 状态管理 通俗的讲:当我们想在多个页面(组件/Widget)之间共享状态(数据),或者一个页面(组件/Widget)中的多个子组件之间共享状态(数…...

【网络】数据流(Data Workflow)Routes(路由)、Controllers(控制器)、Models(模型) 和 Middleware(中间件)

在图片中,数据流(Data Workflow)描述了应用程序中数据的流动过程,涉及 Routes(路由)、Controllers(控制器)、Models(模型) 和 Middleware(中间件&…...

c++ 中的可变参数模板与折叠表达式

c 11 引入了可变参数模板,c 17 引入了折叠表达式,比 c 语言的可变参数更加简洁灵活。这篇博客总结了一些例子。 …(省略号)用于可变参数(Variadic Arguments),它可以放在模板参数 或 函数参数的…...

Vala教程-第一个程序(Hello world)

代码 class Demo.HelloWorld : GLib.Object {public static int main(string[] args) {stdout.printf("Hello, World\n");return 0;} } 解析 这是一个 Vala Hello World 程序。我将一步一步地介绍它。 class Demo.HelloWorld : GLib.Object { 这一行定义了一个He…...

Git下载安装(保姆教程)

目录 1、Git下载 2、Git安装(windows版) (1)启动安装程序 (2)阅读许可协议 (3)选择安装路径 (4)选择组件 (5)选择开始菜单文件夹…...

Blender-MCP服务源码2-依赖分析

Blender-MCP服务源码2-依赖分析 有个大佬做了一个Blender-MCP源码,第一次提交代码是【2025年3月7号】今天是【2025年月15日】也就是刚过去一周的时间,所以想从0开始学习这个代码,了解一下大佬们的开发思路 1-核心知识点 from mcp.server.fas…...

LabVIEW压比调节器动态试验台

本案介绍了一种基于LabVIEW的压比调节器动态试验台的设计,通过实用的LabVIEW图形化编程语言,优化了数据采集与处理的整个流程。案例通过实际应用展示了设计的专业性与高效性,以及如何通过系统化的方法实现精确的动态测试和结果分析。 ​ 项目…...

基于“动手学强化学习”的知识点(二):第 15 章 模仿学习(gym版本 >= 0.26)

第 15 章 模仿学习(gym版本 > 0.26) 摘要 摘要 本系列知识点讲解基于动手学强化学习中的内容进行详细的疑难点分析!具体内容请阅读动手学强化学习! 对应动手学强化学习——模仿学习 # -*- coding: utf-8 -*-import gy…...

2025-03-17 Unity 网络基础1——网络基本概念

文章目录 1 网络1.1 局域网1.2 以太网1.3 城域网1.4 广域网1.5 互联网(因特网)1.6 万维网1.7 小结 2 IP 地址2.1 IP 地址2.2 端口号2.3 Mac 地址2.4 小结 3 客户端与服务端3.1 客户端3.2 服务端3.3 网络游戏中的客户端与服务端 1 网络 ​ 在没有网络之前…...

springboot441-基于SpringBoot的校园自助交易系统(源码+数据库+纯前后端分离+部署讲解等)

💕💕作者: 爱笑学姐 💕💕个人简介:十年Java,Python美女程序员一枚,精通计算机专业前后端各类框架。 💕💕各类成品Java毕设 。javaweb,ssm&#xf…...

浅谈数据分析及数据思维

目录 一、数据分析及数据分析思维?1.1 数据分析的本质1.2 数据分析思维的本质1.2.1 拥有数据思维的具体表现1.2.2 如何培养自己的数据思维1.2.2.1 书籍1.2.2.2 借助工具1.2.2.3 刻意练习 二、数据分析的价值及必备能力?2.1 数据分析的价值2.1.1 现状分析…...

Hexo主题配置and常用指令

Hexo 主题配置步骤 安装Hexo&#xff1a; 安装Node.js和Git。使用npm安装Hexo CLI&#xff1a;npm install -g hexo-cli。 创建新的Hexo项目&#xff1a; 执行命令&#xff1a;hexo init <folder>&#xff0c;其中<folder>是你的项目目录名。进入项目文件夹&#…...

自定义uniapp组件,以picker组件为例

编写目的 本文说明基于vue3定义uniapp组件的关键点&#xff1a; 1、一般定义在components文件夹创建组件&#xff0c;组件与页面已经没有明确的语法格式区别&#xff0c;所以可以与页面的语法保持一致 &#xff1b; 2、组件定义后使用该组件的页面不需要引用组件即可使用&am…...

测试工程师指南:基于需求文档构建本地安全知识库的完整实战

需求文档是测试工程师日常工作的核心工具&#xff0c;如何快速检索需求文档中的关键信息&#xff08;文本、表格、图片等&#xff09;&#xff0c;并将其转化为可供 AI 查询的知识库&#xff0c;是提升工作效率的重要手段。本文将通过对 需求文档&#xff08;docx 格式&#xf…...

IP关联的定义和避免方法

大家好&#xff01;今天我们来聊一聊一个在运营多个网络账号时会遇到的重要问题——IP关联。对于那些正在运营多个账号或者进行多窗口任务的朋友们&#xff0c;这无疑是一个你必须关注的问题。IP关联&#xff0c;简单来说&#xff0c;就是多个账号在使用相同IP地址的情况下进行…...

浅述WinForm 和 WPF 的前景

在.NET 开发领域&#xff0c;WinForm 和 WPF 都是用于创建桌面应用程序的技术框架&#xff0c;但它们在很多方面存在差异&#xff0c;对于开发者来说&#xff0c;也常常会思考哪个更有前途。 一、WinForm 1. 成熟/稳定度&#xff1a; WinForms 是较早的桌面应用程序框架&am…...

CSS3学习教程,从入门到精通,CSS3 属性语法知识点及案例代码(4)

CSS3 属性语法知识点及案例代码 一、CSS3 文本属性 1. 颜色相关属性 color&#xff1a;设置文本颜色。text-shadow&#xff1a;设置文本阴影。 2. 字体相关属性 font-family&#xff1a;设置字体系列。font-size&#xff1a;设置字体大小。font-weight&#xff1a;设置字体…...

MyBatis SqlSession 是如何创建的? 它与 SqlSessionFactory 有什么关系?

SqlSession 是 MyBatis 中与数据库交互的核心接口&#xff0c;它提供了执行 SQL 语句、管理事务、获取 Mapper 接口代理对象等关键功能。 SqlSession 实例 不是直接通过 new 关键字创建的&#xff0c;而是通过 SqlSessionFactory 工厂来创建的。 SqlSessionFactory 负责创建 Sq…...

【操作系统安全】任务4:Windows 系统网络安全实践里常用 DOS 命令

目录 一、引言 二、网络信息收集类命令 2.1 ipconfig 命令 2.1.1 功能概述 2.1.2 实例与代码 2.2 ping 命令 2.2.1 功能概述 2.2.2 实例与代码 2.3 tracert 命令 2.3.1 功能概述 2.3.2 实例与代码 三、网络连接与端口管理类命令 3.1 netstat 命令 3.1.1 功能概述…...

Vue 概念、历史、发展和Vue简介

一、Vue概念 官方定义&#xff1a; 渐进式JavaScript 框架&#xff0c;易学易用&#xff0c;性能出色&#xff0c;适用场景丰富的 Web 前端框架。 Vue.js 是一个流行的前端JavaScript框架&#xff0c;由尤雨溪&#xff08;Evan You&#xff09;开发并维护。 它最初于2014年发…...