首页 > 解决方案 > 将变量构建参数传递给 docker build 命令

问题描述

这是码头工人阶段:

  - template: ../docker-template.yml
    parameters:
      buildArgs:
        - name: Arg1
          value: $(arg1-value)
        - name: Arg2
          value: $(arg2-value)

码头工人模板.yml

parameters:
  buildArgs: []
stages:
  - stage: Docker
    displayName: Docker Stage
    jobs:
    - job: Docker

      steps:
      # - ${{ each arg in parameters.buildArgs }}:
      #   - bash: |
      #       buildArgString+=' --build-arg ${{arg.name}}=${{arg.value}}'
      #     displayName: "Getting Params"

      - bash: |
          ${{ each arg in parameters.buildArgs }}:
            buildArgString+=' --build-arg ${{arg.name}}=${{arg.value}}'
          echo 'buildstring=$buildArgString'
        displayName: 'build string'

      - bash: |
          cd $(sourceDirectory)
          docker build \
              -t $(registryName)/$(imageName):$(imageTag) \
              $buildArgString \
              .
        failOnStderr: true
        displayName: 'docker build'

这里我想根据传递的参数构造buildArgString,并把它传递给docker build命令,如图所示。当我使用它时,我得到了错误

The directive 'each' is not allowed in this context. Directives are not supported for expressions that are embedded within a string. Directives are only supported when the entire value is an expression.

有什么建议么?

标签: bashazure-pipelines

解决方案


如消息所述,您each在错误的地方使用。尝试使用以下脚本示例:

天蓝色管道.yml

extends:
  template: docker-template.yml
  parameters:
    buildArgs:  
      Arg1 : $(arg1-value)
      Arg2 : $(arg2-value)

码头模板.yml

parameters:
- name: buildArgs 
  type: object
  default: [] 
stages:
  - stage: Docker
    displayName: Docker Stage
    jobs:
    - job: Docker
      steps:
      - ${{ each arg in parameters.buildArgs }}:
        - bash: |
            echo ${{ arg.key }}
            echo ${{ arg.value }}
            echo "##vso[task.setvariable variable=buildArgStringOther]--build-arg ${{ arg.key }}=${{ arg.value }}"
          displayName: ${{ arg.key }}
        - bash: |
            echo "buildstring=$(buildArgStringOther)"
          displayName: ECHO-${{ arg.key }}

在此处输入图像描述


推荐阅读