【问题标题】:Cannot correctly substitute multiline Docker tags variable in Azure DevOps Pipelines无法正确替换 Azure DevOps Pipelines 中的多行 Docker 标记变量
【发布时间】:2022-02-16 23:08:48
【问题描述】:

我正在采用Docker-semver compliant 构建模型。

我需要为每个图像构建几个标签,尊重带有可替换标签的 semver 模型。

我使用 Azure DevOps 进行构建。

我创建了一个 Node 脚本,为简洁起见不共享,特别是因为它有效,根据package.json 中的项目版本计算所有标签并将它们写入文件。

我需要将计算的标签传递给 Docker 任务,但我遇到了麻烦。以下涉及为请求的标签设置multiline pipeline variable,并在Docker任务中使用它

      - task: CmdLine@2
        displayName: Import version into pipeline variable
        inputs:
          script: echo "##vso[task.setvariable variable=dockerTags;isOutput=true]$(cat dist/docker.tags | sed ':a;N;$!ba;s/\n/%0D%0A/g')"


      - task: Docker@2
        displayName: Docker build
        inputs:
          command: build
          repository: $(containerRepositoryName)
          tags: $(dockerTags)

运行管道时,变量$(dockerTags)没有被正确替换

invalid argument "***/amlc/aml-controlli-fe:$(dockerTags)" for "-t, --tag" flag: invalid reference format

我的 setvariable 任务有什么问题?我将该代码运行到 Docker 容器中,以确保发生替换

/app # echo "##vso[task.setvariable variable=dockerTags;isOutput=true]$(cat dist/docker.tags | sed ':a;N;$!ba;s/\n/%0D%0A/g')"
##vso[task.setvariable variable=dockerTags;isOutput=true]0.1.0-RELEASE%0D%0A0.1-RELEASE%0D%0A0-RELEASE%0D%0Alatest-RELEASE

但显然代理会抑制输出

有什么想法吗?

【问题讨论】:

  • 您解决了吗?我有同样的问题
  • 我开始使用插件。我的解决方案现在完全不同了

标签: azure-pipelines


【解决方案1】:

我可以通过如下设置变量来解决这个问题:

  variables:
    imageTags: |
      latest
      $(Build.BuildId)
      any_other_tags

然后像这样在 docker 步骤中使用它:

      - task: Docker@2
        displayName: Build image ${{imageName}}
        inputs:
          command: build
          ...
          tags: $(imageTags)

【讨论】:

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