当前位置: 首页 > 知识库问答 >
问题:

使用Jenkins管道将多个git回购签出到子目录中

陶琦
2023-03-14

我在Jenkins的工作中使用Jenkins Multiple SCM插件将两个git存储库签出到两个子目录中。然后,我执行一组命令,用从所有三个存储库中提取的信息和代码构建一组工件。但是分支测试检查了两次?工作区具有当前结构:

root
-.git
-all other files
-test
-res

我希望工作区具有这种结构。

root
-test
-res

           node (label: 'YYY'){
     checkout([  
                $class: 'GitSCM', 
                branches: [[name: '*/test']], 
                doGenerateSubmoduleConfigurations: false, 
                extensions: [[$class: 'RelativeTargetDirectory', relativeTargetDir: 'test']], 
                submoduleCfg: [], 
                userRemoteConfigs: [[url: 'http://myrepo.git']]
            ])          
        
    dir('res') {
            git branch: 'master',  url: 'http://newrepo.git'
        }
    }
    
    pipeline {
        agent { label 'YYY' } 
        
        stages {
            xxx
        }
    }

共有2个答案

呼延永新
2023-03-14

你可以像这样克隆多个回购:

stage('Setup workspace') {
    dir('proj1') {
        git([url: 'git@gitlab.xxx.local:chenchuk/proj1.git', branch: 'master'])
    }
    dir('proj2') {
        git([url: 'git@gitlab.xxx.local:chenchuk/proj2.git', branch: 'master'])
    }
}

虽然它不在问题中,但值得一提的是,它也可以并行完成,如下所示:

stage('Setup workspace') {
    parallel('clone projects': {
        dir('proj1') {
            git([url: 'git@gitlab.xxx.local:chenchuk/proj1.git', branch: 'master'])}
    }, 'clone sf_tasks': {
        dir('proj2') {
            git([url: 'git@gitlab.xxx.local:chenchuk/proj2.git', branch: 'master'])}
    })
}
宋宇
2023-03-14

我为此使用了一个函数:

def checkoutGitRepo(final String repoUrl, final String repoBranch, final String folder) {
    //checkout in folder
    dir ("${folder}") {
        git(url: "${repoUrl}",
            credentialsId: 'jenkins-git-credential-id-here',
            branch: "${repoBranch}"
        )
    }
}

您可以将该函数放在共享库中,并在需要的任何构建中调用它。

 类似资料:
  • 在我的Jenkins工作中,我使用Jenkins Multiple SCM插件将三个git存储库签出到三个子目录中。然后,我执行一组命令,用从所有三个存储库中提取的信息和代码构建一组工件。 多个SCM现在折旧,文本建议转移到管道。我试过了,但我想不出怎么让它起作用。

  • 问题内容: 我正在使用Jenkins Multiple SCM插件将三个git存储库检出到Jenkins作业的三个子目录中。然后,我执行一组命令,以使用从所有三个存储库中提取的信息和代码构建一组工件。 现在已弃用多个SCM,并且文本建议移至管道。我尝试过,但是我不知道如何使它工作。 这是我感兴趣的从詹金斯工作目录的顶层看到的目录结构: 这三个子目录中的每一个都有一个单独的git repo签出。对于

  • 问题内容: 对“ svn”样式很抱歉-我们正在从SVN迁移到GIT(包括我们的CI Jenkins环境)。 我们需要的是使Jenkins能够将GIT项目(存储库?)检出(或应该说克隆?)到特定目录中。我们已经尝试了一些refspecs魔术,但是了解和成功使用它并不太明显。 此外,如果在同一个Jenkins项目中,我们需要将几个私有GitHub存储库检出到项目根目录下的几个单独的目录中,我们该怎么做

  • 问题内容: 尝试使用 这将失败,并显示身份验证错误。除了使用以外还有其他方法吗 withCredentials 在Jenkinsfile中签出标签 问题答案: 花完之后,几个小时就到了 在声明式管道中使用GitSCM的正确方法是 不像我在网络上的大多数地方都找到的

  • 我已经设置了一个Jenkins声明管道作业,它从Git中提取Jenkins文件。我有一个在另一个节点上运行的阶段(由标签选择),但它也试图从Git中检出Jenkinsfile。 我怎样才能阻止这种行为?这个特定的从属服务器位于防火墙的另一端,我只能通过SSH访问它。

  • 问题内容: 使用Jenkins 1.501和Jenkins Git插件1.1.26 我有3个不同的git仓库,每个仓库都有多个项目。 现在,我需要将所有3个git存储库中的项目检出到Jenkins从属服务器上的同一工作区中。我在以下 代码中 定义了每个git repo: 源代码管理:多个SCM 。但是每次签出一个回购协议时,先前的回购协议(及其关联项目)都会被删除。 我读过这个: http://j