#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
, если вы объединяете их в одну логическую строку с;
разделением между ними.