繁体   English   中英

Jenkins:如何将一些常见文件从一个仓库合并到另一个仓库

[英]Jenkins: How to merge some common files from one repo to another

2 个 repos,repo1 和 repo2,具有不同的文件夹结构。 两个存储库中都存在一些常见的源文件。 构建成功后,需要将repo1的通用文件中的更改文件合并到repo2。

到目前为止,这是我所做的,但它并不完整,我被困在如何进一步前进; 有没有更好的方法来实现这一目标?

def filesNames      = ""
def filesNamesList  = ""
def files2push      = []
def branch          = env.GERRIT_PATCHSET_REVISION     
//files that need to be pushed from repo1 to repo2 once build is successful
def getFileMap(file){
    def repo1Repo2FileMap = [:]
    def repo1Repo2FileMap = ["dir1/dir2/file1.h" : "dir1/file1.h",
                            "fldr1/fldr2/file2.h" : "fldr2/file2.h"
                            ]
    return  repo1Repo2FileMap."$file"
}
//get changed files list
def getChanged(branch){
    def headRevision = sh (script: "git ls-remote | grep refs/heads/${branch} | head -n 1 | awk \'{print \$1}\'",
                            returnStdout: true)

    headRevision = headRevision.replaceAll("[\n\r]","")
    def getChangedList = sh (
        returnStdout: true,
        script: "git diff --name-only  $headRevision"
    ).trim().readLines().collect()
    if(getChangedList !=""){
        files = readFile(file: getChangedList)
        fileName = files.readLines()
        fileNameList = fileName.join(" ")
    }
    return changedFileNameList
}
stage("Push files to repo2"){
    
    getChanged(branch).each{
        if(getFileMap(it)){
            //eg: cp dir1/dir2/file1.h dir1/file1.h
            cp $file $it
            files2push.add(it)
        }
    }
}
stage("Merge Changed files to repo2"){
    dir("repo2"){
        bat """
            git add $files2push
            git commit -m "commit msg"
            git push
        """
    }
}

如何处理合并冲突情况,当 jenkins 尝试合并时,repo2 中的常用文件可能被其他人编辑。 我在想的是记录合并冲突并让用户通过修复合并冲突并重新触发 jenkins 作业来处理它。

有没有更好的方法来实现这一目标?

是的。 Git 子树

  • 所有共享文件移动到位置
  • 更改并验证移动源上的所有引用
  • 从共享资源文件夹创建3-rd repo
  • 从两个存储库中删除共享资源文件夹
  • 将带有 git 子树的资源存储库添加到资源文件夹的前位置到两个存储库中
  • 选择所有
  • 玩得开心

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM