NuGet和travis实践

S;CR

工作中接触到了yara,yara项目在windows上的编译是使用的vs2015,其中用到了openssl和jansson的第三方库,其中作者Victor M. Alvarez用的是nuget进行三方库管理的,感觉这个解决方案还不错,可能比自己去下载源码编译lib稍微方便一点儿,所以记录一下。

vs Solution实际测试

  • 下面就以openssl库为例进行一下测试。
  • 首先需要在项目的根目录下创建一个NuGet.Config 的文件,这个应该是方便vs的NuGet进行索引

    1
    2
    3
    4
    5
    6
    7
    8
    9
    <?xml version="1.0" encoding="utf-8"?>
    <configuration>
    <packageSources>
    <add key="YARA.OpenSSL"
    value="https://ci.appveyor.com/nuget/openssl-oaib8n7lvvtp" />
    <add key="YARA.Jansson"
    value="https://ci.appveyor.com/nuget/jansson-41we82mn284d" />
    </packageSources>
    </configuration>
  • vs的默认项目会带一个界面,可以直观的去下载,如下图。



    然后在项目中添加一下头文件的路径以及静态链接库的路径就可以使用了。


  • vs的cmake项目
    vs的cmake项目稍微有些不同,就是他没有图形界面,这个时候可以使用Package Manager Console来进行查找和下载第三方库。
    官方说明
    使用Find-Package openssl 进行搜索,可以发现有很多

    使用Install-Package YARA.OPENSSL.X64 命令进行下载

    效果是一样的,都会在项目的主目录的下面创建一个packages的目录并就对应的库下载到其中。这个时候就可以通过CmakeLists.txt进行头文件以及静态链接库的包含就可以使用了
    更新:
    cmake的项目在install-package的时候会找不到default solution的问题,所以只能通过将之前下载的packages的内容复制到cmake的项目下了。
    CMakeLists.txt的内容如下:
    1
    2
    3
    4
    5
    6
    7
    8
    cmake_minimum_required(VERSION 3.8)
    include_directories("${PROJECT_SOURCE_DIR}/packages/YARA.OpenSSL.x86.1.1.0/include")

    set(libcrypto ${PROJECT_SOURCE_DIR}/packages/YARA.OpenSSL.x86.1.1.0/lib/libcrypto.lib)
    set(libssl ${PROJECT_SOURCE_DIR}/packages/YARA.OpenSSL.x86.1.1.0/lib/libssl.lib)
    add_executable(Demo test.cpp)

    target_link_libraries(Demo ${libcrypto} ${libssl})

测试通过。
代码已上传至Github
https://github.com/kevien/democode

打包自己的package

  • yara项目中openssl库是作者自己打包到appveyor上的,那是如何上传自己打的包呢
  • nuget包的制作可以通过 NuGetPackageExplorer link
    这个工具还是挺方便的。
  • 而且这个工具还可以进行上传,如下图所示
  • 当然也可以直接使用nuget工具进行上传
  • 这样我们就完成了自定义包的上传。

    (现在的方式还是需要进行验证的,也就是需要输入appveyor的用户名和密码,public的方式暂时还没找到方法)

    利用travis进行持续化集成

  • 首先在github创建一个token,并赋予适当的权限。可参考如下链接
    https://blog.wyrihaximus.net/2015/09/github-auth-token-on-travis/
    https://docs.travis-ci.com/user/github-oauth-scopes/
  • 然后在github的项目当中添加.travish.yml 文件,可参考
    https://docs.travis-ci.com/user/deployment/releases/
  • 测试项目
    https://github.com/kevien/travisTest/
    1
    2
    部署的时候有几个坑(MDZZ),一个是file 的位置,这个会在travis的job log的展开中看到(看log、看log、看log)。
    第二个就是要在deploy项下加上键值 skip_cleanup: true

总结

  • 用NuGet进行第三方库的操作还是比较方便的,还有就是开源项目的持续集成使用travis工具是个不错的选择。