云原生系列2-CICD持续集成部署-GitLab和Jenkins

1、CICD持续集成部署

传统软件开发流程:
1、项目经理分配模块开发任务给开发人员(项目经理-开发)
2、每个模块单独开发完毕(开发),单元测试(测试)
3、开发完毕后,集成部署到服务器(测试、运维)
4、测试出现问题,提交bug,开发继续修复bug(开发)
5、bug修改完毕,继续提交测试....
问题:
1、模块之间依赖负载,集成部署经常出问题
2、测试人员经常在等待
3、按时交付也会出问题
思考:
1、测试时间能否提前(开发一提交代码,问题就能直接暴露出来:自动化测试)
2、人工集成部署 ( 能否使用自动化工具部署构建 )

持续集成:简称 CI
思想:每天要多次将代码合并到主干,并进行集成,测试,这样就可以提早发现错误,进行修正。持续集成也属于DevOps运维开发。
CI持续集成的好处:
1、自动化集成部署,提高了集成效率。
2、更快的修复问题。
3、更快的进行交付。
4、提高了产品质量。
持续集成流程:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
DevOps 兴起于2009 年,近年来由于云计算、互联网的发展,促进了DevOps的基础设施及工具链的发展,涌现了一大批优秀的工具,这些工具包括开发,测试,运维的各个领域,例如:GitHub,Git/svn,Docker、Jenkins,HudSon,Ant/Maven/Gradle,QUnit、JMeter等,看下图:
在这里插入图片描述
在这里插入图片描述
这么多软件,按需学习,公司用什么学什么。
测试、部署的逻辑只需要写一遍,就可以自动运行了。
自动化监控平台(短信-)
自动化压测平台

2、GitLab类似github,是个私有仓库

1、GitLab安装,至少8G内存4核cpu

# 查找Gitlab镜像
docker search gitlab/gitlab-ce
# gitlab镜像拉取
docker pull gitlab/gitlab-ce
# 查看镜像
docker images
# 本机先建3个目录,为了gitlab容器通过挂载本机目录启动后可以映射到本机目录
# 配置文件
mkdir -p /home/gitlab/etc
# 数据文件
mkdir -p /home/gitlab/data
# 日志文件
mkdir -p /home/gitlab/logs
# 启动容器 mygitlab,如果不指定--hostname,host默认使用的是容器id访问。
docker run --name mygitlab -d \
--hostname=10.1.1.118 \
-p 4443:443 -p 8888:80 -p 8022:22 \
-v /home/gitlab/etc:/etc/gitlab \
-v /home/gitlab/data:/var/opt/gitlab \
-v /home/gitlab/logs:/var/log/gitlab \
--privileged=true \
gitlab/gitlab-ce:latest
# 动态查看容器日志
docker logs -f mygitlab

配置

# 配置http协议所使用的访问地址,不加端口默认为80
vim /home/gitlab/etc/gitlab.rb  加上下面这一行配置
external_url 'http://10.1.1.118'/home/gitlab/data/gitlab-rails/etc/gitlab.yml,刚才启动容器指定的--hostname可在此配置文件修改配置

2、网页访问登入,http://10.1.1.118:8888
在这里插入图片描述

# 查看root用户默认密码
cat /home/gitlab/etc/initial_root_password
Password: Gsxzpjm/RwJgHlHIUJIOTFvfYnM19sC2VMPM7NTmCng=

登录成功后,修改密码(默认密码24小时有效)
在这里插入图片描述
3、创建项目
在这里插入图片描述
直接像使用github一样,所有操作都一样。

# 本机需要安装git环境
yum install git -y
git --version

克隆项目

