在 Azure 管道中设置 conda 元数据的内部版本号

Posted

技术标签:

【中文标题】在 Azure 管道中设置 conda 元数据的内部版本号【英文标题】:Set build number for conda metadata inside Azure pipeline 【发布时间】:2020-12-07 16:31:01 【问题描述】:

我正在使用 bash 脚本在 azure 管道 conda build . --output-folder $(Build.ArtifactStagingDirectory) 中构建 conda pakage 问题是,Conda build 使用 meta.yml 文件中的内部版本号 (see here)。

我能想到的解决方案是,首先,将所有文件复制到Build.ArtifactStagingDirectory,并将Azure管道的Build.BuildNumber添加到meta.yml中,并将包构建到Build.ArtifactStagingDirectory(在子文件夹中)

我试图通过编写 shell 脚本来操作 Azure 管道中的 yaml 文件来避免这样做,因为它可能容易出错。有人知道更好的方法吗?很高兴在答案或 cmets 中阅读更优雅的解决方案。

【问题讨论】:

为什么要以编程方式更改内部版本号?当您更改配方内容时,内部版本号会增加,例如meta.yaml 中的要求或build.sh 中的命令。我不明白您为什么希望 conda 包内部版本号与 Azure 管道内部版本号匹配。 【参考方案1】:

我对 Azure 管道了解不多。但一般来说,如果你想在不改变meta.yaml的内容的情况下控制内部版本号,你可以在meta.yaml中使用jinja模板变量。

选择一个变量名,例如CUSTOM_BUILD_NUMBER 并在 meta.yaml 中使用它:

package:
  name: foo
  version: 0.1

build:
  number:  CUSTOM_BUILD_NUMBER 

要定义该变量,您有两种选择:

使用环境变量:

export CUSTOM_BUILD_NUMBER=123
conda build foo-recipe

conda_build_config.yaml(docs)中定义变量,如下

echo "CUSTOM_BUILD_NUMBER:" >> foo-recipe/conda_build_config.yaml
echo " - 123"               >> foo-recipe/conda_build_config.yaml   

conda build foo-recipe

如果需要,您可以添加 if 语句,这样即使未定义 CUSTOM_BUILD_NUMBER(使用默认内部版本号),配方仍然有效。

package:
  name: foo
  version: 0.1

build:
  % if CUSTOM_BUILD_NUMBER is defined %
    number:  CUSTOM_BUILD_NUMBER 
  % else %
    number: 0
  % endif %

【讨论】:

以上是关于在 Azure 管道中设置 conda 元数据的内部版本号的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Azure devops 中设置构建管道 [关闭]

如何在 Azure DevOps yaml 管道中设置 ENVIRONMENT 状态

Azure DevOps - 使用参数在 yaml 管道定义中设置路径触发器

Azure Pipelines:在 Powershell 中设置和访问变量

Azure DevOps 在构建任务中设置内部版本号变量

无法在 Azure DevOps 管道中激活 conda