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

GitHub Actions的 CI/CD

GitHub Actions 是一个强大的 CI/CD 工具,适用于自动化各种开发任务。GitHub Actions 的原理是基于事件驱动的自动化流水线工具,通过定义触发条件和执行步骤,可以让项目在特定条件下自动运行一系列操作,比如构建、测试、部署等。

GitHub Actions 的核心组成部分

  1. 事件(Events)

    • GitHub Actions 是由事件触发的,例如代码推送、分支合并、创建 PR、发布 Release 等。事件定义了触发工作流的条件。
    • 例如,on: push 会在代码推送时触发,而 on: pull_request 则在提交 PR 时触发。
  2. 工作流(Workflow)

    • 工作流是由一个或多个任务(Job)构成的 YAML 文件,通常位于 .github/workflows 目录中。
    • 工作流定义了在某个事件触发时应该执行的任务,比如构建、测试、发布等步骤。
  3. 任务(Jobs)

    • 任务是工作流中的一个独立执行单元,每个任务可以包含一系列的步骤(Steps)。任务通常在不同的虚拟机环境上运行,默认是并行执行的,但也可以设置任务之间的依赖关系。
    • 每个任务定义了一个执行环境(如 runs-on: ubuntu-latest),可以在该环境中运行一组脚本或调用外部的 Action。
  4. 步骤(Steps)

    • 步骤是在任务中执行的最小操作单位,每个步骤可以运行 shell 命令或使用已有的 Action(预构建的模块化代码)。
    • 每个步骤都是顺序执行的,后续步骤可以依赖前面步骤的输出。
  5. Actions(Action)

    • Actions 是预构建的模块化代码,用于执行特定任务,如配置环境、部署、发送通知等。GitHub 提供了许多官方 Actions,同时用户也可以发布或使用第三方的 Actions。
    • uses 关键字引用这些 Actions,执行一个特定的功能。

GitHub Actions 的执行过程

  1. 事件监听:当 GitHub 发生一个事件(如推送、PR),GitHub Actions 会检查是否有工作流定义了对应的触发条件。

  2. 启动工作流:如果事件匹配,GitHub Actions 会启动该工作流,并按配置文件执行工作流中的任务。

  3. 分配执行环境:每个任务分配一个独立的虚拟环境(如 Ubuntu、macOS、Windows),并在该环境中执行任务步骤。

  4. 执行步骤:每个任务中的步骤按顺序执行,可以包括运行 shell 命令、下载依赖、构建项目等。

  5. 处理依赖与数据传递:步骤之间的数据可以通过输出变量共享,任务之间也可以通过 needs 指定依赖关系,完成复杂的自动化流程。

  6. 生成报告与输出:工作流完成后,GitHub Actions 会生成详细的运行日志,并报告是否成功完成。管理员可以在日志中查看各个步骤的输出,帮助调试和优化工作流。

GitHub Actions 的运行架构

GitHub Actions 的底层架构使用 GitHub 托管的服务器资源(GitHub-hosted runners)来运行工作流。GitHub 托管的 runners 提供了标准的执行环境,包括操作系统和预安装的软件,支持不同的平台。用户也可以自定义并托管自己的 runners。

GitHub Actions 的主要优势

  • 自动化流程:通过工作流文件自动触发代码的构建、测试和发布。
  • 模块化、可重用的 Actions:允许用户在不同工作流中重用代码,提高效率。
  • 多平台支持:支持多种操作系统环境(Ubuntu、Windows、macOS)。
  • 集成与数据共享:支持任务与步骤间的数据共享,方便复杂任务的编排。

✨GitHub Actions 和 vitepress 搭建个人博客

1. GitHub Actions 基础

GitHub Actions 通过工作流(workflow)实现自动化。每个工作流包含触发事件、作业(job)和步骤(step)三个核心要素:

  • 触发事件:指定哪些事件会触发工作流,比如 pushpull_requestrelease 等。
  • 作业:一个工作流可以包含多个作业。每个作业可以并行执行,但各步骤是按顺序执行的。
  • 步骤:步骤是作业中的具体操作,通常是运行命令或执行自定义的脚本。

2. 创建 GitHub Actions 工作流文件

要开始使用 GitHub Actions,需要在项目中创建一个 .yml 文件,位于 .github/workflows 目录中。

