0

我更喜欢在 Repo[dev|test|prod] -> Artifact Name -> Releases Artifacts go here -> Pre-Releases 进入子文件夹的层次结构中组织 Artifactory 中的工件。

为什么?因此,当我浏览 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 文件规范将包上传到我的存储库:

** 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 Tags 以及 Azure DevOps。

所以问题是:自定义条件需要什么才能使其正常工作?

4

1 回答 1

1

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

如何创建这些可以在这里找到:https ://docs.microsoft.com/en-us/azure/devops/pipelines/process/expressions?view=azure-devops

这是它的样子:

在此处输入图像描述

对于预发布:

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

这就是说必须满足所有 3 个条件:

  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'))

这就是说必须满足所有 3 个条件:

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

这是它的样子:

在此处输入图像描述

于 2019-02-07T17:04:37.840 回答