Передайте переменные build args команде docker build - PullRequest
1 голос
/ 06 апреля 2020

Вот этап docker:

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

docker -template.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 построить команду, как показано. Когда я использую это, я получаю ошибку

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.

Есть предложения?

1 Ответ

0 голосов
/ 07 апреля 2020

Как уже упоминалось в сообщении, вы используете each в неправильном месте. Попробуйте следующий пример сценария:

azure -pipelines.yml :

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

docker -template.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 }}

enter image description here

...