标签: gitversion

带有版本的 dotnet build 在 docker 中不起作用

我正在尝试使用 Docker 构建我的 .net 核心应用程序。我想在 build 期间覆盖我的应用程序版本。在运行时稍后的某个地方显示它。

我的 Docker 文件如下所示:

FROM microsoft/dotnet:2.2-sdk AS build-env
WORKDIR /src

RUN apt-get update && \
    apt-get install -y libgit2-dev && \
    ln -s /usr/lib/x86_64-linux-gnu/libgit2.so /lib/x86_64-linux-gnu/libgit2-15e1193.so

COPY ..

WORKDIR /src/API

RUN dotnet restore

RUN dotnet tool install -g GitVersion.Tool --version=5.0.0-beta1-72

RUN export PATH="$PATH:/root/.dotnet/tools" && \
    version="$(dotnet gitversion /output json /showvariable NuGetVersion)" && \
    dotnet build --no-restore /property:Version=$version  && \
    dotnet publish --output "/app" --no-build

FROM microsoft/dotnet:2.2-aspnetcore-runtime
WORKDIR /app
COPY --from=build-env /app .
ENTRYPOINT …
Run Code Online (Sandbox Code Playgroud)

.net docker .net-core dockerfile gitversion

6
推荐指数
1
解决办法
1501
查看次数

GitVersion 配置不递增

我正在尝试设置GitVersion来处理我们项目的语义版本控制 (GitFlow),但它并没有像我预期的那样自动递增。我也在努力阅读项目的文档,这不是最容易理解的。

基本上我们希望建立一个具有 Major.Minor.Patch 约定的版本控制系统,我们手动增加 Major,当一个 release 分支合并到 master 时自动增加 Minor,当一个 feature 分支合并到 develop 时自动增加 P​​atch。

这是我的当前 GitVersion.yml

mode: ContinuousDeployment
branches:
  feature:
    increment: Patch
    regex: feature?[/-]
  release:
    increment: Minor
    regex: release?[/-]
  develop:
    regex: develop$
  master:
    regex: master$
ignore:
  sha: []
Run Code Online (Sandbox Code Playgroud)

同样为了测试它,我写了一个小的 ruby​​ 脚本来加速这个乏味的过程。我包含它只是为了确保我以预期的方式使用 GitVersion 和 GitFlow。

require "git"

def new_feature_branch i
  g = Git.open(Dir.pwd)

  branch_name = "feature/number-#{i}"
  g.checkout("develop")
  g.branch(branch_name).checkout

  open('README.md', 'a') do |f|
    f.puts "\r#{i}"
  end

  g.add("README.md")
  g.commit("##{i}")

  g.branch("develop").checkout
  g.merge(branch_name)
  g.branch(branch_name).delete

  print(`gitversion`)
end


new_feature_branch(ARGV[0])
Run Code Online (Sandbox Code Playgroud)

输出 gitversion