示例 .github/workflows/ci.yml 文件:

https://vitepress.dev/

# 构建 VitePress 站点并将其部署到 GitHub Pages 的示例工作流程
name: Deploy VitePress site to Pageson:# 在针对 `main` 分支的推送上运行。如果你# 使用 `master` 分支作为默认分支,请将其更改为 `master`push:branches: [main]# 允许你从 Actions 选项卡手动运行此工作流程workflow_dispatch:# 设置 GITHUB_TOKEN 的权限,以允许部署到 GitHub Pages
permissions:contents: readpages: writeid-token: write# 只允许同时进行一次部署,跳过正在运行和最新队列之间的运行队列
# 但是,不要取消正在进行的运行,因为我们希望允许这些生产部署完成
concurrency:group: pagescancel-in-progress: falsejobs:# 构建工作build:runs-on: ubuntu-lateststeps:- name: Checkoutuses: actions/checkout@v4with:fetch-depth: 0 # 如果未启用 lastUpdated,则不需要# - uses: pnpm/action-setup@v3 # 如果使用 pnpm,请取消此区域注释#   with:#     version: 9# - uses: oven-sh/setup-bun@v1 # 如果使用 Bun,请取消注释- name: Setup Nodeuses: actions/setup-node@v4with:node-version: 20cache: npm # 或 pnpm / yarn- name: Setup Pagesuses: actions/configure-pages@v4- name: Install dependenciesrun: npm ci # 或 pnpm install / yarn install / bun install- name: Build with VitePressrun: npm run docs:build # 或 pnpm docs:build / yarn docs:build / bun run docs:build- name: Upload artifactuses: actions/upload-pages-artifact@v3with:path: docs/.vitepress/dist# 部署工作deploy:environment:name: github-pagesurl: ${{ steps.deployment.outputs.page_url }}needs: buildruns-on: ubuntu-latestname: Deploysteps:- name: Deploy to GitHub Pagesid: deploymentuses: actions/deploy-pages@v4# 输出页面的URL- name: Output page URLrun: echo "Page URL: ${{ steps.deployment.outputs.page_url }}"

url: ${{ steps.deployment.outputs.page_url }} 用于动态地获取部署完成后生成的页面URL。这通常用于在工作流程完成后通知某个地方或某个步骤有关页面的最终URL

3. 定义事件和作业步骤

  • 事件定义on 关键字定义触发工作流的事件,比如 pushmain 分支时,或创建 pull_request 时触发工作流。
  • 作业配置jobs 关键字定义作业名称和运行环境(runs-on),可以是 ubuntu-latest 或其他环境。
  • 步骤执行steps 中定义了具体执行的步骤,如代码检出、设置 Node.js 版本、安装依赖、运行测试和构建项目等。

4. 使用 GitHub Actions 服务器或自托管服务器

GitHub 提供免费的 Actions 服务器资源,但也可以使用自托管服务器。在 runs-on 配置中,可以选择 GitHub 的服务器(如 ubuntu-latest),或指定一个自托管服务器(self-hosted)。

5. 执行和监控工作流

每当代码被推送到 main 分支时,这个工作流都会自动触发,安装依赖、运行测试、构建项目并准备部署。可以在 GitHub 项目的 “Actions” 标签页中查看每个步骤的执行状态和输出日志,以便调试和监控工作流。

GitHub Actions 中的 uses 关键字

用于指定要使用的 预构建 Actions。这些 Actions 可以执行各种任务(如配置环境、上传文件等),并简化复杂的工作流。以下是您提到的几个常用 Actions 及其用途、最新版本和文档链接。

1. actions/configure-pages

  • 描述:专为 GitHub Pages 配置环境。它会自动设置合适的环境变量,以便后续步骤能够正确识别 GitHub Pages 的配置需求。
  • 示例uses: actions/configure-pages@v4
  • 常用版本:v4
  • 官方文档:actions/configure-pages

2. actions/setup-node

  • 描述:设置 Node.js 环境,支持指定 Node.js 版本、缓存依赖等,适用于需要 Node.js 环境的构建和测试。
  • 示例uses: actions/setup-node@v4
  • 常用版本:v4
  • 官方文档:actions/setup-node

