私はGitlabとSonarqubeと SonarqubeプラグインSVGバッジ を使用しています。
GitlabでSonarqubeの状態を表すために、私はREADME.md
ファイルに次のようなものを記述しています。
[![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.md
ファイルにコピーして貼り付けることができるスケルトンを提供したいと思います。変数は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)
誰かが何か考えを持っていますか?
https://gitlab.com/help/ci/variables/README.md の変数はCI環境(つまりジョブ)にのみ存在するため、Markdownで使用できませんファイルを表示するときのビューア。 -しかし、それは機能提案のための素晴らしいアイデアです。私は1つを開いた- 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
一方、単一引用符はリテラル値を保持するだけです。
重要!
CI自体からリポジトリファイルを更新するように要求しているため、無限ループで_
.gitlab-ci.yml
_をトリガーしないようにブランチ/ロジックを実装する必要があります
アプローチは次のとおりです。
README.md
_を準備しますREADME.md
_をロードしたリポジトリで、古い/初期のバッジをpayload
で置き換えます(ここには表示されていませんが、ビルドする必要があります)。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_\1\npayload\n_g' README.md)")&commit_message=update%20file'
_
sed
コマンドで、payload
を実際のバッジに置き換えます(ここには表示されていませんが、作成する必要があります)
README.md
_を書き込むことですREADME.md
_は、レンダリングされて表示されない特殊な文字列区切り文字を使用する必要があります(これらは非表示のコメントのようなものです)。これらの区切り文字は常にファイル内にあり、置換されません。それらの間にあるものだけが置換されます。このように、_.gitlab-ci.yml
_を実行するたびにバッジを自動的に更新できます(バッジのみが更新されます)sed
コマンドによって行われるため、_README.md
_へのパスを追加する必要がありますcontent
をURLエンコードする必要があります(したがって、sed
コマンドは、最初にロードする必要があるbash 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
}
_
注:[//]: # (-- start --)
は_README.md
_のレンダリングに影響しないため、非表示のコメントのように使用できます
プライベートトークンをGitlab CIに置き換える_Secret variable
_