Как объединить команды в задание Concourse?

У меня есть задание Concourse, которое вытягивает репо в образ докера, а затем выполняет на нем команду, теперь мне нужно выполнить скрипт, который формируется из образа докера, и после его выполнения выполнить команду внутри репо, примерно так:

run:
  dir: my-repo-resource
  path: /get-git-context.sh && ./gradlew
  args:
    - build

get-git-context.sh - это скрипт из моего образа докера, а .gradlew - стандартный gradlew внутри моего репо с параметром build, при таком подходе я получаю следующую ошибку:

./gradlew: no such file or directory

Это означает, что задание cd'd в / при выполнении первой команды, выполнение только одной команды работает нормально. Я также пробовал добавить две секции запуска:

run:
  path: /get-git-context.sh
run:
  dir: my-repo-resource
  path: ./gradlew
  args:
  - build

Но выполняется только вторая часть, как правильно объединить эти две команды?


person Ivan Ochoa Hidalgo    schedule 30.04.2020    source источник


Ответы (1)


Обычно мы решаем эту проблему, упаковывая логику в сценарий оболочки и устанавливая путь: / bin / bash с соответствующими аргументами (путь к сценарию).

run:
  path: /bin/sh
  args:
    - my-repo_resource/some-ci-folder/build_script.sh

Другой вариант - определить две задачи и передать ресурсы через рабочую область задания, но обычно мы делаем больше шагов, чем два, и это приведет к сложным конвейерам:

plan:
  - task: task1
    config:
    ...
      outputs:
        - name: taskOutput
      run:
        path: /get-git-context.sh

  - task: task2
    config:
      inputs:
   ## directory defined in task1
        - name: taskOutput 
      run:
        path: ./gradlew
        args:
         - build
person briadeus    schedule 04.12.2020