【jenkins+cmake+svn管理c++项目】jenkins回传文件到svn(windows)

书接上文:创建一个项目
在经过cmake+msbuild顺利生成动态库之后,考虑到我一个项目可能会生成多个动态库,它们分散在build内的不同文件夹,我希望能将它们收拢到一个文件夹下,并将其回传到svn。

一、动态库移位—cmake实现

在linux环境中

,生成动态库或可执行程序的那一层cmakelist.txt中末尾添加以下代码:

install(TARGETS aaaRUNTIME DESTINATION ${CMAKE_INSTALL_PREFIX}/binLIBRARY DESTINATION ${CMAKE_INSTALL_PREFIX}/binARCHIVE DESTINATION ${CMAKE_INSTALL_PREFIX}/lib)

解释:
aaa: 动态库名字,假如你的动态库叫libaaa.so,这里就写aaa。
${CMAKE_INSTALL_PREFIX}: 想要存放的文件夹路径,提前定义好。
RUNTIME :可执行程序;LIBRARY :动态库;ARCHIVE :静态库。

设置好之后,在运行完cmakemake命令之后再运行make install命令,这个命令会根据上面的代码将你的动态库拷贝到你设置好的文件夹。

windows环境

,生成动态库或可执行程序的那一层cmakelist.txt中末尾添加以下代码:

if(WIN32)		
SET_TARGET_PROPERTIES(aaa PROPERTIES RUNTIME_OUTPUT_DIRECTORY "${CMAKE_INSTALL_PREFIX}/bin") 	
endif()	

设置好之后,运行完msbuild命令,生成的动态库会自动被剪切到设置好的文件夹中,无需增加别的命令。这里与linux不同的是可执行程序和动态库都用RUNTIME_OUTPUT_DIRECTORY ,没有RUNTIME和LIBRARY之分。


如图,我的两个动态库都被剪切到dist目录里边了

二、文件回传svn

我希望将dist文件夹中的内容回传到svn。

方案一 使用svn publisher plugin 这个插件

插件安装方法看:创建一个项目
安装完成之后在system设置里边添加上插件的配置信息,如下图

这里是引用

然后再项目配置中“构建后操作步骤”选择下图选项:

这里是引用

并做以下设置:
svn url: 要上传到的svn路径
target path: jenkins工作空间中你准备好的动态库的目录
items: 要上传的文件

这里是引用

但是,很遗憾,我配置好了运行之后也显示success了,但是svn上边始终没有出现我上传的文件,完全摸不着头脑,有解决思路的朋友请留言,十分感谢!

方案二 使用svn commit命令上传

1、svn命令

由于插件不起作用,那我想让jenkins像一般客户端一样通过update、commit等方式来操作svn。
这个前提是服务器本身就能够在cmd中使用svn命令!打开cmd,输入svn --version检查一下,如果能用那就完美,如果不能用,首先检查系统环境变量中Path路径是否 设置,还没设置的话太好添加上就可以了。如果Path设置过了依然不能用,哦吼,就只能重装svn了。参考:https://blog.csdn.net/u010648555/article/details/50596303

2、upgrade

重装之后,我在jenkins拉取代码的文件夹内右键发现没有出现update和commit按钮,而是一个upgrade的提示语,查了帖子说是拉取代码的svn版本比服务端安装的svn版本低,需要先upgrade一下,服务端的svn才能正常读取。另外,注意upgrate命令必须在项目的最外层执行
在这里插入图片描述
这里补充一下,我发现在system配置中svn的版本号默认为1.4,我将其改为最高的1.8之后,不用执行upgrade命令,也能正常commit了
在这里插入图片描述

3、add+commit

如果你要上传的是原本svn路径中没有的文件,那么仅仅commit是没有用的,需要先用add命令将其纳入版本控制中,再commit

于是,我最终的命令如下图:

这里是引用

mkdir build
cd build
cmake ../ -A x64 -DCMAKE_CL_64=true
msbuild aaa.sln /p:Configuration=Release /p:Platform=x64
cd ..
svn upgrade
cd dist
svn add *
svn commit -m " test: Jenkins controls SVN's submission"

不过这种方式有一点不好,就是不能直接将某个目录下的文件上传到其它的svn路径,要上传只能先拷贝到另一个svn拉取下来的目录中,然后再在那个目录中使用commit命令。

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

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

相关文章

45 对接海康视频九宫格的实现

前言 这里主要是 来看一下 海康视频 的一个九宫格播放的需求 然后 在实际使用的过程中产生了一些问题, 比如 增加一个视频, 应该只增量请求这一个视频的服务, 而一些实现下是全量请求了 整个视频列表的服务 另外 就是全屏播放, 如果是 自己写样式来实现 全屏播放, 可能需要 …

使用vagrant快速创建linux虚拟机

1. 技术解释 vagrant:是一款用于管理虚拟机的命令行使用软件,用Ruby语言开发而成,可以通过 Vagrant 封装一个 Linux 的开发环境,是一款用来构建虚拟开发环境的工具。使用vagrant可以省去你使用虚拟机创建操作系统的所有操作&…

场效应管(MOS管)知识点总结

目录 一、场效应管(FET)基础知识 1.名称 2.电路符号 3.分类 4.应用场景 5.厂商介绍 二、MOS管G、S、D以及判定 三、耗尽型场效应管工作原理 (耗尽型:depletion mode) 四、NMOS与PMOS的区别 (区别:difference) (多晶硅:polysilicon) …

zookeeper 监控 与 JVM 设置

一、通过JMX监控 JVM 默认情况下,在 ./bin/zkServer.sh 脚本中是默认开启了JMX监控的,并且是不需要认证的,详情可见ZOOMAIN变量; ZOOMAIN"-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port$JMXPORT -D…