3. actions/upload-pages-artifact

  • 描述:上传静态站点的构建产物(artifact),使其可以在 GitHub Pages 部署工作流中被后续步骤使用。
  • 示例uses: actions/upload-pages-artifact@v3
  • 常用版本:v3
  • 官方文档:actions/upload-pages-artifact

4. actions/deploy-pages

  • 描述:用于将 GitHub Pages 的构建产物部署到 GitHub Pages。这是 GitHub Pages 官方推荐的部署方式。
  • 示例uses: actions/deploy-pages@v4
  • 常用版本:v4
  • 官方文档:actions/deploy-pages

官方 GitHub Actions 文档

在 GitHub Actions 官方市场中可以找到更多 Actions,查看所有可用 Actions 及其文档:GitHub Marketplace。


✨ 集成到 Docker Hub

为了通过 GitHub Actions 配置 Docker 构建和推送到 Docker Hub,我们可以在原有工作流的基础上添加一个用于构建和发布 Docker 镜像的 docker-publish.yml 文件。该文件会构建 Docker 镜像并将其推送到 Docker Hub。下面是详细配置:

✨ Dockerfile

先创建 Dockerfile 文件,确保 VitePress 站点的构建目录和依赖正确地包含在镜像中。此文件位于项目根目录。

# 使用 Node.js 基础镜像
FROM node:20# 创建工作目录
WORKDIR /app# 复制项目文件到容器
COPY . .# 安装依赖
RUN npm ci# 构建 VitePress 站点
RUN npm run docs:build# 启动 nginx 或配置其他静态服务器
# 可以使用 serve 或其他方法来提供静态文件
RUN npm install -g serve
CMD ["serve", "-s", "docs/.vitepress/dist"]# 开放端口(可以根据需要更改)
EXPOSE 3000

docker-publish.yml

https://github.com/docker/login-action?tab=readme-ov-file
https://docs.docker.com/security/for-developers/access-tokens/

接下来,在 .github/workflows 目录下创建 docker-publish.yml 文件。它定义了 GitHub Actions 工作流,用于构建并推送 Docker 镜像到 Docker Hub。

name: Build and Push Docker Imageon:push:branches: [main]# 允许从 Actions 页面手动触发workflow_dispatch:jobs:build-and-publish:runs-on: ubuntu-lateststeps:- name: Checkout codeuses: actions/checkout@v4# - name: Log in to Docker Hub#   uses: docker/login-action@v2#   with:#     username: ${{ secrets.DOCKER_USERNAME }}#     password: ${{ secrets.DOCKERHUB_TOKEN }}- name: Login to Docker Hubuses: docker/login-action@v3with:username: ${{ vars.DOCKERHUB_USERNAME }}password: ${{ secrets.DOCKERHUB_TOKEN }}- name: Build Docker imagerun: |docker build -t ${{ vars.DOCKERHUB_USERNAME }}/vitepress-site:latest .- name: Push Docker imagerun: |docker push ${{ vars.DOCKERHUB_USERNAME }}/vitepress-site:latest

配置说明

  • Dockerfile:用于定义 Docker 镜像的构建过程,先安装依赖并构建站点,使用 serve 工具提供静态文件的服务。
  • docker-publish.yml
    • actions/checkout@v4:从 GitHub 仓库中检出代码。
    • docker/login-action@v2:使用 GitHub Secrets 中存储的 Docker Hub 凭证登录。
    • docker builddocker push:构建并推送 Docker 镜像到 Docker Hub,镜像标签为 latest

设置 GitHub Secrets

将 Docker Hub 用户名和密码添加到 GitHub Secrets:

  1. 在 GitHub 仓库中,点击 Settings > Secrets and variables > Actions
  2. 添加以下 Secrets:
    • DOCKER_USERNAME:您的 Docker Hub 用户名
    • DOCKER_PASSWORD:您的 Docker Hub 密码
    • DOCKERHUB_TOKEN:您的 Docker Hub token

配置完成后,GitHub Actions 将在每次推送到 main 分支时,自动构建 Docker 镜像并推送到 Docker Hub。

Variables 部分

  1. Settings 页面左侧菜单中找到 Secrets and variables 并点击进入。
  2. Variables 标签下,你可以看到所有已定义的变量。
    • DOCKERHUB_USERNAME:您的 Docker Hub 用户名
steps:

