Использование переменных Gitlab в GitLab README.md для значков SonarQube
Я использую Gitlab и Sonarqube и Sonarqube плагин SVG значки.
Чтобы представить состояние Sonarqube на gitlab, у меня есть что-то вроде этого в моем :
[](https://sonar.domain.com/component_measures/metric/coverage/list?id=de.domain:projectname)
это работает идеально. Мой значок показан, ссылка работает, все в порядке.
есть ли способ, чтобы построить что-то вроде:
[](https://sonar.domain.com/component_measures/metric/coverage/list?id={MYDOMAIN}:{THIS})
Я хочу предоставить скелет, который каждый разработчик может просто скопировать и вставить в свой и переменные заполняются в README автоматически, с чем-то вроде .gitlab-ci.yml
Я также попробовал постоянные переменные Gitlab упомянутые здесь но это тоже не сработало!
[](https://sonar.domain.com/component_measures/metric/coverage/list?id={MYDOMAIN}:$CI_PROJECT_NAME)
у кого-нибудь есть идеи?
2 ответов
переменные в https://gitlab.com/help/ci/variables/README.md присутствуют только в среде CI (т. е. задании), поэтому вы не можете использовать их в Markdown viewer при отображении файла. - Это отличная идея для художественного предложения. Я открыл один - https://gitlab.com/gitlab-org/gitlab-ce/issues/32255. Не стесняйтесь куранты.
что вы можете сделать, это добавить заполнитель, куда вы хотите, чтобы эти переменные шли, а затем создать задание, которое sed
с ними.
update_readme:
script:
- echo $CI_PROJECT_NAME # Sanity check
- sed -ie "s/{THIS}/$CI_PROJECT_NAME/g" README.md
обратите внимание на использование двойных кавычек ( " ), а не одинарные кавычки ('). Использование двойных кавычек расширит $CI_PROJECT_NAME
в то время как одинарные кавычки просто сохранят его буквальное значение.
важно!
вы должны реализовать ветвь / логику, чтобы избежать запуска
.gitlab-ci.yml
в бесконечном цикле, потому что вы просите обновить файл репозитория из самого CI
подход:
- готовить
README.md
со специальными разделителями вокруг значка - заменить старый/начальный знак к
payload
(вы должны построить его, не показано здесь) в загруженном репозиторииREADME.md
- urlencode замещенный контент
- обновите репозиторий с помощью API Gitlab
README.md
Hello
[//]: # (-- start --)
Initial non working badge
[//]: # (-- end --)
World
.gitlab-ci.в формате YML
update_readme:
script:
- curl --request PUT --header 'PRIVATE-TOKEN: 9koXpg98eAheJpvBs5tK' 'https://gitlab.example.com/api/v4/projects/13083/repository/README%2Emd?branch=master&content=$(urlencode "$(sed 's_\[//\]: # (-- end --)_\n&_g;s_\(\[//\]: # (-- start --)\)[^\n]*\n_\npayload\n_g' README.md)")&commit_message=update%20file'
на заменить payload
С вашим фактическим значком (вы должны построить его, а не показано здесь)
- решение написать
README.md
С помощью обновить существующий файл в репозитории API - в
README.md
следует использовать специальные разделители строк, которые не отображаются (они похожи на скрытые комментарии). Эти разделители всегда находятся в файле,они не подставляются. Только что это между ними сделать subtituted. Таким образом, вы можете автоматически обновлять значок при каждом запуске.gitlab-ci.yml
(обновляется только бейдж) - замена производится
sed
команда, поэтому вам нужно добавить путь кREADME.md
- API обновления нуждается в
content
для urlencoded (так чтоsed
команда обернута bashurlencode()
функция, которая должна быть загружена первой (загрузка не показана):
urlencode() {
# urlencode <string>
old_lc_collate=$LC_COLLATE
LC_COLLATE=C
local length="${#1}"
for (( i = 0; i < length; i++ )); do
local c="${1:i:1}"
case $c in
[a-zA-Z0-9.~_-]) printf "$c" ;;
*) printf '%%%02X' "'$c" ;;
esac
done
LC_COLLATE=$old_lc_collate
}
заметки:
The [//]: # (-- start --)
не влияет на рендеринг вашего README.md
так что вы можете использовать его как скрытый комментарий
замените свой личный токен на GitLab CI Secret variable