# 全局配置
git config --global user.name "Administrator"
git config --global user.email "admin@example.com"
git config --global credential.helper store  #只需要输入一次账户密码信息就会被保存记住# 注意点:需要配置端口8888
git clone http://10.1.1.118:8888/root/base-test.git    #有问题可rm -rf base-test删除项目再克隆一次
cd base-test     # 克隆下来后进入这个项目
# 创建一个分支git switch -c main,这里不创建分支main了,使用默认的master主分支
touch README.md    #创建一个项目
git add .      # git add README.md添加这个项目,git add . 添加当前目录下所有项目
git commit -m "update"  # 提交的信息-m "update"
git push -u origin master  #推送到master主分支

在这里插入图片描述
4、设置免密提交
在这里插入图片描述

[root@node1 ~]# ssh-keygen -t rsa -b 4096 -C "admin@example.com"   -t加密类型,-b加密大小,-C用户信息
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Created directory '/root/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:woYgeVBL3AKa5oQ2Rz722JDGPBaLo26Mqd9XNPzYhcQ admin@example.com
The key's randomart image is:
+---[RSA 4096]----+
|o+o+     .       |
|o=O.=     E      |
|*B+/   . . .     |
|*oB.Bo  + . .    |
|.. ..o+.S= .     |
|+.   . .o o      |
|o+     .         |
|o  .  .          |
|... ..           |
+----[SHA256]-----+
[root@node1 ~]# cat /root/.ssh/id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQDBm6BA8cjS4bjQKOpvReIE8nHEVTnd9tT25jhcxiQU2Epx190bCe/VVxomYQdIFEeECjPzx3TCLMHHxd5rNFaw9hljJwcQuaODmil5g1LmQRFZqnKoTXc9a5VDtW5CZpyGcgrl8lsE2Bgdh95Bmqta64VOhhc5sLjuSY6X5HQjBOvMmg6WetdlAiUIWp4egTXMXzXqCHfRkLw9opuqQpITpCmUOl94PRNG8eqhHGr0o38c/OJmNKDFXx9ouuuRLUJWvmK+qCsyvMTSGlvw3bKxsFGQA2V+Gn6jCgzrEZI1tZakmhoGw8EvuIViRrAjgre1tfzsO424cGGpRElXBHwhYx10NTX+e6HwZfvRznDuPsvkIQ6TlNIX0CIy2UxN63x4w3ZP3kOa+ZL0XTaGbHcxJZ2GUgYjQrHzSbDQ7cKKqiazl2epukcV+osf19QoVnbsg9uIBMC3t+i28fl+byZoJCpxIF+5ItmsyUq770ryKfaWVMrCYI76tMQHFKVE7rEe/fg6c2RwQxcEPfHOl1UN3nVo82x0HfqtMbDRmUdDMJaCf5X/QIS6oKTg7HosjnRb1XOioPAvr8aF2R5Qa3djkFssIj7BdNTia1lg7AuaGypMRIDohbrNOtkspxmVAyw4UQaqMX5buGYdJa+rBHUOK/UAXzj/EGKQCtmlkXGxFQ== admin@example.com

在这里插入图片描述
在这里插入图片描述

3、Jenkins安装

官网地址:https://www.jenkins.io/zh/
在这里插入图片描述
1、通过Docker安装Jenkins

# 创建挂载目录
mkdir -p /var/jenkins_home
chmod 777 /var/jenkins_home
# 安装jenkinsci/blueocean
docker run \-u root \-d \-p 8080:8080 \-p 50000:50000 \-v /var/jenkins_home:/var/jenkins_home \-v /var/run/docker.sock:/var/run/docker.sock \jenkinsci/blueocean[root@node1 ~]# docker ps
CONTAINER ID   IMAGE                 COMMAND                  CREATED         STATUS         PORTS                                                                                      NAMES
c18bf132384c   jenkinsci/blueocean   "/sbin/tini -- /usr/…"   2 minutes ago   Up 2 minutes   0.0.0.0:8080->8080/tcp, :::8080->8080/tcp, 0.0.0.0:50000->50000/tcp, :::50000->50000/tcp   reverent_gould
[root@node1 ~]# docker logs -f c1   动态查看容器日志

