在Jenkins中,如何将项目签出到特定目录(使用GIT)

问题描述 投票:47回答:7

抱歉'svn'风格 - 我们正处于从SVN迁移到GIT(包括我们的CI Jenkins环境)的过程中。

我们需要的是能够让Jenkins结帐(或者我应该说克隆?)GIT项目(存储库?)到一个特定的目录中。我们已经尝试了一些refspecs魔术,但是理解和使用成功并不是很明显。

此外,如果在同一个Jenkins项目中我们需要在项目根目录下将几个私有GitHub存储库签出到几个单独的目录中,我们怎么能这样做呢?

我们安装了GitHub插件。希望我们把事情说得对。

git github hudson jenkins jenkins-plugins
7个回答
36
投票

詹金斯的默认git plugin完成了相当不错的工作。

将新的git存储库(项目配置>源代码管理>检查GIT选项)添加到项目后,导航到插件设置的底部,就在存储库浏览器区域的上方。应该有一个高级按钮。单击它后,将出现一个新表单,其值描述为repo的Local子目录(可选)。将此设置为folder将使插件将存储库签出到相对于工作空间的文件夹中。这样,您可以根据需要在项目中拥有尽可能多的存储库,所有这些存储库都位于不同的位置。

或者,如果您正在使用的项目允许,您可以使用GIT子模块,它类似于SVN中的外部路径。在GIT Book中有一个关于这个主题的部分。如果这不符合某些策略,子模块使用起来相当简单,为您提供了强大的方法来控制将要导入的位置,版本/标签/分支,它将在您的本地存储库中可用,并为您提供更好的可移植性。

显然,GIT插件支持检出子模块,因此Jenkins可以非常有效地使用它们。


43
投票

我同意@ŁukaszRżanek我们可以使用git plugin

但是,我使用选项:checkout到子方向启用如下: 在源代码管理中,勾选Git 单击“添加”按钮,选择“结帐”到子目录


33
投票

在新的Jenkins 2.0管道(以前称为Workflow Plugin)中,这对于:

  • 主存储库
  • 其他额外的存储库

这里我特指的是Multibranch Pipeline版本2.9。

主存储库

这是包含Jenkinsfile的存储库。

在管道项目的“配置”屏幕中,输入存储库名称等。

不要使用其他行为>签出到子目录。这将把你的Jenkinsfile放在子目录where Jenkins cannot find it中。

Jenkinsfile中,使用dir()查看子目录中的主存储库:

dir('subDir') {
    checkout scm
}

其他存储库

如果要查看更多存储库,请使用Pipeline Syntax生成器自动生成Groovy代码段。

在管道项目的“配置”屏幕中:

  1. 选择管道语法。在Sample Step下拉菜单中,选择checkout:General SCM。
  2. 选择您的SCM系统,例如Git。填写有关存储库或软件仓库的常规信息。
  3. 请注意,在Multibranch Pipeline中,环境变量env.BRANCH_NAME包含主存储库的分支名称。
  4. 在Additional Behaviors下拉菜单中,选择Check out to a sub directory
  5. 单击Generate Groovy。 Jenkins将显示与您指定的SCM签出对应的Groovy代码段。
  6. 将此代码复制到管道脚本或Jenkinsfile中。

16
投票

值得研究的是Pipeline插件。使用该插件,您可以将多个VCS项目签出到相关目录路径中。事先为每个VCS结帐创建一个目录。然后向新签出的VCS工作区发出命令。就我而言,我正在使用git。但你应该明白这个想法。

node{
    def exists = fileExists 'foo'
    if (!exists){
        new File('foo').mkdir()
    }
    dir ('foo') {
        git branch: "<ref spec>", changelog: false, poll: false, url: '<clone url>'
        ......
    }
    def exists = fileExists 'bar'
    if (!exists){
        new File('bar').mkdir()
    }
    dir ('bar') {
        git branch: "<ref spec>", changelog: false, poll: false, url: '<clone url>'
        ......
    }
    def exists = fileExists 'baz'
    if (!exists){
        new File('baz').mkdir()
    }
    dir ('baz') {
        git branch: "<ref spec>", changelog: false, poll: false, url: '<clone url>'
        ......
    }
}

6
投票

此外,如果在同一个Jenkins项目中,我们需要在项目根目录下将几个私有GitHub存储库签出到几个单独的目录中。我们怎么能这样做?

Jenkin's Multiple SCMs Plugin非常好地解决了我的几个存储库问题。我刚刚完成了一个项目构建,它检查了一个公共文件夹下的四个不同的git repos。 (我有点不愿意使用git超级项目作为ŁukaszRżanek的suggested previously,因为git足够复杂而没有子模块。)


-1
投票

在新的管道流程中,以下图片可能有所帮助..

enter image description here


-4
投票

我不使用github插件,但是从介绍页面来看,它或多或少都像gerrit-trigger插件。

您可以安装git插件,它可以帮助您检查项目,如果您想在一个jenkins工作中包含多个项目,只需将Repository添加到您的工作中。

© www.soinside.com 2019 - 2024. All rights reserved.