首页 > 其他分享 >Jenkinsfile 同时检出多个 Git 仓库

Jenkinsfile 同时检出多个 Git 仓库

时间:2022-11-16 22:04:20浏览次数:41  
标签:git url Git 检出 folder stage class Jenkinsfile

前置

通常,在 Jenkinsfile 中使用 Git 仓库是这样的:

stage('Checkout git repo') {
    steps {
        checkout([
            $class: 'GitSCM',
            branches: [[name: 'develop']],
            userRemoteConfigs: [[
                credentialsId:  'ssh-private-key-id',
                url: 'project-git-repo-url'
            ]]
        ])
    }
}

以上写法的结果是远程 Git 仓库中所有内容都被检出到当前工作目录下,因此我们才能像下面这样(不用切换目录而)直接运行一些命令:

stage('generate version number') {
    steps {
        VERSION_NUBMER = sh(script: "git describe --always", returnStdout: true).trim()
    }
}

将 Git 仓库检出到指定文件夹

如果要同时拉取多个 Git 仓库,面临的首要问题是如何将 Git 仓库检出到指定文件夹。对此,可以通过使用 $class: 'RelativeTargetDirectory' 解决,具体代码如下:

stage('Checkout git repo') {
    steps {
        checkout([
            $class: 'GitSCM',
            branches: [[name: 'develop']],
            userRemoteConfigs: [[
                credentialsId:  'ssh-private-key-id',
                url: 'project-git-repo-url'
            ]],
            extensions: [[
                $class: 'RelativeTargetDirectory',
                relativeTargetDir: 'repo-folder'
            ]]
        ])
    }
}

这样一来,远程 Git 仓库中所有内容将被检出到 ./repo-folder 文件夹下;后续我们若想在 Git 项目目录下操作,就需要先 cd ./repo-folder 了,例如:

stage('generate version number') {
    steps {
        VERSION_NUBMER = sh(script: "cd ./repo-folder && git describe --always", returnStdout: true).trim()
    }
}

检出多 Git 仓库

在解决了将 Git 仓库检出到指定文件夹这一问题后,检出多 Git 仓库这一需求就稍显容易,下面以检出repoA、repoB、repoC三个仓库为例:

stage('Checkout multiple git repos') {
    steps {
        checkout([
            $class: 'GitSCM',
            branches: [[name: 'develop']],
            userRemoteConfigs: [[
                credentialsId:  'ssh-private-key-id',
                url: 'project-git-repoA-url'
            ]],
            extensions: [[
                $class: 'RelativeTargetDirectory',
                relativeTargetDir: 'repoA-folder'
            ]]
        ])

        checkout([
            $class: 'GitSCM',
            branches: [[name: 'develop']],
            userRemoteConfigs: [[
                credentialsId:  'ssh-private-key-id',
                url: 'project-git-repoB-url'
            ]],
            extensions: [[
                $class: 'RelativeTargetDirectory',
                relativeTargetDir: 'repoB-folder'
            ]]
        ])

        checkout([
            $class: 'GitSCM',
            branches: [[name: 'develop']],
            userRemoteConfigs: [[
                credentialsId:  'ssh-private-key-id',
                url: 'project-git-repoC-url'
            ]],
            extensions: [[
                $class: 'RelativeTargetDirectory',
                relativeTargetDir: 'repoC-folder'
            ]]
        ])
    }
}

上面

标签:git,url,Git,检出,folder,stage,class,Jenkinsfile
From: https://www.cnblogs.com/astrofeyx/p/jenkins-parallel-checkout-multiple-git-repositories.ht

相关文章

  • Jenkinsfile 同时检出多个 Git 仓库
    前置通常,在Jenkinsfile中使用Git仓库是这样的:stage('Checkoutgitrepo'){steps{checkout([$class:'GitSCM',branches:......
  • Git笔记
    Git笔记git命令行操作设置信息设置用户名和邮箱gitconfig--globaluser.name"ch"gitconfig--globaluser.email"[email protected]"workspace提交代码至repository......
  • git分支创建以及合并
    1、目前所有分支2、查看当前分支3、创建新分支gitcheckout-blogin-temp(-b创建一个分支,checkout切换到这个分支)4、gitstatus检查login-temp分支的文件状态5、......
  • Git 基础命令
    Git介绍分布式版本控制工具Git命令Git分支分支特性分支创建分支转换分支合并代码合并冲突解决Github创建远程库代码推送Push代码拉取Pull代码克隆CloneSSH......
  • 使用 Web 钩子将 Gitea 消息推送到飞书机器人
    Web钩子(Webhook)是一种基于HTTP的回调函数,可实现轻量级的事件驱动通信。在Gitea当中有一个很常见的Webhook应用场景便是持续集成:当你从本地推送代码到Gitea仓库后......
  • Rename a Local and Remote Git Branch
    RenamingGitBranchFollowthestepsbelowtorenameaLocalandRemoteGitBranch:01Startbyswitchingtothelocalbranchwhichyouwanttorename:gitch......
  • vscode提交git自动格式化的问题
    最近不是在写新项目嘛,发现提交git之后总会有大批的代码变动,而且只是单纯的格式化,这根本没必要,还会妨碍我看我的代码变化,今天有时间了处理一下就是类似这样的代码,在上传git......
  • git 分支合并到master,将分支所有提交汇总为一次提交
    当有一个新的功能需要开发时,我们一般需要从master新建一个功能开发分支,如果这个功能需要的开发周期超过一天,我们一般都会留下多次commit提交。当功能开发并测试完毕,需要合......
  • GIT-LFS(解决大于100M的文件无法上传的问题)
    1.什么是GIT-LFSGitLFS(LargeFileStorage)是一个开源的Git大文件版本控制的解决方案和工具集,工具自身是基于Golang进行实现,并在Github上开源。原理上是通过对Git客户......
  • gitlab 部署与钉钉集成
    gitlab部署与钉钉集成gitlab部署此处展示docker部署gitlabdockerrun\--hostname192.168.49.1\#192.168.49.1为自己局域网的ip--publish7001:44......