GitLab CI — Сократить значение переменной

Я пытаюсь включить Review Apps для своего проекта с автоматическим развертыванием в Heroku для веток. Каждое развертывание должно иметь следующий адрес:

https://prefix-<branch-name>.herokuapp.com

Heroku требует, чтобы имена приложений были не длиннее 30 символов, поэтому мои задания должны сокращать имя ветки, если оно слишком длинное.

Я пытался сделать это обычным способом Unix, например:

variables:
  REVIEW_APP_NAME: "prefix-${CI_COMMIT_REF_SLUG:0:23}"

Но он разрешил "префикс-".

Я также нашел следующее решение, которое позволило мне использовать сокращенное имя ветки в разделе сценария. Но его по-прежнему нельзя использовать в параметре URL-адреса среды. И это приводит к тому, что приложение развертывается на Heroku, но GitLab вообще не отслеживает его (нет развертывания в списке Environments и никаких действий при удалении ветки).

variables:
  REVIEW_APP_NAME: "prefix-$${CI_COMMIT_REF_SLUG:0:23}"

before_script:
  - eval export REVIEW_APP_NAME=${REVIEW_APP_NAME}

Есть ли другие способы добиться правильного поведения?


person Alexander    schedule 21.02.2018    source источник
comment
Вам не нужны фигурные скобки в ваших переменных. См. документы. .gitlab.com/ce/ci/variables/ для более подробной информации   -  person Rekovni    schedule 22.02.2018
comment
@Rekovni, в случаях, когда вам не нужно усечение - да. Но если я не буду использовать фигурные скобки в моем случае, значение REVIEW_APP_NAME будет таким: prefix-branch-name:0:23. Что, очевидно, не соответствует моим ожиданиям.   -  person Alexander    schedule 22.02.2018
comment
Я имею в виду, что я думаю, что это должно быть что-то вроде: REVIEW_APP_NAME: "prefix-$CI_COMMIT_REF_SLUG:0:23" и это должно дать вам ваш prefix-branch-name:0:23 ? (если я неправильно понял ваш вопрос)   -  person Rekovni    schedule 22.02.2018
comment
@Rekovni, да, похоже, есть недоразумение. Я хочу не получить строку с числами в конце, а урезать имя моей ветки до 23 символов.   -  person Alexander    schedule 22.02.2018
comment
Мне нужно решить точно такую ​​же задачу. @Александр, ты решил свою проблему? Вы можете добавить ответ к этому вопросу?   -  person Byron Sommardahl    schedule 09.10.2018
comment
@ByronSommardahl, к сожалению, я пока не нашел решения этой проблемы. Но это был студенческий проект. Поэтому мы просто переместили наш репозиторий на GitHub и включили встроенную интеграцию с Heroku, чтобы получить ту же функциональность.   -  person Alexander    schedule 11.10.2018
comment
очевидно, это невозможно, см.: gitlab.com/gitlab-org/gitlab/ -/вопросы/24659   -  person Chris    schedule 07.08.2020


Ответы (2)


Для этого мы используем простой bash-скрипт:

#!/bin/bash
set -e

out=${1:0:40}
if [[ $out =~ ^.*-$ ]]; then
    out=${out:0:-1}
fi
echo $out

Оператор if проверяет, не заканчивается ли строка дефисом.

Затем мы используем наш скрипт в CI следующим образом:

[...]
  script:
    - export CI_COMMIT_REF_NAME=$(./infrastructure/utils/shorten_branchname.sh $CI_COMMIT_REF_NAME)
[...]

Для образов, использующих docker или alpine, необходимо установить bash до:

[...]
before_script:
    - apk add --update bash
[...]
person wjentner    schedule 21.04.2019
comment
спасибо @fsperrle (stackoverflow.com/users/1496346/fsperrle) за скрипт и конфигурацию CI! - person wjentner; 21.04.2019
comment
Спасибо за предоставленный скрипт. Однако на самом деле это не отвечает на вопрос, как мы можем сократить/обрезать значение $CI_COMMIT_REF_SLUG также для создания динамического URL-адреса нашей динамической среды для приложений для проверки в gitlab. Здесь тоже есть решение? - person martn_st; 17.01.2020
comment
Я думаю, что это отвечает на него. Вы можете делать все, что хотите, в своем скрипте bash, и вам будет легко найти правильные команды для этого. Суть в том, что вам придется вызвать скрипт и, вероятно, экспортировать env. Спасибо за ответ на мой вопрос - person Chrissi Grilus; 07.07.2021

В итоге я использовал $CI_MERGE_REQUEST_IID вместо $CI_COMMIT_REF_SLUG для создания URL-адреса.

person martn_st    schedule 17.01.2020