adelkhalitov
@adelkhalitov
>

Что значат скрипты gitlab-ci?

Читаю чужие ранеры и не могу понять что они значат, прошу помочь расшифровать.

Что значит | , cut -d'/' -f2?
- export SUBDOMAIN=$(echo $CI_COMMIT_REF_NAME | cut -d'/' -f2)


Что значит fi;?
export LINK=$(if [ $CI_JOB_NAME = "Run with DB" ]; then echo $SUBDOMAIN; else echo "master"; fi)
  • Вопрос задан
  • 341 просмотр
Решения вопроса 1
Пригласить эксперта
Ответы на вопрос 1
Oxyd
@Oxyd
Linux enthusiast
Давайте я расставлю пробелов, что-б было нагляднее...
export SUBDOMAIN=$(echo $CI_COMMIT_REF_NAME  |  cut -d'/' -f2)

export SUBDOMAIN -- делаем переменную SUBDOMAIN "глобальной", то-есть она сохранится даже после завершения работы скрипта(но только до завершения сеанса командной оболочки).
Всё что находится между $( ), это ммм... литерал, полученный в результате последовательной обработки значения переменной $CI_COMMIT_REF_NAME
Вкратце --
echo $CI_COMMIT_REF_NAME | cut -d'/' -f2
утилита есho просто печатает на экран значение переменной $CI_COMMIT_REF_NAME . Оператором | мы заставляем её не печатать на экране, а передавать на вход утилите cut, из комплекта GNU coreutils(если меня не глючит мой склероз) cut умеет обрезать строки по определённым правилам. man cut:

cut - remove sections from each line of files

SYNOPSIS
cut OPTION... [FILE]...
DESCRIPTION
Print selected parts of lines from each FILE to standard output.
With no FILE, or when FILE is -, read standard input.
Mandatory arguments to long options are mandatory for short options too.
-b, --bytes=LIST
select only these bytes
-c, --characters=LIST
select only these characters
-d, --delimiter=DELIM
use DELIM instead of TAB for field delimiter
-f, --fields=LIST
select only these fields; also print any line that contains no de‐
limiter character, unless the -s option is specified
-n (ignored)
--complement
complement the set of selected bytes, characters or fields
-s, --only-delimited
do not print lines not containing delimiters
--output-delimiter=STRING
use STRING as the output delimiter the default is to use the input
delimiter
-z, --zero-terminated

cut -- читает строки(в вашем случае скорее всего одну строку), в качестве разделителя между полями использует символ / и печатает в результате только второе поле. То-есть если сделать так:
echo "a/bb/cc/d" | cut -d'/' -f2  #то на выходе мы получим строку bb

Вот как это выглядит на практике.
kpFoxAx.png

Это ответ на вопрос номер 1 ;-)

Ответ на вопрос номер два... Впрочем вы сейчас сами всё поймёте, когда я из однострочника сделаю многострочник...
export LINK=$(if  [ $CI_JOB_NAME = "Run with DB" ]; 
                            then 
                               echo $SUBDOMAIN; 
                         else 
                               echo "master"; 
                        fi)

Теперь понятно, что такое fi? Это просто закрывающая скобка к if. -- if наоборот, или fin ;-)
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы