使用CI服务器和Artifactory超越Java

在过去的几年中,持续集成(CI)和自动化发布管理方法在非java构建中变得更加强大 数量这些方法使用了一些熟悉的工具,比如版本控制系统管理你的源代码,你的构建工具,实际构建你的软件从源代码和构建服务器,它不断地构建你的软件使用构建工具。但还有什么东西不见了吗?让我们看一个简单的图表,它描述了你的CI过程:

1.开发人员获取所需的依赖项(第三方库,其他模块)。2.开发人员编写新代码。3.代码致力于风投公司.4.构建服务器轮询VCS以获取更改。5.一旦发现,构建服务器构建软件:编译它,运行测试,并组装工件。6.构建的工件发布到QA、暂存,甚至直接发布到最终用户。正如你所看到的,除了第一阶段和第六阶段之外,所有的东西都是众所周知和熟悉的。但是这两个阶段呢?您需要为它们提供依赖管理机制。 In this post, we’ll illustrate the options for automated builds with dependency management in non-Java builds or when not using .NET with NuGet (use it, if you can!在这里我们的看法是关于它)。建议的解决方案适用于任何类型的构建,无论是C, c++, c#, iOS和Objective C, Python或其他。那么,让我们看看如何在非java项目中使用依赖管理来实现CI。以下是这些选择及其优缺点:

解决方案
优点
缺点
1
VCS中的依赖
-使用成熟的构建工具
-简单的设置-你使用VCS
- VCS不适合二进制依赖。你可以阅读为什么在这里
2
构建带有内置依赖项管理的工具就像MavenGradle
- - - - - -构建具有依赖管理的工具
- - - - - -新工具去学习。Maven 2和Gradle有一个相当陡峭的学习曲线。
-“改编”自Java。而 在那里 方法 用它们构建“原生”应用程序(用Gradle更容易,用Maven更难)仍然让人觉得,强加于它们的新约定是不自然的。
3.
在构建服务器中声明对构建的依赖关系
-使用成熟的构建工具
-仅适用于项目间依赖项(由同一构建服务器构建)
-不够灵活 -包括/不包括 -布局更改
4
使用共享的依赖存储,也就是存储库(FTP、文件服务器等)
-使用成熟的构建工具
-手动填充存储库
—管理存储库

正如您所看到的,没有一个解决方案是没有缺点的。

Artifactory来了

Artifactory是一个二进制存储库-构建与二进制文件管理方面的考虑版本控制、管理、安全和构建服务器集成。
因此,使用Artifactory完全消除了第四个解决方案的缺点。您的构建可以使用强大的 REST API .米 管理简单,精简。
但还有更多。通过使用Jenkins的人工CI集成, TeamCity和Bamboo,你也可以避免上面列出的第三个解决方案的缺点。首先,您可以指定要发布哪些工件。它们将被上传到Artifactory构建结束。其次,您可以指定构建需要哪些依赖项。它们将在运行期间从Artifactory下载。所有这些都可以通过使用构建服务器UI来实现。
Artifactory Jenkins插件 ,例如,定义为 通用的 建立支持 一种简单的基于模式的语言,允许您表达工件构建将被部署到存储库中。这包括附加动态搜索属性在部署时添加到这些构件。
首先,在构建环境中启用通用人工集成:

接下来,配置自定义部署和解析规则。让我们从部署(发布)开始:

在上面的示例中,我们为部署配置了以下规则。所有的工件都将从工作目录部署到' lib -release-local '存储库中(如上所述)。维护每个文件的路径:

模式
意义
* * / x64 / *dll = > x64Win
将所有dll部署到“x64Win”目录
* * / *邮政= >winFiles
将所有zip文件部署到winFiles目录
unix/ *tgz
部署所有tgz将Unix目录下的文件移到目标存储库的根目录
该插件还控制在构建开始之前从存储库中解析哪些工件。分辨率允许你指定智能搜索模式:

在上面的示例中,我们为依赖关系解决方法:

模式
意义
填词-release-localx64Wi / *;compatibilityLevel=媒介
将文件从lib -release-local存储库的x64Wi目录解析到工作空间的根目录,但仅当compatibilityLevel属性设置为上面媒介
填词-snapshot-local*邮政= >winFiles
将所有zip文件从lib -snapshot-local存储库解析为winFiles目录在工作区的根目录下
填词-snapshot-localunix /发行版tgz = >linuxFiles
解决了发行版tgz文件从Unix目录在lib -snapshot-local到linuxFiles目录在工作区的根目录下
填词-release-local* * / * @winx64_build #释放
这个例子显示了依赖于工件在标记为“已发布”状态的早期构建期间生成的
从配置的角度来看,这种对自动依赖声明和发布的支持使得支持一个发布流变得非常容易,在这个发布流中,多个工件被收集起来以构建最终版本
非常欢迎你去试一试。中提供了上面描述的发布功能 Artifactory的免费开源版本 .如果要配置依赖关系分辨率,继续下载 专业版评估
依赖管理对于持续集成和快速发布是至关重要的。通过将Artifactory添加到CI堆栈中,您可以轻松地克服构建工具中缺乏此类功能的问题,从而留下依赖项解析和工件部署到二进制存储库和构建服务器。