我更喜欢在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。
所以问题是:“自定义条件”需要什么才能生效?
答案 0 :(得分: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'], '')))
这是必须满足所有三个条件:
要发布:
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'))
这是必须满足所有三个条件:
这是它的样子: