如何从 Cake 构建任务将标签推送到 Bamboo 中的 Bitbucket Git 存储库?
How to push Tag to Bitbucket Git Repository in Bamboo from Cake build task?
我正在使用下一个代码将标签推送到 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);
}
});
陷入下一个问题:因为我们的bamboo配置为使用SSH协议,而Cake.Git(LibGit2Sharp)目前不支持接收下一个错误
Error: unsupported URL protocol
谢谢
我怀疑问题是由于使用了默认启用的浅层克隆。
浅克隆允许 Bamboo 执行克隆,即将历史截断为指定数量的修订。
这应该会提高初始代码检出的速度,但是如果您的构建依赖于完整的存储库历史记录,我们建议您不要使用此选项。
GIT 操作通常需要完整的 repo 才能可靠地工作。
有点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 上的问题),作为通过 cmd git push
调用 git push
的解决方法23=]如何执行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 });
}
}
我正在使用下一个代码将标签推送到 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);
}
});
陷入下一个问题:因为我们的bamboo配置为使用SSH协议,而Cake.Git(LibGit2Sharp)目前不支持接收下一个错误
Error: unsupported URL protocol
谢谢
我怀疑问题是由于使用了默认启用的浅层克隆。
浅克隆允许 Bamboo 执行克隆,即将历史截断为指定数量的修订。 这应该会提高初始代码检出的速度,但是如果您的构建依赖于完整的存储库历史记录,我们建议您不要使用此选项。
GIT 操作通常需要完整的 repo 才能可靠地工作。
有点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 上的问题),作为通过 cmd git push
调用 git push
的解决方法23=]如何执行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 });
}
}