簡體   English   中英

如何從Cake構建任務將Tag推送到Bamboo中的Bitbucket Git存儲庫中?

[英]How to push Tag to Bitbucket Git Repository in Bamboo from Cake build task?

我正在使用下一個代碼將Tag推送到Git存儲庫

#addin "Cake.Git"
using LibGit2Sharp;

var solutionFolder = "./";
var versionTag = "someTag";

Task("Default")
    .Does(() =>
    {
        var remoteRepository = EnvironmentVariable("bamboo_planRepository_repositoryUrl");
        var repositoryRevision = EnvironmentVariable("bamboo_planRepository_revision");

        var absolutePath = MakeAbsolute(Directory(solutionFolder));
        var repoName = "central";

        //LibGit2Sharp add remote  
        using (var repo = new Repository(absolutePath.FullPath))
        {
            repo.Network.Remotes.Add(repoName, remoteRepository);
        }

        GitTag(solutionFolder, versionTag, repositoryRevision);
        GitPushRef(solutionFolder, gitUser, gitPassword, repoName, versionTag); 
    }
});

陷入下一個問題:因為我們的竹子配置為使用SSH協議,並且Cake.Git(LibGit2Sharp)當前不支持它收到下一個錯誤

錯誤:不支持的URL協議

謝謝

我懷疑問題是由於使用了淺層克隆,淺層克隆默認情況下啟用。

淺克隆允許Bamboo執行克隆,即將歷史記錄截斷為指定的修訂版本。 這樣可以提高初始代碼簽出的速度,但是,如果您的構建依賴於完整的存儲庫歷史記錄,我們建議您不要使用此選項。

GIT操作通常需要完整的倉庫才能可靠地工作。

有點駭人聽聞,但它有效,會在找到更好的方法時更新答案。

根據如何在竹制建築中標記git repo來完成

Cake.Git當前不支持添加存儲庫,但在后台使用LibGit2Sharp進行了添加,因此僅在代碼中添加了LibGit2Sharp命名空間。

核心問題是Cake.Git(LibGit2Sharp)尚不支持SSH(在GitHub上的問題是否可以將Cake.Git與SSH一起使用 ),因為workaraound調用git push cmd

    #addin "Cake.Git"
    using LibGit2Sharp;

    var solutionFolder = "./";
    var versionTag = "someTag";
    var remoteRepository = EnvironmentVariable("bamboo_planRepository_repositoryUrl");
    var repositoryRevision = EnvironmentVariable("bamboo_planRepository_revision");

    Task("Default")
        .Does(() =>
        {
            var absolutePath = MakeAbsolute(Directory(solutionFolder));
            var repoName = "central";

            //LibGit2Sharp add remote  
            using (var repo = new Repository(absolutePath.FullPath))
            {
                repo.Network.Remotes.Add(repoName, remoteRepository);
            }

            GitTag(solutionFolder, versionTag, repositoryRevision);
            Cmd($"git push {repoName} {versionTag}");
        }
    });

private void Cmd(params object[] parameters)
{
    if (parameters.Any())
    {
        var args =  new ProcessArgumentBuilder()
            .Append(@"/c");

        foreach (var param in parameters)
            args.Append($"{param}");

        StartProcess("cmd", new ProcessSettings { Arguments = args });
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM