Jenkins管道:如何在Git中使用它们,特别是在多个Git回购中?

Jenkins管道:如何在Git中使用它们,特别是在多个Git回购中?,git,jenkins,jenkins-pipeline,Git,Jenkins,Jenkins Pipeline,情况 我有几个Git回购协议,这些都是构建所需的。我正在一个平台上积极开发代码,而其他平台包含我使用的库代码。由于每个回购协议都是独立的,当然它们都有不同的分支机构名称 对于我的Jenkins构建,我希望从每个repo获取相关版本的代码,将它们放在正确的子目录中,然后构建我的项目。理想情况下,我还应该能够进行浅层克隆(因为其中一个repo很大),并且能够仅对我想要的路径进行稀疏签出 这似乎是这项工作的理想工具。然而,它并没有处于积极的开发阶段,我看到它抛出了其他人已经谈论过的断言 我已经了解了如

情况

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

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

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

我已经了解了如何使用Jenkins管道来实现这一点的答案,所以我调查了Jenkins管道。我很快从中发现,它对Git的支持可以用“最小”来描述,这一说法对管道概念的其余部分同样适用。(那是在我们进入恶梦之前,恶梦正在用纯文本界面取代一个完全可行的UI。维护恶梦,太多了?啊!)

我还可以设置Git子项目。我不想走这条路来解决Jenkins最新版本的不足之处,但如果这是唯一的解决方案的话,我必须这样做


我要说的是,除了Jenkins之外的解决方案并不是一个真正的选择,因为我们公司已经在使用Jenkins一段时间了,我们真的不想设置其他东西。

我认为正在开发的git支持一点也不缺乏。至少现在不会了。而且管道非常强大。当然不是最低限度的。也许您正在查看旧文档。声明性管道可能仍然被认为有点不成熟,但仍然非常强大和简单,通常是我的默认选择,除非我需要更疯狂一点

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

特别是,我有一个监视git回购的多分支管道工作。当检测到更改时,会将repo下拉,然后我将另一个repo的稀疏签出下拉到一个子目录中,然后将另一个完整的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']]
    ])

}
您还可以进行浅层克隆,以及各种复杂的git行为


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

谢谢你,罗布。所以问题不在于插件能做什么,而在于文档。:/注意,在调用稀疏签出之前删除目录将导致git报告
git read tree-mu HEAD“返回的状态代码128:stdout:stderr:fatal:不是有效的对象名称头
。”。这并没有破坏我的身材。解释发生了什么以及为什么它不是主要问题。通过不删除目录,而是添加CleanBeforeCheckout扩展名来解决此问题,例如
扩展名:[[$class:'CleanBeforeCheckout'],[$class:'sparsecheckoutpath',sparsecheckoutpath:[[path:'my/path/here']]],