【问题标题】:How do I upload Artifacts depending on Release or Prerelease to Artifactory using GitVersion on Azure DevOps?如何使用 Azure DevOps 上的 GitVersion 将取决于发布或预发布的工件上传到 Artifactory?
【发布时间】:2019-02-08 04:31:57
【问题描述】:

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

为什么?因此,当我浏览 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。

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

【问题讨论】:

    标签: azure azure-devops artifactory devops gitversion


    【解决方案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”

    这是它的样子:

    【讨论】:

      猜你喜欢
      • 2021-03-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多