Использование переменных Gitlab в GitLab README.md для значков SonarQube

Я использую Gitlab и Sonarqube и Sonarqube плагин SVG значки.
Чтобы представить состояние Sonarqube на gitlab, у меня есть что-то вроде этого в моем :

[![coverage](https://sonar.domain.com/api/badges/measure?key=com.domain:projectname&metric=coverage)](https://sonar.domain.com/component_measures/metric/coverage/list?id=de.domain:projectname)

это работает идеально. Мой значок показан, ссылка работает, все в порядке.

есть ли способ, чтобы построить что-то вроде:

[![coverage](https://sonar.domain.com/api/badges/measure?key={MYDOMAIN}:{THIS}&metric=coverage)](https://sonar.domain.com/component_measures/metric/coverage/list?id={MYDOMAIN}:{THIS})

Я хочу предоставить скелет, который каждый разработчик может просто скопировать и вставить в свой и переменные заполняются в README автоматически, с чем-то вроде .gitlab-ci.yml

Я также попробовал постоянные переменные Gitlab упомянутые здесь но это тоже не сработало!

 [![coverage](https://sonar.domain.com/api/badges/measure?key=com.mydomain:$CI_PROJECT_NAME&metric=coverage)](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

подход:

  1. готовить README.md со специальными разделителями вокруг значка
  2. заменить старый/начальный знак к payload (вы должны построить его, не показано здесь) в загруженном репозитории README.md
  3. urlencode замещенный контент
  4. обновите репозиторий с помощью 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 команда обернута bash urlencode() функция, которая должна быть загружена первой (загрузка не показана):

urlencode ()

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