vue内置组件、特殊元素、组件api详解

vue3移动端项目搭建,vue3vantviteaxiospiniasass完整版代码下载: https://download.csdn.net/download/randy521520/88820174 vue3移动端项目构建TS,vue3vantviteaxiospiniasasstypescript完整版代码下载: https://download.csdn.…

java中的多态以及对象的类型转换

多态 多态指的就是同一事物在不同情况下表现出来的不同状态或者行为。在java中,当调用同一个方法时,由于对象存在差异,不同的对象之间可能存在不同的行为,当父类引用指向了子类对象,用这个父类引用调用子类中重写的方法…

深度学习十大算法之Diffusion扩散模型

1. 引言 扩散模型在近年来成为了热门话题,其火速蹿红主要归功于在图像生成领域的突破应用。尤其是一些从文本到图像的生成技术,它们成功地运用了扩散模型来创建令人惊叹的逼真图像。如果你听说过某个应用能够迅速且高质量地生成图像,那么很可…

【效率提升】Xinstall免填邀请码,让App注册更便捷

在移动互联网时代,App已经成为我们生活中不可或缺的一部分。然而,每当我们要尝试一个新的App时,繁琐的注册流程总是让人感到头疼。其中,填写邀请码这一环节更是让许多人望而却步。幸运的是,Xinstall作为国内专业的App全…

每日OJ题_栈⑤_力扣946. 验证栈序列

目录 力扣946. 验证栈序列 解析代码 力扣946. 验证栈序列 946. 验证栈序列 难度 中等 给定 pushed 和 popped 两个序列,每个序列中的 值都不重复,只有当它们可能是在最初空栈上进行的推入 push 和弹出 pop 操作序列的结果时,返回 true&a…

数据链路层之信道:数字通信的桥梁与守护者

✨✨ 欢迎大家来访Srlua的博文(づ ̄3 ̄)づ╭❤~✨✨ 🌟🌟 欢迎各位亲爱的读者,感谢你们抽出宝贵的时间来阅读我的文章。 我是Srlua小谢,在这里我会分享我的知识和经验。&am…

C#/BS手麻系统源码 手术麻醉管理系统源码 商业项目源码

C#/BS手麻系统源码 手术麻醉管理系统源码 商业项目源码 手麻系统从麻醉医生实际工作环境和流程需求方面设计,与HIS,LIS,PACS,EMR无缝连接,方便查看患者的信息;实现术前、术中、术后手术麻醉信息全记录;减少麻醉医师在…

.NET Core教程:深入实践与实例解析

.NET Core教程:深入实践与实例解析 随着技术的发展,.NET Core作为微软推出的一个开源、跨平台的.NET实现,已经越来越受到开发者的青睐。本文将详细讲解.NET Core的基础知识,并通过实例来解析其关键特性和使用方法。 一、.NET Co…

AI程序员Devin的开源替代Devika

前天介绍了 AI软件工程师 微软AI 程序员AutoDev,自主执行工程任务生成代码-CSDN博客 今天介绍下另一款Devin替代品,开源的Devika (另外还有一个开源的 OpenDevin : https://github.com/OpenDevin/OpenDevin) Devika https://github.com/stitionai/dev…

Redis在多节点上如何实现分布式锁?

在多个 Redis 节点上实现分布式锁可以通过以下步骤来完成: 选择分布式锁的实现方式:有多种实现分布式锁的方式,如使用 Redis 的普通锁、RedLock 等。RedLock 是一种基于多个 Redis 节点的分布式锁实现,它通过在多个节点上获取锁来…

awesome-cheatsheets:超级速查表 - 编程语言、框架和开发工具的速查表

awesome-cheatsheets:超级速查表 - 编程语言、框架和开发工具的速查表,单个文件包含一切你需要知道的东西 官网:GitHub - skywind3000/awesome-cheatsheets: 超级速查表 - 编程语言、框架和开发工具的速查表,单个文件包含一切你需…

Python:魔法函数

注意:本文引用自专业人工智能社区Venus AI 更多AI知识请参考原站 ([www.aideeplearning.cn]) Python 的魔法函数,又称为特殊方法,是 Python 类中定义的一组特殊的方法,具有一些独特的特性和用途。这些方法…

今日总结2024/3/30

今日学习了基本数论内容,LCM,GCD以及筛素数 GCD-最大公约数 int gcd(int a,int b){//迭代法 while(b){//要保证a大于b int ta%b; ab; bt; } return a }//辗转相除法int gcd(int a,int b){//递归法return b?gcd(b,a%b):a;//一定要保证a大于b } LCM-最小公倍数 可以套公式LC…

解决WordPress文章的段落首行自动空两格的问题

写文章时,段落首行都会空两格,可是WordPress自带的编辑器却没有考虑到这一点,导致发布的文章首行都是顶格的,看起来很不习惯。 我们通常的解决方法都是在发布文章时把编辑器切换到“文本”模式,然后再在首行手动键入两…

鸿蒙之路由跳转router

router的使用都是基于Entry修饰的组件。 都是基于resources/base/profile/main-page.json中的路由配置来跳转的 router提供下列的几个方法 1.pushUrl -压栈一层盖一层(在鸿蒙中页面栈支持最大数值是32) 2.replaceUrl会替换当前页面,不管是不是同一个页面&#xf…

超声波雷达探测车位及信号处理方法

在APA泊车中用到了超声波雷达,第一次接触,总结研究之。 目录 1. 基于USS的泊车位识别及推荐1.1 基于AVM的泊车位识别1.2 障碍物识别2. 超声波雷达及车位探测信号处理1. 基于USS的泊车位识别及推荐 参考: F-APA车位搜索及障碍物识别控制原理 1.1 基于AVM的泊车位识别 (1)a…