0
点赞
收藏
分享

微信扫一扫

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

祈澈菇凉 03-31 09:30 阅读 3

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

一、动态库移位—cmake实现

在linux环境中

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

install(TARGETS aaa
        RUNTIME DESTINATION ${CMAKE_INSTALL_PREFIX}/bin
        LIBRARY DESTINATION ${CMAKE_INSTALL_PREFIX}/bin
        ARCHIVE 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之分。

二、文件回传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命令。

举报

相关推荐

0 条评论