当前位置: 首页 > 面试题库 >

Jenkins + Cmake + JIRA =多个相互依赖项目的CI?

宋高寒
2023-03-14
问题内容

我们的系统中有许多在Linux上运行的小项目(Slackware 7-11,正在缓慢迁移到RHEL
6.0)。大约50-100个应用程序和15-20个库。我们几乎所有的应用程序都使用一个或多个我们的库。我们的源代码树如下所示:

/app1
/app2
/app3
/include
/foo/app4
/foo/app5
/foo/app6
/foo/lib1
/foo/lib2
/lib/lib3
/lib/lib4
/lib/include

现在,我已经完成了一些创建CMakeLists.txt文件的工作,并构建了大多数库和某些应用程序。我对使用cmake进行构建相当满意。我使用v2.6做到了这一点,最近(一个小时前)我升级到2.8。以上每个项目都有自己的特定于该项目的CMakeLists.txt文件,以进行构建和安装(尚无包装)。

我需要利用并强制执行持续集成。我安装了Jenkins并在其中玩耍,从我所看到的印象中,我印象非常深刻。我也在评估JIRA来进行问题跟踪。

只是为了使事情顺利进行,我已经在所有库上进行了cmake安装,以便应用程序可以在文件系统中找到它们。标头安装到/ usr / local /
include,库安装到/ usr / local /
lib。这是一件坏事吗?最好告诉cmake查找lib的源目录,使用导出接口或最近引入的ExternalProject_Add吗?

因为我将要使用Jenkins,所以不能保证cmake可以找到源目录或构建目录。当然,我可以告诉Jenkins按顺序构建项目(或至少首先构建依赖项)。如果对库的更新中断了另一个项目的构建,那么我想这将取决于有3/4智慧的人来确定。

先感谢您


问题答案:

只是为了使事情顺利进行,我已经在所有库上进行了cmake安装,以便应用程序可以在文件系统中找到它们。标头安装到/ usr / local /
include,库安装到/ usr / local / lib。这是一件坏事吗?

不,这不是一件坏事,但是您的构建应该从头开始复制资源。如果需要在构建过程之外将其预先安装在系统中,则诸如可移植性和修复构建错误之类的问题将成为一个问题。如果您能够像您提到的那样以其他方式做到这一点,我会建议您这样做,但是如果它会使您的构建变得更长,那么您需要感觉一下。我的意识形态是,一切都应该转移到新的Jenkins机器上,只要戴上帽子就可以重新安装,这总是无法实现的,但是需要努力。

因为我将要使用Jenkins,所以不能保证cmake可以找到源目录或构建目录。当然,我可以告诉Jenkins按顺序构建项目(或至少首先构建依赖项)。如果对库的更新中断了另一个项目的构建,那么我想这将取决于有3/4智慧的人来确定。

我在相互依赖的工作中要做的一件事是,成功建立一项工作会触发依赖于此的工作。因此,例如,如果A依赖于B,而A失败,则B将永远不会运行,并且在版本A中创建问题的人都应对此负责。这样可以防止由于破坏的依赖关系而导致的构建破坏的连锁影响。我建议您将文件保留在其作业文件夹中的特定版本中,并为依赖项指定所需文件的位置。再次使您的构建分离且干净。

我也在评估JIRA来进行问题跟踪。

我强烈推荐JIRA作为公司的问题跟踪系统;您可能需要查看此
Jenkins插件进行集成。如果您使用的是git,并且您不介意不在站点外托管代码,那么我也会在GitHub上发个镜头。

祝您好运,您似乎走对了。



 类似资料:
  • 我已经在NetBeans8.1中创建了5个不同的Java SE项目。我想创建一个新的项目,该项目带有一个介绍窗口,该窗口带有链接/打开链接到该按钮的项目的按钮,并从该窗口创建一个软件。 我已经在主项目->Properties->Library->Compile->Add Project中添加了依赖项(其他项目的jar文件)。 当我在netbeans中运行它们时,运行窗口打开了,但是当我从主项目中调

  • 问题内容: 我已经搜索了很多,但是我发现的主要是python中的递归编程示例。因此,问题来了: 我该如何实现? 问题答案: 一切在Python中都是动态的-甚至是类声明。在初始声明之后,没有什么可以阻止您修改类的内容的: 注意:如果您不太熟悉Python,则该关键字仅允许您说“这里什么都没有”-除非A类的空值与本例中的一样空,否则它并不重要!

  • 我有一个类似于 B项目依赖于A项目 项目B的settings.gradle和build.gradle如下所示 格雷德尔酒店 格雷德尔先生 当我尝试在本地机器(Gradle版本3.2)上构建项目B时,它成功构建,一切看起来都很好。 当我尝试在jenkins中构建相同的项目(与我的本地版本相同的gradle版本)时,我得到了错误 它看起来像詹金斯,它是无法计算出相对路径。 我该怎么解决这个问题? 在j

  • 我有一个多模块Maven项目,其中包含子模块ModuleA和ModuleB等。ModuleA将ModuleB列为依赖项。但是,当仅构建模块A时,Maven不会解决模块B的依赖关系-导致。我想避免构建整个父级以使构建更快。目前我发现让它工作的唯一方法是使用exec插件和脚本,将父项目称为“ModuleB, ModuleA”,这意味着我必须在每次依赖项更改时更改脚本(例如添加ModuleC)。 是否有

  • Gradle 项目可以依赖于其它组件,这些组件可以是外部二进制包,或者是其它的 Gradle 项目。

  • 在之前提到的多项目配置中,:libraries:lib1 和 :libraries:lib2 可以是 Java 项目,并且 :app 这个 Android 项目将会使用它们输出的 jar 包。然而,如果你想这部分代码能够访问 Android APIs 或者使用 Android 的资源,那么这些 Library 项目就不能是 Java 项目,只能是 Android Library 项目。