2017-05-02 9 views
13

私はGitlabとSonarqubeとSonarqube Plugin SVG Badgesを使用しています。 gitlabにSonarqube状態を表すために
私は私のREADME.mdファイル内でこのようなものを持っている:Gitlabでの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内に充填されているが、 like .gitlab-ci.yml

また、永久Gitlab変数mentioned hereを試しましたが、これも機能しませんでした!

[![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) 

誰でも知っていますか?

答えて

4

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を拡大していきます。

+0

であなたのプライベートトークンの置き換え隠さコメント

のようにそれを使用していますが、実際にはより 'README.me'であることができます私は見なければならない?それは本当にいくつかのコンテンツを変更していないので... 私は何かのように使用: '[![カバレッジ](https://sonar.domain.com/api/badges/measure?key=com.mydomain:$ {これは}&metric = coverage)](https://sonar.domain.com/component_measures/metric/coverage/list?id=com.mydomain:$ {こちら)} ' とスクリプト – Joerg

+0

' cat README.md'これはGitlabには表示されていません(もちろん)Gitlabには表示されません。 – Joerg

+0

私はこの問題を正しいものとしてマークし、あなたに賞金を与えます。しかし、まだ:README.mdはもちろんgitlabでは置き換えられません。そして、もし私がそれを自動的にコミットすると、元のものはなくなってしまったのです...それは良い考えではありません。また、通常のREADMEとテンプレートファイルでは、開発者にとって、Readmeを編集する必要があると思っています。Idea @Rex? – Joerg

2

重要!

あなたはCI自体

0からリポジトリファイルを更新するために求めているので、無限ループに .gitlab-ci.ymlをトリガーする避けるために、分岐/ロジックを実装する必要があります

アプローチは次のとおりです。

  1. README.md
  2. でurlencodeをロードリポジトリに(あなたがいない ここに示されている、それを構築する必要があります)​​でバッジを中心に特別な区切り文字で
  3. 代替古い/初期バッジをREADME.mdを準備します置換された内容
  4. Gitlab APIでリポジトリを更新する

README.md

Hello 
[//]: # (-- start --) 
Initial non working badge 
[//]: # (-- end --) 
World 

.gitlab-ci。YML sedコマンドで

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' 

、あなたの実際のバッジを​​を代用します(ここでは示されていない、それを構築する必要があります)

  • ソリューションはUpdate existing file in repository API
  • README.mdを使用してREADME.mdを書くことである必要がありますレンダリングされていない特別な文字列区切り文字を使用します(隠されたコメントのようなものです)。これらのデリミタは常にファイル内にあり、置換されません。それらの間にあるものだけが排除されます。あなたはREADME.md
  • へのパスを追加する必要がありますので、置換はsedコマンドによって行われます(唯一のバッジが更新されます)
  • この方法は、あなたが自動的にバッジをあなたが.gitlab-ci.ymlを実行するたびに更新することができ、更新APIが必要URLエンコードするcontent(SO 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 
} 

注: [//]: # (-- start --)はあなたのREADME.mdのレンダリングには影響しませんので、あなたがGitlab CI Secret variable

+0

これはかなりいいようです...私はそれをより深く見ていきます。どうもありがとう! – Joerg

関連する問題