Kubernetes 创建 Jenkins 实现 CICD 配置指南
Kubernetes 创建 Jenkins 实现 CICD 配置指南
拉取 Jenkins 镜像并推送到本地仓库
# 从官方仓库拉取镜像(若网络不通畅可使用国内镜像源)
docker pull jenkins/jenkins:lts-jdk11# 国内用户可去下面地址寻找镜像源并拉取:
https://docker.aityp.com# 推送到本地 Kubernetes 镜像仓库
docker tag jenkins/jenkins:lts-jdk11 192.168.1.13:5000/datasafe/jenkins:lts-jdk11
docker push 192.168.1.13:5000/datasafe/jenkins:lts-jdk11
1. 创建命名空间
kubectl create ns jenkins
2. 创建 ServiceAccount 和权限绑定
2.1 检查 ServiceAccount 是否存在
kubectl get serviceaccount -n jenkins
2.2 创建 jenkins-admin ServiceAccount
cat <<EOF | kubectl apply -f -
apiVersion: v1
kind: ServiceAccount
metadata:name: jenkins-adminnamespace: jenkins
EOF
2.3 配置权限绑定
集群管理员权限 (ClusterRoleBinding)
cat <<EOF | kubectl apply -f -
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:name: jenkins-admin-binding
subjects:
- kind: ServiceAccountname: jenkins-adminnamespace: jenkins
roleRef:kind: ClusterRolename: cluster-adminapiGroup: rbac.authorization.k8s.io
EOF
命名空间权限 (RoleBinding)
cat <<EOF | kubectl apply -f -
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:name: jenkins-admin-bindingnamespace: jenkins
subjects:
- kind: ServiceAccountname: jenkins-adminnamespace: jenkins
roleRef:kind: Rolename: jenkins-roleapiGroup: rbac.authorization.k8s.io
EOF
3. 部署 Jenkins YAML 配置
---
kind: Deployment
apiVersion: apps/v1
metadata:name: jenkinsnamespace: jenkins
spec:replicas: 1selector:matchLabels:app: jenkinstemplate:metadata:labels:app: jenkinsspec:volumes:- name: jenkinshomepersistentVolumeClaim:claimName: jenkins-data-pvccontainers:- name: jenkinsimage: '192.168.1.13:5000/datasafe/jenkins:lts-jdk11'ports:- name: webcontainerPort: 8080protocol: TCP- name: agentcontainerPort: 50000protocol: TCPenv:- name: JAVA_OPTSvalue: '-Duser.timezone=Asia/Shanghai'volumeMounts:- name: jenkinshomemountPath: /var/jenkins_homeserviceAccountName: jenkins-adminsecurityContext: {}---
kind: Service
apiVersion: v1
metadata:name: jenkinsnamespace: jenkinslabels:app: jenkins
spec:ports:- name: webprotocol: TCPport: 8080targetPort: 8080nodePort: 30010selector:app: jenkinstype: NodePort---
kind: Service
apiVersion: v1
metadata:name: jenkins-agentnamespace: jenkinslabels:app: jenkins
spec:ports:- name: agentprotocol: TCPport: 50000targetPort: 50000selector:app: jenkinstype: ClusterIP---
kind: PersistentVolumeClaim
apiVersion: v1
metadata:name: jenkins-data-pvcnamespace: jenkins
spec:accessModes:- ReadWriteManyresources:requests:storage: 10GistorageClassName: nfs-client
4. 创建凭证(Git 服务器账户密码)
- 进入 Jenkins 管理界面
- 导航到"系统管理" → “凭据管理”
- 创建 Git 和节点服务器凭证
- 记录生成的唯一标识符
5. 绑定 Jenkins 服务器节点
5.1 准备工作
从节点需要安装以下环境:
- Git
- JDK
- Maven
- Docker(可选)
添加 Maven 环境变量:
echo 'export PATH=/usr/local/apache-maven-3.8.6/bin:$PATH' >> ~/.profile
source ~/.profile
5.2 创建从节点
- 进入"系统管理" → “节点和云管理”
- 创建新节点
- 配置节点信息:
- 名称
- 远程工作目录
- 启动方式(通过SSH)
- 凭据(使用之前创建的凭证)
5.3 常见问题及解决方案
问题1:Jenkins 连接不上远程机器
错误信息:
[SSH] Opening SSH connection to 192.168.1.4:22.
Searching for 192.168.1.4 in /var/jenkins_home/.ssh/known_hosts
Searching for 192.168.1.4:22 in /var/jenkins_home/.ssh/known_hosts
[04/21/25 12:59:00] [SSH] WARNING: No entry currently exists in the Known Hosts file for this host. Connections will be denied until this new host and its associated key is added to the Known Hosts file.
Key exchange was not finished, connection is closed.
SSH Connection failed with IOException: "Key exchange was not finished, connection is closed.", retrying in 15 seconds. There are 10 more retries left.
解决方案:
# 进入 Jenkins 容器执行
ssh-keyscan -H 从节点主机IP >> /var/jenkins_home/.ssh/known_hosts
问题2:加入 Jenkins 失败
错误信息:
Starting agent process: cd "/data/jenkins" && java -jar remoting.jar -workDir /data/jenkins -jar-cache /data/jenkins/remoting/jarCache
Error: A JNI error has occurred, please check your installation and try again
Exception in thread "main" java.lang.UnsupportedClassVersionError: hudson/remoting/Launcher has been compiled by a more recent version of the Java Runtime (class file version 55.0), this version of the Java Runtime only recognizes class file versions up to 52.0at java.lang.ClassLoader.defineClass1(Native Method)at java.lang.ClassLoader.defineClass(ClassLoader.java:763)at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)at java.net.URLClassLoader.defineClass(URLClassLoader.java:468)at java.net.URLClassLoader.access$100(URLClassLoader.java:74)at java.net.URLClassLoader$1.run(URLClassLoader.java:369)at java.net.URLClassLoader$1.run(URLClassLoader.java:363)at java.security.AccessController.doPrivileged(Native Method)at java.net.URLClassLoader.findClass(URLClassLoader.java:362)at java.lang.ClassLoader.loadClass(ClassLoader.java:424)at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:349)at java.lang.ClassLoader.loadClass(ClassLoader.java:357)at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:495)
Agent JVM has terminated. Exit code=1
解决方案:
- 下载并安装 JDK 11 https://www.oracle.com/cn/java/technologies/javase/jdk11-archive-downloads.html#license-lightbox
- 在节点配置 → 启动方式 → 高级中指定 JDK11 路径
重新点击 launch agent即可
6. 创建 Pipeline 项目
6.1 Pipeline 脚本示例
pipeline {agent {label 'java' // 使用标签选择节点}environment {IMAGE_NAME = "micro-datamap"K8S_NAMESPACE = "development"K8S_PORT = "31090"K8S_DEBUG_PORT = "31091"SPRING_PROFILES_ACTIVE = "dev"}parameters {string(name: 'BUILD_VERSION',defaultValue: '3.0.4_hz250117',description: '构建版本号')}stages {stage("Checkout") {steps {echo "1. checkout integration branch"git branch: '分支',credentialsId: 'git凭据标识',url: '仓库地址'}}stage('Package&Build') {steps {echo "2.package project & build Image"script {sh "cat src/main/docker/Dockerfile"sh "cd src/main/docker/ && bash build.sh ${SPRING_PROFILES_ACTIVE} ${BUILD_VERSION}"}}}stage('Push') {steps {echo "3.push image"script {sh "docker push 镜像名称"}}}stage('Deploy') {steps {echo "4.deploy in k8s"script {sh "echo 'deleting current deployment...'"// 部署相关的kubectl命令}}}}
}
相关文章:
Kubernetes 创建 Jenkins 实现 CICD 配置指南
Kubernetes 创建 Jenkins 实现 CICD 配置指南 拉取 Jenkins 镜像并推送到本地仓库 # 从官方仓库拉取镜像(若网络不通畅可使用国内镜像源) docker pull jenkins/jenkins:lts-jdk11# 国内用户可去下面地址寻找镜像源并拉取: https://docker.a…...
01_Flask快速入门教程介绍
一、课程视频 01_Flask快速入门教程介绍 二、课程特点 讲课风格通俗易懂,理论与实战相结合 教程:视频 配套文档 配套的代码 最新本版,Python版本是3.12,Flask版本是3.10 即使是从没接触过Flsk的小白也看得懂学得会 三、适用人…...
SSH反向代理
SSH反向代理 一、过程 1、 确保树莓派和阿里云服务器的 SSH 服务正常运行 检查树莓派的ssh服务 sudo systemctl status ssh如果未启用,请启动并设置开机自启: sudo systemctl enable ssh sudo systemctl start ssh检查阿里云服务器的SSH服务 sudo …...
第 5 篇:初试牛刀 - 简单的预测方法
第 5 篇:初试牛刀 - 简单的预测方法 经过前面四篇的学习,我们已经具备了处理时间序列数据的基本功:加载、可视化、分解以及处理平稳性。现在,激动人心的时刻到来了——我们要开始尝试预测 (Forecasting) 未来! 预测是…...
深度学习中的归一化技术:从原理到实战全解析
摘要:本文系统解析深度学习中的归一化技术,涵盖批量归一化(BN)、层归一化(LN)、实例归一化(IN)、组归一化(GN)等核心方法。通过数学原理、适用场景、优缺点对…...
流量抓取工具(wireshark)
协议 TCP/IP协议簇 网络接口层(没有特定的协议)PPPOE 物理层数据链路层 网络层: IP(v4/v6) ARP(地址解析协议) RARP ICMP(Internet控制报文协议) IGMP传输层:TCP(传输控制协议)UDP(用户数据报协议)应用层…...
【原创】Ubuntu20.04 安装 Isaac Gym 仿真器
Isaac Gym 是 NVIDIA 开发的一个基于GPU的机器人仿真平台。其高效的 GPU 加速能力和大规模并行仿真性能,成为强化学习训练和机器人控制研究的重要选择。 本文将介绍 Isaac Gym 的安装过程【简易】。 1.配置环境 Ubuntu20.04 安装 NVIDIA 显卡驱动 Ubuntu20.04 安…...
AI 速读 SpecReason:让思考又快又准!
在大模型推理的世界里,速度与精度往往难以兼得。但今天要介绍的这篇论文带来了名为SpecReason的创新系统,它打破常规,能让大模型推理既快速又准确,大幅提升性能。想知道它是如何做到的吗?快来一探究竟! 论…...
从“堆料竞赛”到“体验深耕”,X200 Ultra和X200s打响手机价值升维战
出品 | 何玺 排版 | 叶媛 vivo双旗舰来袭! 4月21日,vivo X系列春季新品发布会盛大开启,带来了一场科技与创新的盛宴。会上,消费者期待已久的X200 Ultra及X200s两款旗舰新品正式发布。 vivo两款旗舰新品发布后,其打破…...
Macbook IntelliJ IDEA终端无法运行mvn命令
一、背景 idea工具里执行Maven命令mvn package,报错提示 zsh: command not found: mvn。 macOS,默认使用的是zsh,环境变量通常配置在 ~/.zshrc 文件中。 而我之前一直是配置在~/.bash_profile文件中。 二、环境变量 vi ~/.zshrc设置MAVE…...
CentOS 7进入救援模式——VirtualBox虚拟机
目录 1. 在`VirtualBox`环境下,开机按F12,进入`VirtualBox temporary boot device selection `界面,按`c`键,选中`CD-ROM `回车。2. 选中`Troubleshooting`(故障排除),进入`Troubleshooting`界面3. 接下来会显示救援模式菜单,通常选择`"1) Continue"`(除非您…...
AI软件栈:LLVM分析(六)
LLVM后端代码生成的关键步骤 文章目录 指令选择指令调度寄存器分配 指令选择 完成从基于LLVM IR的DAG转换为基于特定目标平台的DAG(注意,此时描述格式依然是DAG形态)基于TabGen完成指令重映射(典型的处理包括:指令拆散…...
【第十六届 蓝桥杯 省 C/Python A/Java C 登山】题解
题目链接:P12169 [蓝桥杯 2025 省 C/Python A/Java C] 登山 思路来源 一开始想的其实是记搜,但是发现还有先找更小的再找更大的这种路径,所以这样可能错过某些最优决策,这样不行。 于是我又想能不能从最大值出发往回搜…...
Github 热点项目 Jumpserver开源堡垒机让服务器管理效率翻倍
Jumpserver今日喜提160星,总星飙至2.6万!这个开源堡垒机有三大亮点:① 像哆啦A梦的口袋,支持多云服务器一站式管理;② 安全审计功能超硬核,操作记录随时可回放;③ 网页终端无需装插件࿰…...
5V 1A充电标准的由来与技术演进——从USB诞生到智能手机时代的电力革命
点击下面图片带您领略全新的嵌入式学习路线 🔥爆款热榜 88万阅读 1.6万收藏 一、起源:USB标准与早期电力传输需求 1. USB的诞生背景 1996年,由英特尔、微软、IBM等公司组成的USB-IF(USB Implementers Forum)发布了…...
驱动开发硬核特训 · Day 16:字符设备驱动模型与实战注册流程
🎥 视频教程请关注 B 站:“嵌入式 Jerry” 一、为什么要学习字符设备驱动? 在 Linux 驱动开发中,字符设备(Character Device)驱动 是最基础也是最常见的一类驱动类型。很多设备(如 LED、按键、…...
外网如何连接内网中的mysql数据库服务器
一、MySQL 产品简介 mysql是一款数据库产品,它主要用于存储、管理和检索数据,对用户的数据进行存储管理 二、运维人员遇到的问题 当内网服务器部署好mysql数据库后,外网如何安全的访问数据库进行增删改查,是运维人员遇到的一个…...
你的大模型服务如何压测:首 Token 延迟、并发与 QPS
写在前面 大型语言模型(LLM)API,特别是遵循 OpenAI 规范的接口(无论是 OpenAI 官方、Azure OpenAI,还是 DeepSeek、Moonshot 等众多兼容服务),已成为驱动下一代 AI 应用的核心引擎。然而,随着应用规模的扩大和用户量的增长,仅仅关注模型的功能是不够的,API 的性能表…...
4月谷歌新政 | Google Play今年对“数据安全”的管控将全面升级!
大家好,我是牢鹅!每年的Q2季度是Google Play重要政策更新的时间节点,一般都伴随着重磅政策的更新,今年也不例外。4月10日,谷歌政策迎来2025年第二次更新,本次政策更新内容相较3月政策更新,不管是…...
第十四届蓝桥杯 2023 C/C++组 有奖问答
目录 题目: 题目描述: 题目链接: 思路: 核心思路: 思路详解: 代码: 代码详解: 题目: 题目描述: 题目链接: 蓝桥云课 有奖问答 思路&…...
【Redis】SpringDataRedis
Spring Data Redis 使得开发者能够更容易地与 Redis 数据库进行交互,并且支持不同的 Redis 客户端实现,如 Jedis 和 Lettuce。Spring Data Redis 会自动选择一个客户端,通常情况下,Spring Boot 默认使用 Lettuce 作为 Redis 客户端…...
XAttention
XAttention: Block Sparse Attention with Antidiagonal Scoring 革新Transformer推理的高效注意力机制资源 论文链接:XAttention: Block Sparse Attention with Antidiagonal Scoring 代码开源:GitHub仓库 XAttention是韩松团队提…...
07.Python代码NumPy-排序sort,argsort,lexsort
07.Python代码NumPy-排序sort,argsort,lexsort 提示:帮帮志会陆续更新非常多的IT技术知识,希望分享的内容对您有用。本章分享的是NumPy的使用语法。前后每一小节的内容是存在的有:学习and理解的关联性,希望…...
无人机飞控运行在stm32上的RTOS实时操作系统上,而不是linux这种非实时操作系统的必要性
飞控程序需要运行在STM32等微控制器(MCU)的实时操作系统(RTOS)而非Linux等非实时操作系统(如通用Linux内核),主要原因在于实时性、资源占用、硬件适配性以及系统可靠性等方面的实质性差异。以下…...
Leetcode - 周赛446
目录 一、3522. 执行指令后的得分二、3523. 非递减数组的最大长度三、3524. 求出数组的 X 值 I四、3525. 求出数组的 X 值 II 一、3522. 执行指令后的得分 题目链接 本题就是一道模拟题,代码如下: class Solution {public long calculateScore(String…...
Linux——系统安全及应用
目录 一:账号安全控制 1,基本安全措施 系统账号清理 密码安全控制 命令历史,自动注销 2,用户切换与提权 su命令的用法 PAM认证 3,sudo命令——提升执行权限 在配置文件/etc/sudoers中添加授权 通过sudo执行…...
随机面试--<二>
编译安装软件的流程 1-安装所需源代码 2-配置安装环境 3-进行相关设置 4-编译 5-安装 nginx安装新模块的流程 1-准备与原nginx版本相同的源码包,准备模块安装包 2-准备编译安装环境 3-配置参数 来源于nginx -V配置原模块 以及--add-module 增加模块 4-mak…...
LeetCode面试经典 150 题(Java题解)
一、数组、字符串 1、合并两个有序数组 从后往前比较,这样就不需要使用额外的空间 class Solution {public void merge(int[] nums1, int m, int[] nums2, int n) {int l mn-1, i m-1, j n-1;while(i > 0 && j > 0){if(nums1[i] > nums2[j])…...
【技术追踪】Differential Transformer(ICLR-2025)
Differential Transformer:大语言模型新架构, 提出了 differential attention mechanism,Transformer 又多了一个小 trick~ 论文:Differential Transformer 代码:https://github.com/microsoft/unilm/tree/master/Diff…...
报告系统状态的连续日期 mysql + pandas(连续值判断)
本题用到知识点:row_number(), union, date_sub(), to_timedelta()…… 目录 思路 pandas Mysql 思路 链接:报告系统状态的连续日期 思路: 判断连续性常用的一个方法,增量相同的两个列的差值是固定的。 让日期与行号 * 天数…...
【C++类和数据抽象】类的作用域
目录 一、类的作用域基本概念 1.1 什么是类的作用域 1.2 作用域层次体系 1.3 类作用域的特点 1.4 基本访问规则 二、访问控制三剑客 2.1 public:开放接口 2.2 private:数据封装 2.3 protected:继承通道 2.4 跨作用域访问示例 三…...
【区块链技术解析】从原理到实践的全链路指南
目录 前言:技术背景与价值当前技术痛点解决方案概述目标读者说明 一、技术原理剖析核心概念图解核心作用讲解关键技术模块技术选型对比 二、实战演示环境配置要求核心代码实现(10个案例)案例1:创建简单区块链案例2:工作…...
LangGraph(一)——QuickStart样例中的第一步
目录 1. LangGraph简介2. 使用uv初始化项目3. 官网QuickStart——第一步:构建一个ChatBot(仅关注Graph的构建即可)3.1 配置大模型API_KEY3.2 初始化StateGraph3.3 添加chatbot node3.4 添加edges3.5 可视化StateGraph3.6 构建聊天循环 参考 1. LangGraph简介 LangGr…...
spring security +kotlin 实现oauth2.0 认证
基于OAuth 2.0的认证功能实现(Kotlin Spring Security) 以下是使用 AbstractAuthenticationProcessingFilter、AuthenticationProvider、AbstractAuthenticationToken 和 AuthenticationSuccessHandler 实现 OAuth 2.0 认证的完整代码设计。 1. 自定义…...
服务器监控软件推荐
以下是几款常用的服务器监控软件推荐,涵盖开源和商业方案,适用于不同规模和需求: 一、开源免费方案 Prometheus Grafana 特点:时序数据库 可视化仪表盘,支持多维度监控和告警。适用场景:云原生、Kubernet…...
在kali中安装AntSword(蚁剑)
步骤一、下载压缩包 源码:https://github.com/AntSwordProject/antSword,下载压缩包。 加载器:https://github.com/AntSwordProject/AntSword-Loader,根据系统选择压缩包(kali选择AntSword-Loader-v4.0.3-linux-x64&…...
【论文速递】2025年06周 (Robotics/Embodied AI/LLM)
目录 SMOLLM2:当Smol变得大 - 以数据为中心的小语言模型英文摘要中文摘要 OmniHuman-1:重新考虑一阶段的人类动画模型的扩展英文摘要中文摘要 S1:简单的测试时间缩放英文摘要中文摘要 直接对齐算法间的差异日渐模糊英文摘要中文摘要 VideoJAM…...
相机标定(输出相机内参和畸变参数)
相机标定 这里我用笔记本电脑自带的摄像头进行相机标定 仅作示例,实际工程中要用对应的摄像头进行标定 同时代码也要相应的修改,不过修改的主要是相机的初始化 粗略的说就是打开相机那部分要修改(依据实际情况相应修改) 最终的结果…...
Linux-编辑器的使用
实验三 Linux编辑器的使用 一、实验目的 学习使用vi编辑器建立、编辑和保存文本文件。 二、实验内容 1.进入和退出vi。 2.Vi不同工作模式的切换。 3.文本文件基本编辑(光标移动、文本输入、复制、移动、删除、查找、替换)。 4.文本文件的保存和备份。…...
Android开发中的复制和粘贴
Android 提供了一个强大的基于剪贴板的框架,用于复制和粘贴。它支持简单和复杂的数据类型,包括文本字符串、复杂数据结构、文本和二进制流数据,以及应用资源。简单的文本数据直接存储在剪贴板中,而复杂的数据则存储为引用…...
使用 inobounce 解决 iOS 皮筋效果导致的无法下拉刷新
使用 inobounce 解决 iOS 皮筋效果导致的无法下拉刷新 在移动端 H5 页面开发中,iOS 设备的“皮筋效果”(Rubber Band Effect)是一个常见的挑战。当用户在页面顶部下拉或底部上拉时,iOS 会触发整个页面的回弹效果,这不…...
特征选择与类不平衡处理
特征选择与类不平衡处理技术 一、特征选择方法 1. 过滤法(Filter Methods) 原理: 基于统计学方法或特征本身的分布特性独立于模型进行特征筛选,通过计算特征与目标变量的相关性或特征的发散性进行排序选择。 典型方法…...
24、ASP.NET⻚⾯之间传递值的⼏种⽅式
1. QueryString(查询字符串) 描述:通过 URL 参数传递数据,例如 Page2.aspx?id123。 适用场景:简单、非敏感数据,页面跳转时使用。 2. Session(会话) 描述:在服务器端…...
【扩展卡尔曼滤波器实际运用案例】
扩展卡尔曼滤波器 算法描述实际案例 算法描述 考虑离散时间非线性动态系统 { x k 1 f k ( x k , w k ) z k h k ( x k , v k ) \left\{\begin{matrix} x_{k1}f_{k}(x_k,w_k)\\ z_{k}h_{k}(x_k,v_k) \end{matrix}\right. {xk1fk(xk,wk)zkhk(xk,vk) 其中是…...
Centos9 安装 nginx 及配置
1. 安装nginx 安装依赖软件,安装之前可以看一下是否已经安装过以下软件,dnf list installed | grep zlib dnf install gcc-c dnf install zlib dnf install pcre pcre-devel dnf install openssl openssl-devel下载nginx,这里是下载到opt文…...
总结设计测试用例的万能公式
现在有⼀款产品,要求我们对“⻔锁”设计测试⽤例,假如你是测试⼈员,你会怎么设计呢? 1 常规思考逆向思维发散性思维 设计测试⽤例的原则⼆: 1.测试⽤例的编写不仅应当根据有效和预料到的输⼊情况,⽽且也…...
Android RK356X TVSettings USB调试开关
Android RK356X TVSettings USB调试开关 平台概述操作-打开USB调试实现源码补充说明 平台 RK3568 Android 11 概述 RK3568 是瑞芯微(Rockchip)推出的一款高性能处理器,支持 USB OTG(On-The-Go)和 USB Host 功能。US…...
python生成动态库在c++中调用
一.Windows下生成动态库.pyd 在setup.py的同目录下使用python setup.py build_ext --inplace 二.在vscode的c中使用.pyd文件(动态库) 1)配置python的环境 python -c "import sys; print(sys.executable)" #确定python安装位置 2…...
大模型数据味蕾论
大模型数据味蕾论 大模型的成长路径:从婴儿到专家预训练数据的"四维口味"模型从文本到模型:数据处理的关键步骤"大模型数据味蕾论"结语 AI大模型就像一位厨师,预训练数据就是这位厨师的味蕾。 没有经过训练的味蕾&#x…...
网络编程4
day4 一、Modbus 1.分类 (1).Modbus RTU: 运行在串口上的协议,采用二进制表现形式以及紧凑型数据结构,通信效率高,应用广泛。(2).Modbus ASCII: 运行在串口上的协议,采用ASCII码传输,并且利用特殊字符作为其字节的开始…...