具体的工作步骤:

  • Checkout code

    • 使用 actions/checkout@v4 动作来检出仓库中的代码。这一步是为了获取将要构建和推送的代码。
  • Login to Docker Hub

    • 使用 docker/login-action@v3 动作来登录到Docker Hub。这里使用了仓库变量 DOCKERHUB_USERNAME 和秘密 DOCKERHUB_TOKEN 来提供登录所需的凭证。
  • Build Docker image

    • 使用shell命令来构建Docker镜像。构建命令使用了 docker build,并将构建的镜像标记为 ${{ vars.DOCKERHUB_USERNAME }}/vitepress-site:latest。这里的 . 表示构建上下文是当前目录。
  • Push Docker image

    • 使用shell命令来推送构建好的Docker镜像到Docker Hub。推送命令使用了 docker push,将标记为 ${{ vars.DOCKERHUB_USERNAME }}/vitepress-site:latest 的镜像推送到Docker Hub。

✨ 编辑 Dockerfile 和 GitHub Actions 工作流文件,提供语法提示和格式检查。以下是一些推荐的资源:

1. Dockerfile 编辑和语法提示

  • Dockerfile Linter:

    • Hadolint:一个流行的 Dockerfile 语法检查工具,可以通过命令行或集成到 CI/CD 工具中使用。可以在本地安装并运行,也可以使用其在线版本。
  • Online Dockerfile Editor:

    • Dockerfile Generator: 提供简单的在线 Dockerfile 编辑和生成工具,能够快速构建 Dockerfile 结构。

2. GitHub Actions 编辑和语法提示

  • GitHub Actions Toolkit:

    • GitHub Actions Toolkit: 提供了用于创建自定义 GitHub Actions 的工具库,文档中包含许多示例和用法,可以帮助理解 Actions 的语法。
  • GitHub Actions Workflow Syntax:

    • GitHub Actions Documentation: 官方文档中提供了完整的 GitHub Actions 语法参考和示例,适合查阅具体的配置项。
  • YAML Linter:

    • YAML Lint: 在线 YAML 语法检查工具,可以用来检查 GitHub Actions 工作流文件的格式和语法错误。

3. IDE 和代码编辑器的支持

许多现代的 IDE 和代码编辑器(如 Visual Studio Code)都提供了 Dockerfile 和 YAML(GitHub Actions 使用的格式)语法高亮和补全功能。

  • Visual Studio Code:

    • 安装 Docker 扩展:为 Dockerfile 提供语法高亮和提示。
    • 安装 YAML 扩展:提供 YAML 文件的语法检查和自动补全。
  • JetBrains 系列(如 IntelliJ IDEA, PyCharm):

    • 提供内置的 Docker 和 YAML 支持,可以进行 Dockerfile 和 GitHub Actions 文件的编辑。

4. 代码片段和示例库

  • GitHub 示例库:
    • Awesome Actions:一个集合了许多有用 GitHub Actions 示例的库,可以参考他人的工作流文件。

这些工具和资源可以帮助你更轻松地编写和验证 Dockerfile 和 GitHub Actions 工作流文件的语法和结构。


GitHub Actions 的虚拟化和容器化

GitHub Actions 的底层支持多种操作系统环境(如 Ubuntu、Windows、macOS),这是因为其架构基于虚拟化和容器化技术,使得其可以灵活地配置和分配不同操作系统的运行环境。以下是 GitHub Actions 底层支持多操作系统环境的核心原理:

1. 基于虚拟化和容器化的运行环境

GitHub Actions 使用虚拟机(VM)和容器化技术来支持不同的操作系统环境,包括 Ubuntu、Windows 和 macOS。这些虚拟化技术使得 GitHub 能够为每个任务分配一个独立的环境,隔离不同工作流的运行,确保安全性和一致性。

  • 虚拟机(VM):GitHub Actions 使用虚拟机来模拟不同的操作系统。比如 Ubuntu 和 Windows 是使用 Azure 的虚拟机来提供,而 macOS 也使用类似虚拟化技术来提供隔离的运行环境。
  • 容器化技术:GitHub Actions 也允许用户在工作流中运行容器(Docker),这使得用户可以定义自定义的环境,无论是 Linux 还是其他兼容的系统,进一步增加了灵活性。

2. GitHub-hosted Runners