2、网页登入,http://10.1.1.118:8080
查看密码,[root@node1 ~]# cat /var/jenkins_home/secrets/initialAdminPassword
在这里插入图片描述
3、进入插件安装页面,安装插件默认是国外网址,先改成国内网址,再安装推荐的所有插件即可。

/var/jenkins_home/updates/default.json  里面默认是国外网址,插件下载慢
#把 “ www.google.com ”  改成  “ www.baidu.com ”
#全局搜索 “ updates.jenkins-ci.org/download ” 替换成 mirrors.tuna.tsinghua.edu.cn/jenkins
cd /var/jenkins_home/updates
sed -i 's/https:\/\/updates.jenkins-ci.org\/download/https:\/\/mirrors.tuna.tsinghua.edu.cn\/jenkins/g' default.json 
sed -i 's/https:\/\/www.google.com/https:\/\/www.baidu.com/g' default.json

在这里插入图片描述
部分插件安装失败不用管,直接点击继续
在这里插入图片描述
4、插件安装完毕,注册登录账户
在这里插入图片描述
5、配置实例的地址
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
6、下载更新插件
插件下载慢问题解决,Manage Plugins点击Advanced,把Update Site改为国内插件下载地址
https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
带感叹号!的,说明插件下载完成等待重启安装
在这里插入图片描述
在这里插入图片描述
检查插件配置,比如要使用的gitlab、docker、webhook之类的。没有的话,需要勾选下载,所有插件都更新到最新版本。
在这里插入图片描述
在这里插入图片描述
插件安装完重启,重启容器会挂掉,再启动容器就好了,重启后再次网页登入

[root@node1 updates]# docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
[root@node1 updates]# docker ps -a
CONTAINER ID   IMAGE                 COMMAND                  CREATED       STATUS                      PORTS     NAMES
c18bf132384c   jenkinsci/blueocean   "/sbin/tini -- /usr/…"   2 hours ago   Exited (5) 31 seconds ago             reverent_gould
[root@node1 updates]# docker start c1

在这里插入图片描述
7、创建流水线工程
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

pipeline {agent { docker 'maven:3.3.3' }stages {stage('build') {steps {sh 'mvn --version'}}}
}

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
双击进入此页面,右上角可叉掉
在这里插入图片描述
在这里插入图片描述

4、Jenkins使用

Jenkins基本指令,可参照官网学习,https://www.jenkins.io/zh/doc/pipeline/tour/hello-world/
Jenkins Pipeline(或简称为 “Pipeline”)是一套插件,将持续交付的实现和实施集成到 Jenkins 中。持续交付 Pipeline 自动化的表达了这样一种流程:将基于版本控制管理的软件持续的交付到您的用户和消费者手中。
Jenkins Pipeline 提供了一套可扩展的工具,用于将“简单到复杂”的交付流程实现为“持续交付即代码”。Jenkins Pipeline 的定义通常被写入到一个文本文件(称为 Jenkinsfile )中,该文件可以被放入项目的源代码控制库中。
1、创建流水线任务(Hello,Jenkins)
在这里插入图片描述

pipeline {agent { docker 'maven:3.3.3'}  // agent定义环境,这里可理解为docker runstages {stage('Build') { steps {// 具体的执行逻辑 shell命令sh 'mvn -version'}}}
}

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
如果出现了错误,就会出现红色报错。

pipeline {agent { docker 'maven:3.3.3'}  // agent定义环境,这里可理解为docker runstages {stage('Build') { steps {// 具体的执行逻辑 shell命令sh 'mvn -version'sh 'docker version'  //会报错,启动的容器里面没有docker}}}
}

在这里插入图片描述
在这里插入图片描述
2、重试retry、超时timeout
将agent环境修改为any(any是默认的linux环境)