{
  "Major":1, …
Run Code Online (Sandbox Code Playgroud)

git git-flow semantic-versioning gitversion

6
推荐指数
1
解决办法
2429
查看次数

无法在本地或远程找到“开发”或“主”分支。- 语义gitversion

我在 azure 中有一个存储库,它有默认分支“main”。

另外,我在 yml 文件中有一项用于语义版本控制的任务。

- task: gittools.gitversion.gitversion-task.GitVersion@5
  displayName: Get Semantic Git Version 
Run Code Online (Sandbox Code Playgroud)

我遇到了以下错误

找不到分支个人/release1 的分支配置,回退到默认配置 System.InvalidOperationException:无法找到“开发”或“主”分支,无论是本地还是远程。

所以,我刚刚创建了一个开发分支并触发了构建,然后语义版本就成功了。

我们不想按照指导方针维护开发或主分支。

在不维护master和develop分支的情况下如何克服错误呢?

谢谢

纳雷什·埃德

semantic-versioning gitversion azure-devops azure-pipelines

6
推荐指数
1
解决办法
6609
查看次数

Azure DevOps 管道任务 `task: gitversion/execute@0` 失败,并出现意外错误“##[error]SyntaxError: Unexpected end of JSON input”

我正在运行管道,执行一个简单的任务来安装 git 并通过以下命令检查版本tasks

一切都运行良好,直到我使用相同的 yaml 文件创建另一个临时管道以进行一些额外的测试和开发。

我没有对 yaml 文件进行任何更改,该文件仍然以绿色运行,具有相同的任务。

但是新管道中的执行任务失败并出现“意外”错误

  steps:
    - task: gitversion/setup@0
      displayName: Install GitVersion
      inputs:
        versionSpec: "5.10.x"
    
    - task: gitversion/execute@0
      displayName: Determine Version
      inputs:
        useConfigFile: true
        configFilePath: ./gitversion.yml
Run Code Online (Sandbox Code Playgroud)

输出如下所示:


Command: dotnet-gitversion /agent/_work/26/s /output json /output buildserver /config /agent/_work/26/s/gitversion.yml
/opt/hostedtoolcache/GitVersion.Tool/5.10.3/x64/dotnet-gitversion /agent/_work/26/s /output json /output buildserver /config /agent/_work/26/s/gitversion.yml
  ERROR [09/20/22 12:54:22:24] An unexpected error occurred:
System.NullReferenceException: Object reference not set to an instance of an object.
   at LibGit2Sharp.Core.Handles.ObjectHandle.op_Implicit(ObjectHandle handle) in /_/LibGit2Sharp/Core/Handles/Objects.cs:line 509
   at LibGit2Sharp.Core.Proxy.git_commit_author(ObjectHandle obj) in /_/LibGit2Sharp/Core/Proxy.cs:line …
Run Code Online (Sandbox Code Playgroud)

pipeline gitversion azure-devops azure-yaml-pipelines

6
推荐指数
1
解决办法
8891
查看次数

Teamcity - 为代理端结帐执行 Git Fetch

我正在尝试git fetch从我的构建代理执行完整操作,以便在 TeamCity 中使用GitVersion

根据http://gitversion.readthedocs.io/en/latest/build-server-support/build-server/teamcity/#agent-checkout,我选择在 TeamCity 中使用代理结帐选项

但是,当我对代理执行结帐时,我无法获取分支的完整 git 历史记录。我得到了与此相同的结果:https : //github.com/GitTools/GitVersion/issues/912 - 具体来说:

System.InvalidOperationException: 无法在本地或远程找到“开发”或“主”分支。

我的猜测是这是因为 TeamCity 只检查了回购历史的一个子集。

Github 问题有一个git fetch在每次构建开始时执行命令的解决方法。这是 TeamCity 可以作为 VCS 根的一部分本身支持的东西吗?

提前致谢

teamcity gitversion

5
推荐指数
1
解决办法
1710
查看次数

如何使用 Azure Devops 和 Cake Build 在构建时自动标记和版本?

我正在使用 Cake 脚本通过持续集成在 Azure DevOps 中构建我的软件。要求是当我们提交/合并到 dev 或 master 分支时,适当的构建管道被启动。作为此构建的一部分,我们需要自动标记和版本我们的软件。我的蛋糕脚本中已经有以下代码可以使用 GitVersion 将语义版本控制添加到我的构建中:

Task("Version")
    .Does(() => 
    {
        Information("Versioning software for configuration {0} of {1}...", configuration, solution);
        GitVersion(new GitVersionSettings {
            UpdateAssemblyInfo = true,
            OutputType = GitVersionOutput.BuildServer,
            WorkingDirectory = toolsDirectory
        });
        GitVersion versionInfo = GitVersion(new GitVersionSettings{ OutputType = GitVersionOutput.Json });

        Information("Semantic Version: " + versionInfo.AssemblySemVer);
        Information("Full Semantic Version: " + versionInfo.AssemblySemFileVer);
        Information("Informational Version: " + versionInfo.InformationalVersion);
    });
Run Code Online (Sandbox Code Playgroud)

我希望团队负责人或权威人士在此代码与分支合并之前增加主要和次要构建版本。或者我希望管道自动对软件和我们在构建管道末尾创建的最终 zip 工件进行版本控制。

所以这里是我的问题:

  1. 如何自动增加我的版本号和标签?
  2. 我应该避免自动递增吗?
  3. 如何在 Azure DevOps 构建过程中将版本号添加到我的工件名称中?
  4. 我需要在我的 git 版本代码中更改什么才能使用标签?
  5. 如何添加后缀以使版本控制和标记更像“git flow”(例如“预发布”等)?

这有点宽泛,但我正在努力寻找在 …

git git-tag gitversion cakebuild azure-devops

5
推荐指数
1
解决办法
1900
查看次数

如何使用gitversion修复bug后自动增加补丁版本

概括

我正在建立一个新项目,并想使用 GitVersion 来计算我的应用程序的当前版本。我需要的是使用 MAJOR.MINOR.PATCH 进行语义版本控制,其中 MAJOR 和 MINOR 随着发布分支名称的增加而增加,而 PATCH 在每个错误修复或修补程序合并时都会增加。

目前我正在尝试将 GitFlow 实施到我的分支策略中,但我会向您解释我正在做的事情。

  1. 所有开发都在开发分支上完成(创建一个feature/*分支并合并回开发分支)。
  2. 当我想创建一个版本时,我从开发创建一个releases/[version]分支
  3. 当我在发行版中发现错误时,我会创建一个bugfix/*分支,并在完成后将其合并回release/[version]
  4. 当没有发现更多错误时,releases/[version]将合并到 master 中并用正确的版本标记。

问题出在步骤 3 中。例如,当我使用releases/0.1.0时,GitVersion 在bugfix/*合并后不会增加 PATCH 版本。它只是停留在 0.1.0 而不是想要的 0.1.1。它确实增加了提交计数!

迄今为止采取的步骤

目前我正在使用以下 gitversion.yml 文件(请参阅下一个标题)。其中包括一个应该增加补丁的修补程序分支。由于某种原因,在我创建bugfix/*分支后,当您在 bugfix 分支上运行 GitVersion 时,它不会增加 PATCH,所以我认为我在这里遗漏了一些东西。

唯一有效的方法是在bugfix/*分支的最后一次提交上设置一个标签到新版本(0.1.1-test)。但由于 GitVersion 在 bugfix 分支上计算版本 0.1.0,我无法自动升级 PATCH 并在提交上添加所需的 0.1.1-test 标签。

我还认为,当您合并回发布分支时,GitVersion 会增加版本。但即使我将增量设置为“补丁”,这种情况也不会发生。所以在这里,我也想我错过了一些东西,或者我只是想要 GitVersion 不适合的东西。

gitversion.yml

assembly-versioning-scheme: MajorMinorPatch
mode: ContinuousDeployment
branches:
  develop: …
Run Code Online (Sandbox Code Playgroud)

versioning git git-flow gitversion

5
推荐指数
1
解决办法
3193
查看次数

使用 GitVersion 进行 AssemblyInfo.cs 更新

根据文档,当使用参数调用dotnet gitversion/updateassemblyinfo时,它将递归搜索git 存储库中的所有AssemblyInfo.cs文件并更新它们。它将更新以下程序集属性:

  • AssemblyVersion将设置为该AssemblySemVer变量。
  • AssemblyFileVersion将设置为MajorMinorPatch带有附加 .0 的变量。
  • AssemblyInformationalVersion将设置为该InformationalVersion变量。

根据dotnet gitversion不带任何参数调用的输出(从整个 JSON 复制),这些变量当前具有以下值:

  • AssemblySem版本:1.2.0.0
  • 主要次要补丁:1.2.0
  • 信息版本:1.2.0-branch-name.1+104.Branch.branch-name.Sha.f00e3376da35703ab5e5527e44e942e7bd98s098

问题:是否可以在预定义的GitVersion.yml中或以某种方式通过参数“即时”更改这些变量的值dotnet gitversion

原因是我当前的项目历史上不遵循 semver 方案,并且每次都需要将版本四重奏的第三部分设置为特定值,无论分支、标签或任何其他 git 特定信息如何。例如,我们的产品版本类似于v1.2.50.10v02.04.30.01

但是,即使我们不会充分发挥 semver 兼容版本控制的潜力,使用内置功能dotnet gitversion来更新AssemblyInfo.cs文件也会很好。

.net c# continuous-integration assemblyinfo gitversion

5
推荐指数
1
解决办法
2655
查看次数

尝试了解 GitVersion.yml 中的“next-version”属性如何工作

我对财产的运作方式感到困惑next-version。我阅读了官方文档,它只有两行“仅服务器作为基础版本”。我认为它会碰撞到我在下一次提交时设置的版本。但显然它不是那样工作的。看起来像是将当前版本号与 中的版本号相加next-version,但事实并非如此。希望有人能进一步解释一下。谢谢。

gitversion

5
推荐指数
1
解决办法
3611
查看次数

Jenkinsfile:如何捕获 docker.Image.run() 的标准输出?

我想使用 Jenkinsdocker.Image.run()来运行GitVersion

bashshell 中,如果我运行

docker run --rm -v "$(pwd):/repo" gittools/gitversion:5.6.6 /repo
Run Code Online (Sandbox Code Playgroud)

...JSON 格式的字符串被发送到 stdout。

我希望我的 Jenkinsfile 能够使用这个标准输出。
我知道我可以从 Jenkinsfile 运行这个 docker 容器,如下所示:

pipeline {
  agent any
  stages {
    stage("1") {
      steps {
        script {
          def img = docker.image("gittools/gitversion:5.6.6")
          img.run('-v "$(pwd):/repo"', '/repo')
        }
      }
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

如何使用捕获运行容器的标准输出docker.Image.run()

我知道我可以通过调用捕获容器的标准输出sh,例如

def my_stdout = sh(script: 'docker run --rm -v "$(pwd):/repo" gittools/gitversion:5.6.6 /repo`,
                   returnStdout:true)
Run Code Online (Sandbox Code Playgroud)

...但是我想具体学习一下,如果可能的话/如何从 Jenkins' 捕获标准输出docker.Image.run(),如所述${JENKINS_URL}/job/${job}/pipeline-syntax/globals#docker

stdout jenkins docker gitversion jenkins-declarative-pipeline

5
推荐指数
0
解决办法
859
查看次数