GitHub 提供了一种叫 GitHub-hosted runners 的服务器池,包含了不同操作系统的运行环境,每次任务运行时会分配相应的 runner。GitHub-hosted runners 是 GitHub 官方管理和维护的,它们会定期更新,并且预安装了开发所需的常用软件和工具,以便不同操作系统的用户都能无缝使用。

  • Ubuntu runners:这些是基于 Linux 的虚拟机,提供了最新的 Ubuntu LTS 版本。
  • Windows runners:这些基于 Windows Server 操作系统,支持 Windows 特有的命令和开发工具。
  • macOS runners:这些运行在 macOS 虚拟化环境中,支持 macOS 原生的开发工具和 SDK,比如 Xcode。

3. 自定义 Self-hosted Runners

GitHub Actions 还允许用户配置 self-hosted runners,即在用户自定义的物理或云端服务器上运行 GitHub Actions 工作流的环境。通过 self-hosted runners,用户可以选择任意操作系统(包括较旧的系统或自定义 Linux 发行版)来配置自己需要的环境。

  • 允许自定义硬件配置以满足特定的性能需求。
  • 自定义操作系统,能够配置专用的开发或测试环境,适用于特殊的 CI/CD 需求。

4. 任务调度与分发系统

GitHub Actions 底层有一个 任务调度与分发系统,它根据工作流配置文件中的 runs-on 参数来分发任务。这意味着,用户在工作流中指定 runs-on: ubuntu-latest,调度系统就会为其分配一个 Ubuntu 虚拟机,而 runs-on: windows-latest 则会分配一个 Windows 环境。调度系统确保任务在指定的操作系统环境中运行,并且能够进行有效的资源分配和监控。

5. 基于虚拟机快照的快速部署

GitHub-hosted runners 是基于虚拟机快照(或模板)进行快速部署的,这样可以减少启动时间。例如,GitHub 在 Azure 等云服务上预先配置了 Ubuntu、Windows、macOS 环境快照,并安装了开发常用的工具和依赖。每当有新任务触发,系统会从快照中快速启动一个新的虚拟机实例,缩短了用户等待的时间,并且确保所有任务环境的一致性。

6. 跨平台兼容性支持

GitHub Actions 使用的命令行和脚本可以基于不同操作系统进行调整,很多 Actions 也内置了跨平台兼容性支持。这意味着工作流可以在不同系统上运行同一套代码,简化了跨平台的 CI/CD 流程。例如:

  • 一些官方的 Actions 会自动检测操作系统并调整命令。
  • 用户可以在工作流中使用 if 判断来指定不同系统的命令。

综上

GitHub Actions 通过虚拟化技术、容器化、自定义 runners、任务调度和环境快照等机制,为用户提供了灵活的多操作系统支持,确保不同平台的代码都能顺利在指定环境中运行。

相关文章:

GitHub Actions的 CI/CD

GitHub Actions 是一个强大的 CI/CD 工具,适用于自动化各种开发任务。GitHub Actions 的原理是基于事件驱动的自动化流水线工具,通过定义触发条件和执行步骤,可以让项目在特定条件下自动运行一系列操作,比如构建、测试、部署等。 …...

doris 表结构批量导出

导出 test 数据库中的 table1 表:mysqldump -h127.0.0.1 -P9030 -uroot --no-tablespaces --databases test --tables table1 导出 test 数据库中的 table1 表结构:mysqldump -h127.0.0.1 -P9030 -uroot --no-tablespaces --databases test --tables tab…...

linux查看文件命令

查看文件命令 显示命令 cat 语法:cat 【选项】 文件 选项 命令含义n显示行号包括空行b显示行号不包括空行s压缩空行为一行A显示隐藏字符 cat -n 文件:显示行号包括空行 cat -b 文件 cat -s 文件 cat -A 文件 more和less是 分页查看 tac和rev都…...

【2023工业图像异常检测文献】DiAD: 基于扩散模型的多类异常检测方法

DiAD: A Diffusion-based Framework for Multi-class Anomaly Detection 1、Background 当前主流的三种异常检测方法: 基于合成的方法:在正常图像上合成异常,通过训练模型识别这些合成的异常来提高检测和定位能力。基于嵌入的方法&#xff…...

三相继电保护机 继电器保护校验仪 微机继电保护测试仪

