Jenkins 多分支管道
如果您正在寻找一个基于拉取请求或分支的自动化 Jenkins 持续集成和交付 (CI/CD) 流水线,本指南将帮助您全面了解如何使用 Jenkins 多分支流水线实现它。
Jenkins 的多分支流水线是设计 CI/CD 工作流的最佳方式之一,因为它完全基于 git(源代码管理)的流水线即代码。本指南将讨论 Jenkins 多分支流水线设置中涉及的所有关键概念。
多分支流水线是如何工作的?
我将带您了解一个基于 git-flow 的基本构建和部署工作流程,以便更好地理解多分支流水线。本例中提供的分支策略仅供参考。
假设我想要一个 Jenkins 流水线来构建和部署一个应用程序,并满足以下条件。
- 应用程序仓库有两个分支(主分支和开发分支)。
- 开发从开发人员分叉应用程序仓库并在分叉的仓库中创建一个分支开始。开发人员将代码提交到功能分支。代码在本地测试完毕并准备好集成后,他们将从分叉的仓库向主仓库的开发分支提交一个 PR。
- 每当开发人员从分叉仓库的功能分支向开发分支提交 PR 时,Jenkins 流水线都会触发合并源分支和目标分支的操作,然后运行单元测试和静态代码分析。我们称之为 PR 构建。
- 代码通过 PR 构建中的测试后,开发人员或审阅者将 PR 合并到开发分支。
- 代码合并到开发分支后,应该触发一个流水线,该流水线将运行相关测试并将代码部署到相关环境(例如,开发、质量保证等)。
- 当代码准备好发布时,开发人员会从开发分支向主分支提交 PR。这将触发一个 PR 构建流水线,该流水线将合并源分支和目标分支、运行单元测试、执行代码分析、构建工件(Docker 镜像、jar 文件等)、进行漏洞测试等。
- 如果测试通过,PR 将被审核并合并到主分支。
- 合并完成后,Jenkins 应该触发一个构建,该构建将编译代码、创建发布工件并将其部署到暂存环境和预生产环境。
从以上情况可以看出,Jenkins 作业无需手动触发,每当有分支的拉取请求时,流水线都需要自动触发并运行该分支所需的步骤。
此工作流程为工程师构建了良好的反馈循环,避免了依赖 DevOps 团队在非生产环境中进行构建和部署。
开发人员可以在 Github 上查看构建状态,并决定下一步操作。
此工作流程可以通过 Jenkins 多分支流水线轻松实现。
下图展示了上述示例构建过程的多分支流水线工作流程。
多分支流水线的工作原理如下。
- 当开发者从 fork 仓库的功能分支创建 PR 以开发分支时,Github 会向 Jenkins 发送一个包含 PR 信息的 Webhook。
- Jenkins 接收 PR 并找到相关的多分支流水线,然后自动创建 PR 构建流水线。然后,它会按照 Jenkinsfile 中提到的步骤运行作业。在签出 (checkout) 期间,PR 中的源分支和目标分支会被合并。PR 合并将在 Github 上被阻止,直到 Jenkins 返回构建状态(如果已配置 Github 规则集)。
- 构建完成后,Jenkins 会将状态更新为 Github PR。现在,您可以合并代码了。如果您想查看 Jenkins 构建日志,可以在 PR 状态中找到 Jenkins 构建状态和日志链接(如果已配置 Github App forJenkins)
首先,在使用多分支流水线之前,我使用了一个简单的流水线,并结合了 GitHub Webhook。
我遇到的问题是,我团队的项目使用 Git 工作流作为开发分支,当我或我的团队推送或合并 PR 时,Webhook 会向我的 Jenkins 流水线发送请求,无论哪个分支,该请求都会立即启动工作。因此,多分支流水线可以帮助解决这个问题。
多分支流水线 Jenkinsfile
在开始实现之前,让我们先看一下可以在流水线中使用的多分支流水线 Jenkins 示例 Jenkinsfile。
要使多分支流水线正常工作,您需要在 SCM 仓库中拥有 Jenkinsfile。
如果您正在学习/测试,可以使用下面提供的多分支流水线 Jenkinsfile。它包含一个检出阶段和其他虚拟阶段,用于回显消息。
注意:将代理标签 agent-01 替换为您的 Jenkins 代理名称。
pipeline {agent {node {label 'agent-01'}}options {buildDiscarder logRotator( daysToKeepStr: '16', numToKeepStr: '10')}stages {stage('Cleanup Workspace') {steps {cleanWs()sh """echo "Cleaned Up Workspace For Project""""}}stage('Code Checkout') {steps {checkout([$class: 'GitSCM', branches: [[name: '*/main']], userRemoteConfigs: [[url: 'https://github.com/spring-projects/spring-petclinic.git']]])}}stage('Unit Testing') {steps {sh """echo "Running Unit Tests""""}}stage('Code Analysis') {steps {sh """echo "Running Code Analysis""""}}stage('Deploy To Dev & QA') {when {branch 'develop'}steps {sh """echo "Building Artifact for Dev Environment""""sh """echo "Deploying to Dev Environment""""sh """echo "Deploying to QA Environment""""}}stage('Deploy To Staging and Pre-Prod Code') {when {branch 'master'}steps {sh """echo "Building Artifact for Staging and Pre-Prod Environments""""sh """echo "Deploying to Staging Environment""""sh """echo "Deploying to Pre-Prod Environment""""}}}
}
创建多分支流水线
步骤 1:在 Jenkins 主页创建一个“新项目”。
Jenkins 新项目 - 多分支
步骤 2:从选项中选择“多分支流水线”,然后点击“确定”。
步骤 3:点击“添加源”,然后选择 Github。
步骤 4:在“凭据”字段下,选择 Jenkins,并使用您的 Github 用户名和密码创建凭据。
步骤 5:选择已创建的凭据,并提供您的 Github 仓库以验证凭据,如下所示。验证多分支流水线凭据
步骤 6:在“行为”下,选择符合您需求的选项。您可以选择发现仓库中的所有分支,也可以仅发现包含拉取请求的分支。
您可以从“添加”按钮中选择其他行为。
例如,如果您选择不发现代码库中的所有分支,则可以选择正则表达式或通配符方法来发现代码库中的分支,如下所示。
步骤 7:如果您选择为 Jenkinsfile 设置不同的名称,可以在构建配置中指定。
在“脚本路径”选项中,您可以提供所需的名称。请确保 Jenkinsfile 存在于代码库中,并且名称与您在流水线配置中提供的名称相同。
另外,启用“丢弃旧构建”以仅保留所需的构建日志,如下所示。
步骤 8:保存所有作业配置。
Jenkins 会根据我们的配置扫描已配置的 Github 仓库,查找所有分支和 PR 请求。
下图展示了扫描三个分支的作业。由于我尚未发起任何拉取请求,因此 Jenkins 不会创建任何基于分支的流水线。我将演示如何在设置 Webhook 后测试自动创建流水线。
步骤1: 登录github, 找到repo,点击设置,添加webhook,输入你的jenkins 的URL
您应该会在成功的 Webhook 配置上看到一个绿色勾号,如下所示。Jenkins - Github Webhook 交付成功
如果您没有看到绿色勾号或警告标志,请点击 Webhook 链接,向下滚动到“最近交付”,然后点击最后一个 Webhook。您应该能够通过状态代码查看 Webhook 交付失败的原因。
现在,我们已经完成了多分支流水线所需的所有配置。下一步是测试多分支流水线工作流触发器。
测试多分支流水线
我使用的这个仓库有两个分支:main 和 develop。
更新 develop分支中 README 文件的部分内容,并向 main 提交 PR。您也可以从 fork 的仓库中执行此操作。
它会向 Jenkins 发送一个 Webhook,并为提交的 PR 创建流水线并开始构建。
现在,如果您检查 Jenkins,您会在 Jenkins 中找到一个用于 PR 的流水线,如下所示。
如果构建失败,您可以将更改提交到开发分支,只要 PR 处于打开状态,它就会触发 PR 流水线。
我在 Jenkinfile 中添加了一个条件:如果分支是开发分支,则跳过部署阶段;如果是 PR 构建分支,则跳过主分支。您可以在 Jenkins 构建阶段中检查这一点。如果您检查这些阶段,可以清楚地看到跳过的部署阶段,如下所示。
启用拉取请求状态检查
在多分支流水线中,您可以启用状态检查。这意味着 Jenkins 会将结果以状态检查的形式报告给 GitHub。它会显示在 PR 页面上,如下所示。
例如,开发人员可能需要进行以下状态检查。
常见的状态检查可能包括:
- 构建验证
- 单元测试
- 代码风格检查
- 安全扫描
要在 Github PR 中启用这些状态检查,您需要创建一个适用于 Jenkins 的 Github App。
您可以按照 Github App for Jenkins 详细指南进行创建。
然后在多分支流水线配置中,您需要使用 Github App 凭据,而不是用户名和密码。
相关文章:
Jenkins 多分支管道
如果您正在寻找一个基于拉取请求或分支的自动化 Jenkins 持续集成和交付 (CI/CD) 流水线,本指南将帮助您全面了解如何使用 Jenkins 多分支流水线实现它。 Jenkins 的多分支流水线是设计 CI/CD 工作流的最佳方式之一,因为它完全基于 git(源代…...
PHP腾讯云人脸核身获取NONCE ticket
参考腾讯云官方文档: 人脸核身 获取 NONCE ticket_腾讯云 前提条件,已经成功获取了access token。 获取参考文档: PHP腾讯云人脸核身获取Access Token-CSDN博客 public function getTxFaceNonceTicket($uid) {$access_token file_get_c…...
云计算(Cloud Computing)概述——从AWS开始
李升伟 编译 无需正式介绍亚马逊网络服务(Amazon Web Services,简称AWS)。作为行业领先的云服务提供商,AWS为全球开发者提供了超过170项随时可用的服务。 例如,Adobe能够独立于IT团队开发和更新软件。通过AWS的服务&…...
51单片机实验五:A/D和D/A转换
一、实验环境与实验器材 环境:Keli,STC-ISP烧写软件,Proteus. 器材:TX-1C单片机(STC89C52RC)、电脑。 二、 实验内容及实验步骤 1.A/D转换 概念:模数转换是将连续的模拟信号转换为离散的数字信…...
重构未来智能:Anthropic 解码Agent设计哲学三重奏
第一章 智能体进化论:从工具到自主体的认知跃迁 1.1 LLM应用范式演进图谱 阶段技术形态应用特征代表场景初级阶段单功能模型硬编码规则执行文本摘要/分类进阶阶段工作流编排多模型协同调度跨语言翻译流水线高级阶段自主智能体动态决策交互编程调试/客服对话 1.1.…...
MCP协议在纳米材料领域的深度应用:从跨尺度协同到智能研发范式重构
MCP协议在纳米材料领域的深度应用:从跨尺度协同到智能研发范式重构 文章目录 MCP协议在纳米材料领域的深度应用:从跨尺度协同到智能研发范式重构一、MCP协议的技术演进与纳米材料研究的适配性分析1.1 MCP协议的核心架构升级1.2 纳米材料研发的核心挑战与…...
.NET Core 服务实现监控可观测性最佳实践
.NET Core 概述 .Net Core 是一个开源的、跨平台的高性能框架,由微软开发并维护,现由 .NET Foundation 提供支持。它用于构建现代化、可扩展的云端和本地应用程序,支持开发 Web 应用、微服务、API、物联网应用以及移动后端服务,是…...
ios精灵脚本辅助软件,有根和无根roothide越狱区别
最新版本的ios按键精灵app 支持到15-16系统,可以在半越狱环境下和无根越狱环境安装,对于很多用户一直不理解有根和无根之间的差别,今天简单介绍下 最高权限和部分权限的区别 1、有根越狱 – 有系统根目录读写权限(通过越狱软件可…...
ChatGPT-o3辅助学术大纲效果如何?
目录 1 引言 2 背景综述 2.1 自动驾驶雷达感知 2.2 生成模型演进:从 GAN 到 Diffusion 3 相关工作 3.1 雷达点云增强与超分辨率 3.2 扩散模型在数据增广中的应用 4 方法论 4.1 问题定义与总览 4.2 数据预处理与雷达→体素表示 4.3 潜在体素扩散网络&…...
PyCharm 2024.3.5 状态栏添加前进后退按钮
操作路径:Appearance & Behavior -> Menu and Toolbars -> Main Toolbar -> Left -> Add… 按钮位置:Main Menu -> Navigate -> OK 最终效果...
【CPP】死锁产生、排查、避免
一、死锁产生 死锁是指两个或多个线程互相等待对方释放资源,导致程序无法继续执行的现象。在多线程编程中,死锁是一种常见且严重的并发问题。死锁产生必须要四个条件同时满足才会发生: 互斥条件:某些资源只能由一个线程占用。占…...
深入理解 Android Handler
一、引言 Handler 在安卓中的地位是不言而喻的,几乎维系着整个安卓程序运行的生命周期,但是这么重要的一个东西,我们真的了解它吗?下面跟随着我的脚步,慢慢揭开Hanler的神秘面纱吧! 本文将介绍Handler 的运…...
Git 进阶之路:高效协作之分支管理
🌈 个人主页:Zfox_ 🔥 系列专栏:Git 企业级应用 目录 一:🔥 分⽀管理 🦋 理解分⽀🦋 创建分⽀🦋 切换分⽀🦋 合并分⽀🦋 删除分⽀🦋 合…...
LeetCode 2364.统计坏数对的数目:反向统计
【LetMeFly】2364.统计坏数对的数目:反向统计 力扣题目链接:https://leetcode.cn/problems/count-number-of-bad-pairs/ 给你一个下标从 0 开始的整数数组 nums 。如果 i < j 且 j - i ! nums[j] - nums[i] ,那么我们称 (i, j) 是一个 坏…...
6.Rust+Axum:打造高效 WebSocket 实时通信聊天室
摘要 本文详细介绍 RustAxum 在 WebSocket 实时通信开发中的应用,包括双向通信、状态管理等,实践构建聊天室应用。 一、引言 在当今的 Web 应用开发中,实时通信变得越来越重要。WebSocket 作为一种在单个 TCP 连接上进行全双工通信的协议&…...
【硬件系统架构】冯·诺依曼架构
一、引言 在计算机科学的广袤领域中,冯诺依曼架构犹如一颗璀璨的恒星,照亮了现代计算机发展的道路。从我们日常使用的个人电脑到强大的数据中心服务器,几乎都基于这一架构构建。它的出现是计算机发展史上的一个重要里程碑,深刻地影…...
Android 13 关闭屏幕调节音量大小
一、问题描述 在Android 13系统中,通过修改frameworks/base/core/res/res/values/config.xml配置文件,实现灭屏状态下调节音量的功能。 二、修改内容 diff --git a/frameworks/base/core/res/res/values/config.xml b/frameworks/base/core/res/res/values/config.xml inde…...
[编程基础] Java · 学习手册
🔥 《Java 工程师修炼之路:从零构建系统化知识体系》 🔥 🛠️ 专栏简介: 这是一个以工业级开发标准打造的 Java 全栈技术专栏,涵盖语言核心、并发编程、JVM 原理、框架源码、架构设计等全维度知识体系。专…...
探索元生代:ComfyUI 工作流与计算机视觉的奇妙邂逅
目录 一、引言 二、蓝耘元生代和 ComfyUI 工作流初印象 (一)蓝耘元生代平台简介 (二)ComfyUI 工作流创建是啥玩意儿 三、计算机视觉是个啥 (一)计算机视觉的基本概念 (二)计算…...
C++ 迭代器失效详解:如何避免 vector 操作中的陷阱
目录 1. 什么是迭代器失效? 2. 哪些操作会导致迭代器失效? 2.1 vector 的插入操作(push_back, insert) 示例:push_back 导致迭代器失效 如何避免? 2.2 vector 的删除操作(erase, pop_back&…...
【fisco bcos】基于ABI调用智能合约
参考官方文档:https://fisco-bcos-documentation.readthedocs.io/zh-cn/latest/docs/sdk/java_sdk/assemble_transaction.html 先放一下智能合约: (就是一个很简单的插入和查找嗯) pragma solidity ^0.4.25; pragma experimental…...
【Python学习笔记】Pandas实现Excel质检记录表初审、复核及质检统计
背景: 我有这样一个需要审核的飞书题目表,按日期分成多个sheet,有初审——复核——质检三个环节,这三个环节是不同的同学在作业,并且领到同一个题目的人选是随机的,也就是说,完成一道题的三个人…...
Springboot 自动装配原理是什么?SPI 原理又是什么?
1. Spring Boot 自动装配原理 自动装配是 Spring Boot 简化配置的核心机制,其核心思想是根据类路径中的依赖自动配置 Spring 应用。 关键步骤: 启动注解 SpringBootApplication 该注解组合了 EnableAutoConfiguration,用于激活自动配置。 …...
【英语语法】基本句型
目录 前言一:主谓二:主谓宾三:主系表四:主谓双宾五:主谓宾补 前言 英语基本句型是语法体系的基石,以下是英语五大基本句型。 一:主谓 结构:主语 不及物动词 例句: T…...
扫雷-C语言版
C语言扫雷游戏设计(完整版) 游戏背景 扫雷是一款经典的益智类单人电脑游戏,最早出现在1960年代,并在1990年代随着Windows操作系统而广为人知。游戏目标是在不触发任何地雷的情况下,揭开所有非地雷的格子。玩家需要根…...
【C++初阶】--- list容器功能模拟实现
1.什么是list容器 在 C 标准模板库(STL)中,std::list 是一个非常有用的容器,它是双向链表的实现std::list 是一种序列式容器,它允许在序列内的任意位置进行高效的插入和删除操作。与数组和 std::vector 不同ÿ…...
gRPC 介绍及在嵌入式 Linux 下的成功编译及使用详解
gRPC 是一个高性能、开源和通用的 RPC 框架,由 Google 开发。它支持多种编程语言,并且能够运行在不同的环境中,包括嵌入式系统。本文将详细介绍 gRPC,以及如何在嵌入式 Linux 系统下成功编译 gRPC,并结合 protobuf 和 …...
C语言教程(十):C 语言函数详解
一、引言 在 C 语言中,函数是一组执行特定任务的代码块。通过将复杂的程序逻辑划分为多个函数,不仅能提高代码的可读性、可维护性,还便于代码的复用。无论是简单的数学计算,还是复杂的系统操作,函数都发挥着核心作用。…...
力扣刷题-热题100题-第35题(c++、python)
146. LRU 缓存 - 力扣(LeetCode)https://leetcode.cn/problems/lru-cache/?envTypestudy-plan-v2&envIdtop-100-liked 双向链表哈希表 内置函数 对于c有list可以充当双向链表,unordered_map充当哈希表;python有OrderedDic…...
LeetCode算法题(Go语言实现)_52
题目 给你一个下标从 0 开始的整数数组 costs ,其中 costs[i] 是雇佣第 i 位工人的代价。 同时给你两个整数 k 和 candidates 。我们想根据以下规则恰好雇佣 k 位工人: 总共进行 k 轮雇佣,且每一轮恰好雇佣一位工人。 在每一轮雇佣中…...
基于尚硅谷FreeRTOS视频笔记——13—HAL库和RTOS时钟源问题
RTOS的时钟源就是系统定时器中断,通俗来说就是系统定时器每中断一次,就扫描一次RTOS,查看RTOS中有没有任务的切换。 但是,系统存在一个HAL_Delay()函数,就是使用的系统定时器中断来执行的函数。 当我们在RTOS中&…...
FPGA入门学习Day1——设计一个DDS信号发生器
目录 一、DDS简介 (一)基本原理 (二)主要优势 (三)与传统技术的对比 二、FPGA存储器 (一)ROM波形存储器 (二)RAM随机存取存储器 (三&…...
JavaScript-立即执行函数(Immediately Invoked Function Expression,IIFE)
立即执行函数(Immediately Invoked Function Expression,IIFE)是 JavaScript 里一种很独特的函数,它在定义后会马上执行。下面会详细介绍它的语法、用途、优点以及注意事项。 一、语法 立即执行函数一般有两种常见的语法形式&am…...
【Leetcode 每日一题 - 补卡】2537. 统计好子数组的数目
问题背景 给你一个整数数组 n u m s nums nums 和一个整数 k k k,请你返回 n u m s nums nums 中 好 子数组的数目。 一个子数组 a r r arr arr 如果有 至少 k k k 对下标 ( i , j ) (i, j) (i,j) 满足 i < j i < j i<j 且 a r r [ i ] a r r [ …...
【工具-Krillin AI】视频翻译、配音、语音克隆于一体的一站式视频多语言转换工具~
Krillin AI 是全能型音视频本地化与增强解决工具。这款简约而强大的工具,集音视频翻译、配音、语音克隆于一身,支持横竖屏格式输出,确保在所有主流平台(哔哩哔哩,小红书,抖音,视频号,…...
常用绑定事件方式有哪几种
绑定事件分为3种: 1、内联模式:将函数名直接作为标签属性的属性值(注意:这里是带括号的,不带括号不生效,但是在vue中可以加括号也可以不加括号,如果需要穿参数就加括号,不需要传参数可以不加&am…...
数据结构之BFS广度优先算法(腐烂的苹果)
队列这个数据结构在很多场景下都有使用,比如在实现二叉树的层序遍历,floodfill问题(等等未完成)中,都需要借助队列的先进先出特性,下面给出这几个问题的解法 经典的二叉树的层序遍历 算法图示,以下图所示的二叉树为例…...
linux 学习 1.开始学习
准备学习linux记录一下学习内容,只会包含必要的知识,和部分演示 我采用的系统是Ubuntu24.04 初始掌握 学习首先需要掌握如何查看帮助手册 man man # man 加任何命令可以看具体命令的帮助手册 man mkdir进入手册按 d(down):往下翻半页u(u…...
Flink-01学习 介绍Flink及上手小项目之词频统计
flink简介 官网 概述: 学习Flink具体包括四个关键概念:流数据的持续处理,事件时间,有状态流处理和状态快照。 Apache Flink 是一个开源的流处理框架,旨在处理批处理和实时数据处理,具有高吞吐量和低延迟的…...
【Linux我做主】探秘gcc/g++和动静态库
TOC Linux编译器gcc/g的使用 github地址 有梦想的电信狗 前言 在软件开发的世界中,编译器如同匠人的工具,将人类可读的代码转化为机器执行的指令。 对于Linux开发者而言,gcc和g是构建C/C程序的核心工具链,掌握它们的原理和使…...
工控系统前端设计(pyqt)
题目源自:白月黑羽的项目实战四-[工控系统前端] 代码已上传至gitcode https://gitcode.com/m0_37662818/Industrial_Control_System_Front_End 心得体会:直接用组态软件或者js吧 项目亮点 tablemodel的使用,绑定了表格和数据风机自定义ite…...
一台 Master 多节点玩转 Kubernetes:sealos 一键部署实践
文章目录 一台 Master 多节点玩转 Kubernetes:sealos 一键部署实践🔗 参考链接🌐 部署环境📦 安装包说明🔧 前期准备🚀 使用 sealos 安装 Kubernetes✅ 验证集群状态📌 后续可做的优化和拓展&am…...
写书的三驾马车
2019年8月19日23:52:28 先亮出我们的兵器组合: GitBook Git Markdown,享受行云流水一般的写作 个人秀 GitBook : 一个基于 Node.js 的文档格式转换工具,支持 Markdown 和 AsciiDoc 两种语法格式,可以输出 HTML、PDF等格式的…...
科学护理进行性核上性麻痹,缓解病痛提升生活质量
进行性核上性麻痹是一种罕见的神经系统变性疾病,患者常出现姿势平衡障碍、吞咽困难、眼球运动异常等症状。通过科学的健康护理,能在一定程度上减轻患者痛苦,提升生活质量。 日常护理,保障安全舒适 患者日常活动时,需确…...
第七章:7.2求方程a*x*x+b*x+c=0的根,用3个函数,分别求当:b*b-4*a*c大于0、等于0和小于0时的根并输出结果。从主函数输入a、b、c的值
//求方程a*x*xb*xc0的根,用3个函数,分别求当:b*b-4*a*c大于0、等于0和小于0时的根并输出结果。 //从主函数输入a、b、c的值 #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<math.h> void s1(float a, float b, fl…...
优选算法系列(7.BFS 解决最短路问题)
简介: 先走到A,之后弹出A再把A能走到的地方加进去向外扩展把队列里面的元素(B,C)弹出来,再把B,C能到的地方入队列 一直这样那么最短路程就是扩展的层数。 迷宫中离入口最近的出口(me…...
实现定时发送邮件,以及时间同步
定时发送邮件 部署邮件服务 查看有没有安装mailx,安装了 [root192 ~]# rpm -q mailx mailx-12.5-43.fc38.x86_64去网易拿一下授权码,写到配置文件里 vim /etc/mail.rcset fromxxxxxxx163.com set smtpsmtp.163.com set smtp-auth-userxxxxxxx163.com set smtp-auth-passwor…...
Java反射知识点学习笔记
目录 一、定义 二、获取class对象的三种方式 1、Class.forName("全类名") 2、类名.class 3、对象.getClass() 三、案例 1、获取 class 反射对象三种方式 2、利用反射获取构造方法 3、利用反射获取成员变量 4、利用反射获取成员方法 Java反射是一种强大的编…...
Unity ShaderLab引用HLSL文件找不到其中函数
在写Unity Shader的过程中,常常需要将方法封装到HLSL文件中,今天遇到一个这样的报错, 明明hlsl文件路径引用没问题,却引用不到方法 并且将分散文件中的函数复制过来一切正常,最终定位到HLSL的预编译指令中 这指令的…...
【文献笔记】LLM-based control code generation using image recognition
LLM-based control code generation using image recognition 原文代码 标题翻译:基于图像识别的LLM控制代码生成 1. 内容介绍 1.1. 简介 论文提出了一种基于LLM的新方法,通过图像识别从管道仪表图(Piping and Instrumentation Diagrams,…...