pipeline {agent anystages {stage('Deploy') {   //Deploy部署,不是Build构建了steps {// 重试,连续执行多次,如果不成功就停止了。retry(3){  //重试3次就停止了sh './start.sh'  // 测试脚本}}}}
}

在这里插入图片描述

pipeline {agent anystages {stage('Deploy') {   //Deploy部署,不是Build构建了steps {// 超时,超过预期的时间,就会自动终止。支付、回调等场景。timeout(time: 10,unit: 'SECONDS'){  //分钟 MINUTESsh './health-check.sh' // 测试脚本}}}}
}

在这里插入图片描述

pipeline {agent anystages {stage('Deploy') {   //Deploy部署,不是Build构建了steps {// 超时,超过预期的时间,就会自动终止。支付、回调等场景。timeout(time: 10,unit: 'SECONDS'){  //分钟 MINUTESsh 'ping www.baidu.com' }}}}
}

在这里插入图片描述
3、钩子函数post,生命周期的函数
pipeline 执行到某个步骤的时候,来做一些事情。

pipeline {agent anystages {stage('Test') { steps {sh 'testfail'  //没有此命令会执行失败}}}// 钩子函数,比如执行结果不同,我们可以处理一些善后工作post {// 行为always {echo 'always'}success {echo 'success'}failure {echo 'failure'}unstable {echo 'unstable'}changed {echo 'changed'}}
}

在这里插入图片描述

pipeline {agent anystages {stage('Test') { steps {sh 'echo  11'  //成功执行}}}// 钩子函数,比如执行结果不同,我们可以处理一些善后工作post {// 行为always {echo 'always'}success {echo 'success'}failure {echo 'failure'}unstable {echo 'unstable'}changed {echo 'changed'}}
}

在这里插入图片描述
4、定义执行环境agent,将agent环境修改为any(any是默认的linux环境)
agent 指令告诉Jenkins在哪里以及如何执行Pipeline或者Pipeline子集。所有的Pipeline都需要 agent 指令。在执行引擎中,agent 指令会引起以下操作的执行:
1、所有在块block中的步骤steps会被Jenkins保存在一个执行队列中。 一旦一个执行器 executor 是可以利用的,这些步骤将会开始执行。
2、一个工作目录workspace(/var/jenkins_home/workspace) 将会被分配, 工作空间中会包含来自远程仓库的文件和一些用于Pipeline的工作文件。
在Pipeline中可以很容易的运行 Docker 镜像和容器。 Pipeline可以定义命令或者应用运行需要的环境和工具, 不需要在执行代理中手动去配置各种各样的系统工具和依赖。这种方式可以让你使用 Docker容器工具包 中的任何工具。

pipeline {agent {docker { image 'node:7-alpine' }}stages {stage('Test') {steps {sh 'node --version'}}}
}

在这里插入图片描述

如果是其他环境,就配置其他的运行镜像即可,默认any(linux环境)。
pipeline{agent {docker { image '***:version' }}stages{  // 执行步骤dockerfiledockercomposeshell其他程序相关的命令.....}
}

5、环境变量environment
全局的环境变量,在所有的 steps 步骤都可以使用。像linux中profile文件、docker --env都是定义环境变量的。很多命令会使用环境变量,可以在这里定义。

pipeline {agent any // 环境变量的定义environment{DB_ENGINE = 'sqlite'DB_PASSWORD='123456'}   stages {stage('Build') {steps {   // 在steps步骤中使用环境变量sh 'echo $DB_ENGINE'sh 'echo $DB_PASSWORD'}}}
}

在这里插入图片描述
6、多步骤

// 最外层 pipeline
pipeline {// agent 环境agent any// 步骤集合stages {// 分步骤stage('Build') {  // 构建项目// 具体的步骤steps {// 具体的执行逻辑 shell命令sh 'echo Build'  // Dockerfile、构建相关工作}}// 分步骤stage('Test') {  // 测试项目// 具体的步骤steps {// 具体的执行逻辑 shell命令sh 'echo Test'   // shell测试、web测试、压测}}// 分步骤stage('Deploy') {  // 部署// 具体的步骤steps {// 具体的执行逻辑 shell命令sh 'echo Deploy'   // 访问、集群、liunx}}}
}

在这里插入图片描述
在这里插入图片描述
7、人工确认
通常在阶段之间,特别是不同环境阶段之间,可能需要人工确认是否可以继续运行。 例如,判断应用程序是否在一个足够好的状态可以进入到生产环境阶段。 这可以使用 input 步骤完成。 在下面的例子中,“Sanity check” 阶段会等待人工确认,并且在没有人工确认的情况下不会继续执行。

pipeline {agent anystages {stage('Deploy - Staging') {steps {echo 'curl '}}stage('Sanity check') {steps {// 人工确认input "Does the staging environment look ok?"}}stage('Deploy - Production') {steps {echo 'Deploy - Production'}}}
}

在这里插入图片描述
在这里插入图片描述

5、webhook触发器

构建触发器,自动触发构建执行,有一个 webhook 触发器。测试环境关闭防火墙让容器之间互通。
逻辑:提交代码后,jenkins能够自动感知到代码提交了,流水线工程(项目打包,构建镜像,运行容器,测试接口,人工确认,部署上线)就会自动执行。
开发git提交代码push推送到仓库gitlab,仓库gitlab绑定jenkins触发器webhook,jenkins触发器webhook检测到仓库gitlab代码发生变化,会自动执行jenkins的流水线任务(pipeline)。在cicd链上,部署、测试脚本都要提前写好,一次写好,终身运行。
在这里插入图片描述
在这里插入图片描述
jenkins就发出了一个触发器命令,需要gitlab代码仓库那边配置触发
gitlab账户允许配置
在这里插入图片描述
项目中配置webhook
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

6、流水线项目

流水线项目官方文档:https://www.jenkins.io/zh/doc/tutorials/build-a-java-app-with-maven/
1、clone克隆GitHub示例仓库到本地,然后push到自己的gitlab仓库中

git clone https://github.com/jenkins-docs/simple-java-maven-app.git
mv simple-java-maven-app simple-java-maven-app2
git clone http://10.1.1.118:8888/root/simple-java-maven-app.git
cp -r simple-java-maven-app2/* simple-java-maven-app/cd simple-java-maven-app
git add .
git commit -m "add"
git push -u origin master

在这里插入图片描述
在这里插入图片描述
2、在 jenkins 创建流水线项目 simple-java-maven-app
在这里插入图片描述
在这里插入图片描述
配置绑定git
在这里插入图片描述
添加git仓库登录凭证
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
测试构建
在这里插入图片描述
在这里插入图片描述
Docker maven构建很慢,需要配置镜像加速,可以自己定义settings文件,然后识别。
编写一个 settings.xml 放到项目下

<?xml version="1.0" encoding="UTF-8"?>
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd"><mirrors><mirror><id>nexus-aliyun</id>  <mirrorOf>*,!jeecg,!jeecg-snapshots</mirrorOf>  <name>Nexus aliyun</name>  <url>http://maven.aliyun.com/nexus/content/groups/public</url>  </mirror></mirrors>
</settings>

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
修改 Jenkinsfile,指定我们自己写的 settings.xml

pipeline {agent {docker {image 'maven:3-alpine'args '-v /root/.m2:/root/.m2'}}stages {stage('Build') {// 在原来的基础上增加 -gs settings.xml 指定我们的配置steps {sh 'mvn -B -gs settings.xml -DskipTests clean package'              }}}
}

在这里插入图片描述
提交到远程,再次测试构建
在这里插入图片描述
开发提交代码后,自动构建并运行测试。
在这里插入图片描述
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数据治理与大模型一体化实践

引言: 大模型落地到当前这个阶段&#xff0c;核心关注点还是领域大模型&#xff0c;而领域大模型落地的前提在于两点&#xff1a;需求端&#xff0c;对当前应用的降本增效以及新应用的探索&#xff1b;供给端&#xff0c;训练技术已经有较高的成熟度。 专家介绍&#xff1a; …

2023 英特尔On技术创新大会直播 |探索视觉AI的无限可能

2023 英特尔On技术创新大会直播 | 探索视觉AI的无限可能 前言一未来的 AI&#xff1a;释放视觉 AI 真正潜力二AI技术突破、视觉Al挑战及前沿研究创新三全尺度视觉学习全尺度视觉学习示例1.GridConv 实现三维人体姿态估计更高准确率2.KW 预训练及迁移模型性能3.无数据增强稠密对…

linux搭建gitlab

gitlab的介绍 区别于github&#xff0c;github是面向互联网基于git实现的代码托管平台&#xff0c;gitlab是基于Ruby语言实现的git管理平台软件&#xff0c;一般用于公司内部代码仓库。 gitlab组成 Nginx 静态Web服务器Gitlab-workhorse 轻量级的反向代理服务器Gitlab-shell 用…

TikTok获客工具定制开发怎么做?

随着社交媒体的兴起&#xff0c;越来越多的企业开始把目光投向了海外市场&#xff0c;而在这个数字化时代&#xff0c;TikTok已经成为了一个备受欢迎的短视频平台&#xff0c;不仅吸引了大量的年轻用户&#xff0c;也成为了许多企业的新宠。 但是&#xff0c;如何在TikTok上获…

全球移动通信(2G/3G/4G/5G)频谱分布情况

一、概述 随着通信技术的不断发展&#xff0c;全球各国都在积极推进2G、3G、4G、5G网络的建设和应用。根据FCC统计&#xff0c;目前全球移动通信频谱分布如下&#xff1a; 二、分布 &#xff08;一&#xff09;俄罗斯 2G&#xff1a;主要使用900MHz和1800MHz两个频段。其中&…

jvm相关命令操作

查看jvm使用情况 jmap -heap PID 查看线程使用情况 jstack pid 查看当前线程数 jstack 21294 |grep -E (#[0-9]) -o -c 查看系统线程数 top -H top -Hp pid #查看具体的进程中的线程信息 使用 jps 命令查看配置了JVM的服务 查看某个进程JVM的GC使用情况 jstat -gc 进程…

算法基础之约数个数

约数个数 核心思想&#xff1a; 用哈希表存每个质因数的指数 然后套公式 #include <iostream>#include <algorithm>#include <unordered_map>#include <vector>using namespace std;const int N 110 , mod 1e9 7;typedef long long LL; //long l…

链接未来:深入理解链表数据结构(一.c语言实现无头单向非循环链表)

在上一篇文章中&#xff0c;我们探索了顺序表这一基础的数据结构&#xff0c;它提供了一种有序存储数据的方法&#xff0c;使得数据的访 问和操作变得更加高效。想要进一步了解&#xff0c;大家可以移步于上一篇文章&#xff1a;探索顺序表&#xff1a;数据结构中的秩序之美 今…

Linux 音视频SDK开发实践

一、兼容性适配处理 为什么需要兼容处理&#xff1f; 1、c兼容处理 主要有ABI兼容性问题&#xff0c;不同ubuntu系统依赖的ABI版本如下&#xff1a; ubuntu 18.04ubuntu 16.04ubuntu 14.04g7.55.44.8stdc版本libstdc.so.6.0.25libstdc.so.6.0.21libstdc.so.6.0.19GLIBCXXG…

org.slf4j日志组件实现日志功能

slf4j 全称是Simple Logging Facade for Java。facade是一种设计模式。 slf4j 是一个抽象程度更高的日志组件&#xff0c;本身并不提供实际的日志功能。实际的日志功能是通过log4j等日志组件实现&#xff0c;而使用者只需要关心 slf4j 给出的API。 slf4j 仅仅是一个为Java程序提…

STM32-ADC模数转换器

目录 一、ADC简介 二、逐次逼近型ADC内部结构 三、STM32内部ADC转换结构 四、ADC基本结构 五、输入通道 六、转换模式 6.1单次转换&#xff0c;非扫描模式 6.2连续转换&#xff0c;非扫描模式 6.3单次转换&#xff0c;扫描模式 6.4连续转换&#xff0c;扫描模式 七、…

QT打包exe文件,在其它电脑里双击exe就可以直接运行

想要不依赖QT环境&#xff0c;在其它电脑里直接双击exe文件就可以运行当前程序。具体打包过程如下&#xff1a; 使用QT编译出release版本的exe release版本运行无误后&#xff0c;需要找到当前构建生成的exe所在文件夹 可以看到具体目录在这里 我在该目录下的bin文件夹里找到…

高速视频采集卡设计方案:620-基于PCIe的高速视频采集卡

一、产品概述 基于PCIe的高速视频采集卡&#xff0c;通过PCIe3.0X8传输到存储计算服务器&#xff0c;实现信号的分析、存储。 北京太速科技 产品固化FPGA逻辑&#xff0c;适配视频连续采集&#xff0c;缓存容量2GB&#xff0c;开源的PCIe QT客户端软件&#xff0c…

在mt4上怎么查看CHFJPY品种的合约细则?

在MetaTrader 4 (MT4) 上查看CHFJPY品种的合约细则的方法如下&#xff1a; FXCM福汇官方个人注册登录流程 1.打开MT4软件并登录到您的交易账户。 2.在MT4界面的"市场观察"窗格中&#xff0c;找到并右键单击"CHFJPY"货币对。如果您无法找到"市场观察…

Transformer Decoder的输入

大部分引用参考了既安的https://www.zhihu.com/question/337886108/answer/893002189这篇文章&#xff0c;个人认为写的很清晰&#xff0c;此外补充了一些自己的笔记。 弄清楚Decoder的输入输出&#xff0c;关键在于图示三个箭头的位置&#xff1a; 以翻译为例&#xff1a; 输…

MyBatis ORM映射

MyBatis只能自动维护库表”列名“与”属性名“相同时的对应关系&#xff0c;二者不同时无法自动ORM 因此需要使用到ORM映射。 共有两种解决办法&#xff1a;1.列的别名 2.结果映射 1.列的别名 在SQL中使用 as 为查询字段添加列别名&#xff0c;以匹配属性名 public List<…

Kafka--Kafka日志索引详解以及生产常见问题分析与总结

一、Kafka的Log日志梳理 ​ 这一部分数据主要包含当前Broker节点的消息数据(在Kafka中称为Log日志)。这是一部分无状态的数据&#xff0c;也就是说每个Kafka的Broker节点都是以相同的逻辑运行。这种无状态的服务设计让Kafka集群能够比较容易的进行水平扩展。比如你需要用一个新…

VSCode报错插件Error lens

1.点击左侧扩展图标→搜索“error lens”→点击“安装” 2.安装成功页面如下&#xff1a; 3.代码测试一下&#xff1a;书写代码的过程中会出现红色提醒或红色报错 4.另外推荐小伙伴们安装中文插件&#xff0c;学习过程中会比较实用方便&#xff0c;需要安装中文插件的小伙伴请点…

详解数据科学自动化与机器学习自动化

过去十年里&#xff0c;人工智能&#xff08;AI&#xff09;构建自动化发展迅速并取得了多项成就。在关于AI未来的讨论中&#xff0c;您可能会经常听到人们交替使用数据科学自动化与机器学习自动化这两个术语。事实上&#xff0c;这些术语有着不同的定义&#xff1a;如今的自动…

安卓手机语音备忘录在哪里?

我们在日常生活和工作中&#xff0c;使用手机记事的时候&#xff0c;不仅需要在备忘录或便签软件中记录文字、图片&#xff0c;有时候我们也需要记录语音或音频文件。那么安卓手机语音备忘录在哪里呢&#xff1f;其实绝大多数的安卓手机中都是没有专门的语音备忘录的&#xff0…