gitlab-ci.yml: синтаксическая ошибка рядом с неожиданным токеном `fi ' - PullRequest
1 голос
/ 01 июля 2019

Я использую Auto Build в своем проекте Gitlab.Для этого я использую файл gitlab-ci.yml с многострочными блоками YAML, содержащими команды оболочки, код выглядит следующим образом:

if [ "${GITLAB_USER_LOGIN}" != "nadirabbas" ]
    then
        echo "Building"
        if [ ! -d "dist" ]; then mkdir dist; fi
        if [ ! -f "dist/index.html" ]; then touch dist/index.html; fi
fi

Я пробовал много решений, таких как добавление ; после оператора ifКроме того, после ключевого слова fi, но, похоже, ничего не работает, мой журнал заданий возвращает следующую синтаксическую ошибку:

syntax error near unexpected token `fi'

Я пробовал много гуглить, но другие решения, похоже, не работают.Мой бегун использует оболочку bash.Пожалуйста, может кто-нибудь сказать мне, что я здесь делаю не так?

Ответы [ 2 ]

1 голос
/ 01 июля 2019

Как я отмечал в комментариях, самый простой подход, вероятно, состоит в том, чтобы иметь скрипт в своем собственном файле (убедитесь, что он исполняемый!), А затем просто вызвать его из gitlab ci.

Например, вы можете получить файл build.sh:

#!/bin/bash
if [ "${GITLAB_USER_LOGIN}" != "nadirabbas" ]
    then
        echo "Building"
        if [ ! -d "dist" ]; then mkdir dist; fi
        if [ ! -f "dist/index.html" ]; then touch dist/index.html; fi
fi

, а затем вызвать его из yml:

some_task:
  image: ubuntu:18.04
  script:
  - ./build.sh
0 голосов
/ 01 июля 2019

Проблема в том, что gitlab-ci.yml на самом деле не допускает многострочные сценарии (что больше ограничивает YAML, чем gitlab).

Так что, если вы не хотите использовать скрипт (как предложено @Mureinik), вы можете свернуть все в одну строку:

  script:
  - if [ "${GITLAB_USER_LOGIN}" != "nadirabbas" ]; then echo "Building"; mkdir -p dist; touch -a dist/index.html; fi

(я также удалил внутренние if -условия; поскольку вы можете использовать флаги для mkdir и touch, чтобы получить примерно такое же поведение)

...