Bash скрипт общего запуска GitLab - PullRequest
0 голосов
/ 08 февраля 2020

Я пытаюсь использовать общий бегун для запуска сценария, который обрабатывает переменные env, необходимые для развертывания. Сбой моего конфига YAML, который не работает:

release:
  stage: release
  image: docker:latest
  only:
    - master
  services:
    - docker:dind
  variables:
    DOCKER_DRIVER: overlay
  before_script:
    - docker version
    - docker info
    - docker login -u ${CI_REGISTRY_USER} -p ${CI_BUILD_TOKEN} ${CI_REGISTRY}
  script:
    - dckstart=$(cat dockerfile-start)
    - export > custom_vars
    - chmod +x scripts/format-variables.sh
    - bash scripts/format-variables.sh
    - dckenv=$(cat custom_vars)
    - dckfin=$(cat dockerfile-finish)
    - echo -e "$dckstart\n$dckenv\n$dckfin" >> Dockerfile
    - rm dockerfile-start dockerfile-finish custom_vars
    - docker build -t ${CI_REGISTRY}/${CI_PROJECT_PATH}:latest --pull .
    - docker push ${CI_REGISTRY}/${CI_PROJECT_PATH}:latest
  after_script:
    - docker logout ${CI_REGISTRY}

Этот шаг завершается неудачно и выдает ошибку:

$ chmod + x scripts / format-variable. sh
$ bash scripts / format-variable. sh
/ bin / sh: eval: строка 101: bash: не найдено

Я попытался:

  • /bin/bash scripts/format-variables.sh

    / bin / sh: eval: строка 114: / bin / bash: не найдено

  • cd scripts && ./format-variables.sh

    / bin / sh: eval: строка 116: ./format-variables.sh: не найдено

  • --shell /bin/bash scripts/format-variables.sh

    / bin / sh: eval: строка 114: --shell: не найдено

Последней попыткой была идея, которую я схватил с документы . Я не указал, какие общие бегуны использовать, но я предполагаю, что используется UNIX на основе всех остальных команд UNIX.

Возможно ли это сделать через общего бегуна или мне нужно чтобы получить выделенного для этого бегуна?

ПРИМЕЧАНИЕ : Я должен использовать Bash для этого сценария, а не Shell из-за использования массивов. Если бы я использовал Shell, я бы обнаружил ошибку, упомянутую здесь

Ответы [ 2 ]

1 голос
/ 12 февраля 2020

Изображение docker:latest не содержит bash для экономии места. Вы можете установить его (см. Как использовать bash с docker изображением Alpine на основе? ) или использовать другой базовый образ (например, CentOS или Ubuntu).

0 голосов
/ 08 февраля 2020

Используйте образ, на котором установлено bash, например CentOS или Ubuntu.

...