2017-10-20 97 views
0

情况...Jenkins管道:如何将它们与Git一起使用,特别是使用多个Git仓库?

我有几个Git仓库,这些都是我的构建所需要的。我正在积极开发代码,其他代码包含我使用的库代码。由于每个回购都是独立的,当然它们都有不同的分支名称。

对于我的Jenkins构建,我想从每个回购中获取相关版本的代码,将它们放在正确的子目录中,并构建我的项目。理想情况下,我也应该能够做一个浅层克隆(因为这些回购中的一个很大),并且能够仅对我想要的路径进行稀疏结算。

Multiple SCMs plugin似乎是这份工作的理想工具。然而,它并没有积极发展,而且我看到它引发了其他人讨论过的断言。

我见过this question它回答了如何使用Jenkins管道来做到这一点,所以我调查了Jenkins管道。我很快从Git Pipeline documentation中发现,它对Git的支持最可能被描述为“最小化”,这一说法对于Pipeline概念的其余部分同样适用。 (而这就是我们进入梦魇之前,用纯文本界面取代一个完美可行的用户界面。维护噩梦,很多?呃!)

我也可以设置Git子项目。我宁愿不必为了解决最新版本Jenkins的不足而采用这条路线,但是如果它是唯一的解决方案,就必须有这个必要。

我会说Jenkins以外的解决方案并不是真正的选择,因为我们在公司中一直在使用Jenkins一段时间,而且我们并不想真的需要设置其他的东西。

回答

0

我认为Pipeline中的git支持并不缺乏。至少不再是。而且管道非常强大。当然不是最小的。也许你正在看旧的文档。声明式管道可能仍然有点不成熟,但仍然非常强大和简单,通常是我的默认选择,除非我需要更加疯狂。

您为git构建步骤发布的文档只是checkout scm步骤的包装,可用于非常简单的git操作。这当然不是在Jenkins中使用git的可用选项的范围。

特别是,我有一个多分支管道工作,看着一个git回购。当检测到更改时,将回购库下拉,然后将另一个回购库的稀疏检出拉入子目录,然后将另一个完整的回购库下拉到另一个目录中。我运行一些构建脚本。压缩一些东西,部署压缩文件,然后运行一些远程ssh进程来处理远程服务器上的软件包。

在声明管线我的稀疏结账做到这一点:

dir("package/infra") { 
    deleteDir() //start with a clean directory 

    checkout([$class: 'GitSCM', branches: [[name: '*/master']], extensions: [[$class: 'SparceCheckoutPaths', sparseCheckoutPaths: [[path: "my/path/here"]]]], userRemoteConfigs: [[credentialsId: 'asdf-fdsa-werw5-asjksadf-wlfjsdf', url: '[email protected]:ABC/DEF.git']]]) 

} 

你也可以做浅层克隆和复杂的混帐行为的所有方式。

对于您的库,您可能会更好一些,并将构建的构件存储在artifactory中,或者将它们存档在Jenkins中。然后从artifactory中引入工件或使用副本Artifacts插件。带他们从另一份工作。但每种情况都不一样。

+0

感谢罗布。所以问题不在于插件可以做什么,而是文档。:/我会继续挖掘。 – Graham