OpenShift BuildConfig Docker 策略 spec.output.to.name 使用环境变量进行标记

OpenShift BuildConfig Docker strategy spec.output.to.name using environment variable for tagging

我定义了以下 OpenShift BuildConfig:

<snip>
    output:
      to:
        kind: DockerImage
        name: myregistry.com/myapp:${TAG}
    strategy:
      type: Docker
      dockerStrategy:
        from:
          kind: ImageStreamTag
          name: nodejs-12:latest
          namespace: myproject
        env:
          - name: TAG
            value: latest

我希望 TAG 是一个版本号,它由来自应用程序 package.json 的版本和 Jenkins #build 号组成。所以我计划使用 -e 选项在 OpenShift start-build 命令行中传递这个 env 值。但是,在应用 BuildConfig 定义时,它会抱怨 name is not a valid Docker pull specification: invalid reference format。如何使用变量指定图像标签字符串值?感谢任何建议和见解。

遗憾的是,使用单个 BuildConfig 是不可能的。 output 部分在对象创建期间进行评估,您的构建容器环境稍后无法设置该标签。

您可能想改用 Template,为您需要构建的搜索标签创建 BuildConfigs

或者,假设 OpenShift 4+,您可以查看 TektonPipeline 对象允许通用构建定义 - 尽管仍然需要为每个图像标签创建 PipelineResources,以及 git 源引用。