如何在Azure DevOps上使用GitVersion将取决于发行版或预发行版的工件上传到Artifactory?

时间:2019-02-07 17:04:38

标签: azure azure-devops artifactory devops gitversion

我更喜欢在Repo [dev | test | prod]的层次结构中将我的工件组织起来->工件名称->发布工件到这里->预发布进入子文件夹。

为什么?因此,当我在Artifactory Repository Browser中导航时,我没有一棵过长的树。我可以扩展存储库,并按工件名称查看第一级,但仍然看不到任何工件,然后扩展工件名称叶,然后查看我发布的工件。但是,下面的第一项将是一个名为“ prerelease”的子目录文件夹。这样做是为了使我可以轻松地手动删除所有预发行版本(如果希望执行一项操作),或计划清理它们。

[My Repo]
|
+-\prerelease\
|   |--artifact-1.2.3-ci0004.nupkg
|   |--artifact-1.0.1-ci0002.nupkg
|--artifact-1.0.0.nupkg
|--artifact-1.0.1.nupkg

我知道如何使用Artifactory filespec将软件包上传到我的存储库:

** For Pre-Release
{
  "files": [
    {
      "pattern": "$(build.artifactstagingdirectory)\*.nupkg",
      "target": "myrepo-nuget-dev-local/$(PackageName)/prerelease/"
    }
  ]
}

** For Release
{
  "files": [
    {
      "pattern": "$(build.artifactstagingdirectory)\*.nupkg",
      "target": "myrepo-nuget-dev-local/$(PackageName)/"
    }
  ]
}

我需要做的是将每个文件规范放到其自己的构建步骤中,然后添加条件,这些条件将在一个构建步骤或另一个构建步骤中执行,但不要同时执行。为什么?因为构建工件将是预发布工件,也可能是发布工件,但永远不会都是。我正在使用GitVersion和Git标记以及Azure DevOps。

所以问题是:“自定义条件”需要什么才能生效?

1 个答案:

答案 0 :(得分:1)

此逻辑适用于任何CI系统,但此语法适用于Azure DevOps。

如何创建这些文件:https://docs.microsoft.com/en-us/azure/devops/pipelines/process/expressions?view=azure-devops

这是它的样子:

enter image description here

用于预发布:

and(succeeded(), not(startsWith(variables['GitVersion.BranchName'], 'tags/')), or(ne(variables['GitVersion.PreReleaseLabel'], ''),ne(variables['GitVersion.BuildMetaData'], '')))

这是必须满足所有三个条件:

  1. 如果成功
  2. GitVersion.BranchName不能以'tags /'开头(这可以确保此构建事件不是由标签触发的),并且
  3. GitVersion.PreReleaseLabel不为空或GitVersion.BuildMetaData不为空

要发布:

and(succeeded(), or(and(eq(variables['GitVersion.PreReleaseLabel'], ''), eq(variables['GitVersion.BuildMetaData'], ''), eq(variables['GitVersion.BranchName'], 'master')), startsWith(variables['GitVersion.BranchName'], 'tags/')), ne(variables['Build.Reason'], 'PullRequest'))

这是必须满足所有三个条件:

  1. 如果成功
  2. (GitVersion.PreReleaseLabel为空且GitVersion.BuildMetaData为空且GitVersion.BranchName为'master')或(GitVersion.BranchName以'tags /'开头)
  3. Build.Reason不是“ PullRequest”

这是它的样子:

enter image description here