如何从Cake构建任务中将Tag推送到Bamboo中的Bitbucket Git存储库?

问题描述 投票:1回答:2

我正在使用下一代码将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协议

谢谢

c# git bitbucket bamboo cakebuild
2个回答
1
投票

我怀疑问题是使用浅克隆,默认情况下启用。

Shallow克隆允许Bamboo执行克隆,即将历史截断为指定数量的修订。这应该可以提高初始代码检出的速度,但是如果您的构建依赖于完整的存储库历史记录,我们建议您不要使用此选项。

GIT操作通常需要完整的回购才能可靠地运行。


1
投票

有点hacky但它​​的工作原理,会在找到更好的方法时更新答案。

完成基于How to tag a git repo in a bamboo build.

Cake.Git目前不支持使用LibGit2Sharp添加存储库,但只是在代码中添加了LibGit2Sharp命名空间。

核心问题是Cake.Git(LibGit2Sharp)还不支持SSH(GitHub Is it possible to use Cake.Git with SSH上的问题),因为workradound通过cmd git push调用How to execute cmd command

    #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 });
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.