性能特点 电压电流输出灵活组合 输出达4相电压3相电流,可各种组合实现常规4相电压3相电流型输出模式,既可兼容传统的各种试验方式,也可方便地进行三相变压器差动试验和厂用电快切和备自投试验。 操作方式装置直接外接笔记本电脑或台式机进行…...

MyEclipse中讲解Git使用——结合GitLab

1、什么是Git Git是分布式版本控制系统 Git是一款免费、开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。 2、在myeclipse安装Git插件 下载该文件,将egit.zip解压放入 myeclipse安装路径>dropins>下重新启动myeclipse EGit -…...

pdf转为txt文本格式并使用base64加密输出数据

第一步&#xff0c;pom.xml中引入jar包 <dependency><groupId>org.apache.pdfbox</groupId><artifactId>pdfbox</artifactId><version>2.0.24</version></dependency> 第二步 package org.example.test.example.changefile;…...

SpringBoot篇(运维实用篇 - 临时属性)

目录 一、临时属性设置 1. 简介 2. 属性加载优先级 那是否还有其他的配置方式呢&#xff1f; 3. 知识小结 二、开发环境中使用临时属性 1. 如何操作 2. 知识小结 3. 思考 三、配置文件分类 1. 简介 2. 4个级别 3. 为什么设计多种配置文件&#xff1f; 一个典型的应…...

MySQL定时异机备份

场景&#xff1a;将A机器MySQL数据库部分表每日定时备份到B机器上 &#xff08;只适用于Linux&#xff09; 实现方式算是比简单了&#xff0c;就是用mysqldump生成文件&#xff0c;使用scp命令传输到另一台机器上。 1. 编写备份shell脚本 在A机器新建脚本 (当然没有vim的话vi…...

MMA: Multi-Modal Adapter for Vision-Language Models

两个观察 图1所示。各种基于transformer的CLIP模型中不同层的数据集级识别精度。这个实验是为了确定样本属于哪个数据集。我们用不同的种子运行了三次&#xff0c;并报告了每层识别精度的平均值和标准差。 X E m b e d XEmbed XEmbed是指变压器块之前的文本或图像嵌入层&#x…...

uniapp通过id获取div的宽度,高度,位置等(应该是 任意平台都通用 )

uniapp通过id获取div的宽度&#xff0c;高度&#xff0c;位置等&#xff08;应该是 任意平台都通用 &#xff09; <template><view class"" id"domId"></view> </template>// 如果获取的dome高度等不对&#xff0c;还需要加上延迟…...

Python Transformer 模型的基本原理:BERT 和 GPT 以及它们在情感分析中的应用

Transformer 模型的基本原理&#xff1a;BERT 和 GPT 以及它们在情感分析中的应用 近年来&#xff0c;Transformer 模型在自然语言处理&#xff08;NLP&#xff09;领域取得了巨大成功&#xff0c;为任务如翻译、生成文本、问答和情感分析带来了显著的性能提升。本文将介绍 Tr…...

【云原生】Kubernets1.29部署StorageClass-NFS作为存储类,动态创建pvc(已存在NFS服务端)

文章目录 在写redis集群搭建的时候,有提到过使用nfs做storageclass,那时候kubernetes是1.20版本,https://dongweizhen.blog.csdn.net/article/details/130651727 现在使用的是kubernetes 1.29版本,根据之前的修改方式并未生效,反而提示:Error: invalid argument "Re…...

使用 Pandas 进行时间序列分析的 10个关键点

使用Pandas进行时间序列分析的10个关键点&#xff08;由于篇幅限制&#xff0c;这里调整为10个&#xff0c;但实际操作中可能涉及更多细节&#xff09;如下&#xff1a; 1. 创建时间序列数据 时间序列数据是指在多个时间点上形成的数值序列。在Pandas中&#xff0c;可以使用t…...

使用 Mermaid 语言描述 AGI 系统架构图

使用Mermaid语言描述AGI系统架构图 一、整体架构概述 以下是一个简化的AGI&#xff08;Artificial General Intelligence&#xff0c;通用人工智能&#xff09;系统架构的Mermaid描述。该系统主要包括数据收集与预处理、模型训练、推理与决策以及交互接口等模块&#xff0c;各…...

绘制线性可分支持向量机决策边界图 代码解析

