Jenkins管道:如何在Git中使用它们,尤其是使用多个Git存储库?

时间:2017-10-20 18:28:16

标签: git jenkins jenkins-pipeline

情况......

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

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

Multiple SCMs plugin似乎是这项工作的理想工具。然而,它并没有处于积极的发展阶段,而且我已经看到它抛出其他人所谈论的断言。

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

我也可以设置Git子项目。我宁愿不必走这条路来解决Jenkins最新版本的不足之处,但如果它是唯一的解决方案则需要它。

我会说Jenkins以外的解决方案实际上不是一个选择,因为我们已经在我们公司使用Jenkins一段时间了,我们真的不想设置别的东西。

1 个答案:

答案 0 :(得分:1)

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

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

特别是,我有一个监视git repo的multibranch管道作业。当检测到更改时,会撤消repo,然后将另一个repo的稀疏checkout下拉到子目录中,然后将另一个完整的repo下拉到另一个目录中。我运行一些构建脚本。压缩一些东西,部署zip文件,然后运行一些远程ssh进程来处理远程服务器上的包。

在声明性管道中,我为稀疏结账执行此操作:

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

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

}

你也可以做Shallow克隆,以及各种复杂的git行为。

您可能最好为您的库进行第二次构建,并将构建的工件存储在artifactory中,或者只是将它们存档在Jenkins中。然后从神器中带入工件或使用复制Artifacts插件。把他们从另一份工作中带走但每种情况都不同。