“/bin/bash : — : Недопустимый параметр» с помощью gitlab-CI и makefile с помощью .ONESHELL

#bash #makefile #gitlab-ci

# #баш #makefile создать файл #gitlab-ci

Вопрос:

У меня есть CI, который работает с gitlab-CI.

Мой сценарий конвейера (YAML gitlab-CI) вызывает makefile.

 Build:
  stage: ThisIsAnExample
  script: 
    - export OPTION1=true; make -C build/ myTarget
 

В моем makefile у меня есть опция .ONESHELL со следующими параметрами:

 .ONESHELL:
SHELL = /bin/bash
.SHELLFLAGS = -ec -o pipefail

myTarget:
    @echo "A";echo ""; print "Bn";  echo "C";  echo "";
 

Это работает в локальном, но завершается ошибкой в CI с ошибкой /bin/bash: - : invalid option

Если я удалю -o pipefail , ошибка будет исправлена в CI (но у меня больше нет pipefail’а).

Есть какие-либо подсказки, чтобы заставить его работать в CI?

Примечания:

  • версия bash для локальной консоли: GNU bash, version 4.4.20(1)-release (x86_64-pc-linux-gnu)
  • версия bash для сервера ci: GNU bash, version 4.2.46(2)-release (x86_64-redhat-linux-gnu)

Комментарии:

1. Ничего из этого не требуется .ONESHELL . -ec Выглядит действительно странно; вероятно, удалите c ?

2. Вы действительно уверены, что ваш Makefile работает в local? Или это только рецепт, когда вы вводите его в CLI?

3. Я запускаю те же команды в local, которые написаны в скрипте gitlab-ci

4. @tripleee очевидно, что это не подлинный скрипт makefile

5. Я вижу, как он уменьшается по форме; но даже если команды более сложные, вам не нужно .ONESHELL , если вы объединяете их в одну логическую строку с ; разделением между ними.