### 绘制线性可分支持向量机决策边界图 def plot_classifer(model, X, y):# 超参数边界x_min -7x_max 12y_min -12y_max -1step 0.05# meshgridxx, yy np.meshgrid(np.arange(x_min, x_max, step),np.arange(y_min, y_max, step))# 模型预测z model.predict(np.c_[xx.ra…...

No.23 笔记 | WEB安全 - 任意文件漏洞 part 5

本文全面且深入地探讨了文件上传漏洞相关知识。从基础概念出发&#xff0c;清晰地阐述了文件上传漏洞的定义及其产生的本质原因&#xff0c;同时列出了该漏洞成立的必要条件。详细说明了文件上传漏洞可能对服务器控制权、网站安全以及业务运营带来的严重危害。 文中还深入解析了…...

EasyPlayer.js网页播放器,支持FLV、HLS、WebSocket、WebRTC、H.264/H.265、MP4、ts各种音视频流播放

EasyPlayer.js功能&#xff1a; 1、支持解码H.264视频(Baseline, Main, High Profile全支持&#xff0c;支持解码B帧视频) 2、支持解码H.265视频&#xff08;flv id 12&#xff09; 3、支持解码AAC音频(LC,HE,HEv2 Profile全支持) 4、支持解码MP3音频以及Speex音频格式 5、可…...

WPF数据绑定的五大模式

WPF&#xff08;Windows Presentation Foundation&#xff09;是微软推出的一种用于构建Windows用户界面的UI框架。它支持数据绑定&#xff0c;允许开发者将UI元素与数据源绑定&#xff0c;从而实现数据和界面的自动同步。WPF数据绑定有几种不同的模式&#xff0c; 以下是五种…...

从零到一:大学新生编程入门攻略与成长指南

文章目录 每日一句正能量前言编程语言选择&#xff1a;为大学新生量身定制Python&#xff1a;简单而强大的选择JavaScript&#xff1a;Web开发的基石Java&#xff1a;面向对象的经典C#&#xff1a;微软的全能选手 学习资源推荐&#xff1a;编程学习的宝藏在线课程教程和文档书籍…...

详细分析Pytorch中的transpose基本知识(附Demo)| 对比 permute

目录 前言1. 基本知识2. Demo 前言 原先的permute推荐阅读&#xff1a;详细分析Pytorch中的permute基本知识&#xff08;附Demo&#xff09; 1. 基本知识 transpose 是 PyTorch 中用于交换张量维度的函数&#xff0c;特别是用于二维张量&#xff08;矩阵&#xff09;的转置操…...

初识WebGL

思路&#xff1a; 构建<canvas>画布节点&#xff0c;获取其的实例。使用getWebGLContext() 拿到画布上下文。拿到上下文用clearColor() 设置背景颜色。最后清空canvas画布,是为了清除颜色缓冲区。 html结构&#xff1a; <!DOCTYPE html> <html lang"en&…...

【力扣】Go语言回溯算法详细实现与方法论提炼

文章目录 一、引言二、回溯算法的核心概念三、组合问题1. LeetCode 77. 组合2. LeetCode 216. 组合总和III3. LeetCode 17. 电话号码的字母组合4. LeetCode 39. 组合总和5. LeetCode 40. 组合总和 II小结 四、分割问题6. LeetCode 131. 分割回文串7. LeetCode 93. 复原IP地址小…...

「C/C++」C/C++ 之 第三方库使用规范

✨博客主页何曾参静谧的博客&#x1f4cc;文章专栏「C/C」C/C程序设计&#x1f4da;全部专栏「VS」Visual Studio「C/C」C/C程序设计「UG/NX」BlockUI集合「Win」Windows程序设计「DSA」数据结构与算法「UG/NX」NX二次开发「QT」QT5程序设计「File」数据文件格式「PK」Parasoli…...

六、元素应用CSS的习题

题目一&#xff1a; 使用CSS样式对页面元素加以修饰&#xff0c;制作“ 旅游攻略 ”网站。如下图所示 运行效果&#xff1a; 代码&#xff1a; <!DOCTYPE html> <html><head><meta charset"utf-8" /><title>旅游攻略</title><…...

正式入驻!上海斯歌BPM PaaS管理软件等产品入选华为云联营商品

近日&#xff0c;上海斯歌旗下BPM PaaS管理软件&#xff08;NBS&#xff09;等多款产品入选华为云云商店联营商品&#xff0c;上海斯歌正式成为华为云联营商品合作伙伴。用户登录华为云云商店即可采购上海斯歌的BPM PaaS产品及配套服务。通过联营模式&#xff0c;双方合作能够深…...

