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

Set build number for conda metadata inside Azure pipeline

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

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

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

我对 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 %}