使用 Axios 上传大文件分片上传

背景 在上传大文件时&#xff0c;分片上传是一种常见且有效的策略。由于大文件在上传过程中可能会遇到内存溢出、网络不稳定等问题&#xff0c;分片上传可以显著提高上传的可靠性和效率。通过将大文件分割成多个小分片&#xff0c;不仅可以减少单次上传的数据量&#xff0c;降…...

Nginx+Lua脚本+Redis 实现自动封禁访问频率过高IP

1 、安装OpenResty 安装使用 OpenResty&#xff0c;这是一个集成了各种 Lua 模块的 Nginx 服务器&#xff0c;是一个以Nginx为核心同时包含很多第三方模块的Web应用服务器&#xff0c;使用Nginx的同时又能使用lua等模块实现复杂的控制。 &#xff08;1&#xff09;安装编译工具…...

PART 1 数据挖掘概论 — 数据挖掘方法论

目录 数据库知识发掘步骤 数据挖掘技术的产业标准 CRISP-DM SEMMA 数据库知识发掘步骤 数据库知识发掘(Knowledge Discovery in Database,KDD)是从数据库中的大量数据中发现不明显、之前未知、可能有用的知识。 知识发掘流程(Knowledge Discovery Process)包括属性选择…...

Centos安装ffmpeg的方法

推荐第一个,不要自己编译安装,太难了,坑多。 在 CentOS 上安装 FFmpeg 有几种方法,以下是两种常见的方法: ### 方法一:使用 RPM Fusion 仓库安装 1. **启用 RPM Fusion 仓库**: RPM Fusion 是一个第三方仓库,提供了许多 CentOS 官方仓库中没有的软件包。 ```bash…...

手机能用的网站/内部优化

信号处理 信号处理是指信号的表示&#xff0c;变换和运算以及提取它们所包含的信息。如我们可以分开两个或多个混在一起的信号&#xff0c;或者增强信号中某些成分的参数。 信号处理基础 信号分为数字信号和模拟信号&#xff0c;在计算机中连续信号只能让信号的离散时间间隔…...

地图网站建设/重庆人力资源和社会保障网官网

实现我自己电脑和我的阿里云服务器的通信&#xff0c;首先要在阿里云上面部署我的项目&#xff0c;关于如何部署Maven项目&#xff0c;参考https://blog.csdn.net/newbaby2012/article/details/118498642 启动以后&#xff0c;我在本地把ChatClient的目的地址改成了我的阿里云公…...

海淀网站建设公司/企业全网推广公司

一.简介mysqlslap是mysql自带的基准测试工具优点:查询数据,语法简单,灵活容易使用.该工具可以模拟多个客户端同时并发的向服务器发出查询更新,给出了性能测试数据而且提供了多种引擎的性能比较。测试时候会创建一个mysqlslap库&#xff0c;并创建一个t1表&#xff0c;进行增删改…...

做网络销售怎么建立网站/搜索大全引擎入口

#include<stdio.h> void zy1() {int a;printf("请输入题目序号&#xff08;1-3&#xff09;&#xff1a;\n实验1-1&#xff1a;求最大值\n要求由键盘输入两个整数a和b&#xff0c;程序输出其中较大的数。\n实验1-2&#xff1a;求m到n之和\n要求程序计算并输出m~n&am…...

湖南省住房和城乡建设厅网站/南宁seo排名首页

本文价值与收获 看完本文后,您将能够作出下面的界面 看完本文您将掌握的技能 绘制虚线设置虚线宽度和颜色实战需求 我需要创建一条虚线。我尝试通过创建带有虚线笔触的Rectangle视图来解决这个问题。但是,将矩形的高度设置为1时,会导致出现一条双线,因为它同时显示了视图…...

做网站好多钱/百度一下官网首页登录

通过这个网站上传excel:http://www.docpe.com/excel/excel-to-html.aspx 然后转换,将压缩包打开,实际就是一个html. 找到table标签的开始和结束,直接将这一大段考到md文件里面即可… 有一点很坑爹,就是如果你一行都是英文,好比包名,markdown不会将其压缩,导致包名就很长一行,其…...