2017-05-02 15 views
13

Gitlab ve Sonarqube ve Sonarqube Plugin SVG Badges kullanıyorum.
benim README.md dosyasında böyle bir şey var gitlab üzerinde Sonarqube devleti temsil etmek için: Bu mükemmel çalışırGitlab'deki Gitlab Değişkenlerini Kullanma SonarQube Rozetleri için 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) 

. Rozetim gösteriliyor, bağlantı çalışıyor, her şey yolunda.

gibi bir şey inşa etmek için bir yol var mı:

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

Her Geliştirici sadece kopyalayıp kendi README.md dosyasına yapıştırılabilecek bir iskelet sağlamak istiyoruz ve değişkenler şey ile, otomatik README içine doldurulur .gitlab-ci.yml

Daimi Gitlab Değişkenleri mentioned here'u da denedim, fakat bu da çalışmıyordu!

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

Herkesin bir fikri vardır?

cevap

4

https://gitlab.com/help/ci/variables/README.md'daki değişkenler yalnızca CI ortamında (yani bir işte) bulunur, dolayısıyla dosyayı görüntülerken bunları Markdown görüntüleyicide kullanamazsınız. - Yine de bir özellik teklifi için harika bir fikir. Bir tane açtım - https://gitlab.com/gitlab-org/gitlab-ce/issues/32255.

Yapabilecekleriniz, bu değişkenlerin gitmesini istediğiniz bir yer tutucu eklemek ve daha sonra sed 'un onları içeren bir iş yaratmaktır. Tek tırnak sadece edebi değer elden bırakmazken,

update_readme: 
    script: 
    - echo $CI_PROJECT_NAME # Sanity check 
    - sed -ie "s/{THIS}/$CI_PROJECT_NAME/g" README.md 

Not çift tırnak kullanımı çift tırnak (") ve tek tırnak ('). kullanımının $CI_PROJECT_NAME genişleyecektir. ÖNEMLİ

+0

ile özel simge değiştirme gizli yorumların

gibi kullanabilirsiniz senin README.md render etkileyebilir ama gerçekten daha 'README.me' olduğunu gelmez bir tane görmeli miyim? Bazı içeriği gerçekten değiştirmediği için ... '[! [cover] (https://sonar.domain.com/api/badges/measure?key=com.mydomain:$ {BU } & metric = kapsamı)] (https://sonar.domain.com/component_measures/metric/coverage/list?id=com.mydomain:$ {THIS}) ' ve komut dosyanız – Joerg

+0

a cat README.md' doğru sürümünü göstererek aber budur (tabii ki) Gitlab – Joerg

+0

'da gösterilmiyor. Soruyu doğru olarak işaretledim ve size ödül verdim çünkü bunun çözümün bir yolu olabileceğini gördüm. ama yine de: 'README.md' elbette gitlab içinde değiştirilmez. Ve eğer otomatik olarak işlediysem, orijinali gitmişse ... bu yüzden iyi bir fikir değil. Ayrıca normal README ve bir şablon dosyası ile, yine de Readme'ın düzenlenmesi gereken geliştiriciler için biraz kafa karıştırıcı olacak ... herhangi bir Fikir @Rex? – Joerg

2

!

sen CI kendisi

0 dan bir depo dosyasını güncellemek isteyen çünkü sonsuz döngüye .gitlab-ci.yml tetikleme önlemek için bir şube/mantığı uygulamalıdır

yaklaşımdır:

  1. README.md
  2. urlencode yüklenen depoda (değil Burada gösterilen, bunu inşa etmeliyiz) payload tarafından rozeti etrafında özel sınırlayıcı ile
  3. Yedek eski/ilk rozeti README.md hazırlayın ikame edilmiş içeriği
  4. Güncelleştirme Gitlab API
ile depo

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

.gitlab-ci README.md.sed komutta 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' 

, (henüz Burada gösterilen, bunu inşa etmeliyiz) gerçek rozetli payload yerine

  • çözüm Update existing file in repository API
  • kullanılarak README.md yazmaktır README.md should Görüntülenmeyen özel dize sınırlayıcılarını kullanın (gizli yorumlar gibi). Bu sınırlayıcılar her zaman dosyadadırlar, ikame edilmezler. Sadece aralarında olan şey altyazılı. otomatik markası, her zaman güncelleyebilirsiniz Bu şekilde size README.md
  • yolunu eklemeniz gerekir böylece
  • ikame sed komutu ile yapılır (sadece rozet güncellenmedi) güncelleme API ihtiyacı .gitlab-ci.yml çalıştırmak content urlkodlamasi için (çok sed komutu ilk yüklenmiş olması gerekir, bir darbe urlencode() işlevi tarafından sarılır (gösterilmemiştir) yükleme:

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 
} 

Notlar: [//]: # (-- start --) böylece bir Gitlab CI Secret variable

+0

bu oldukça hoş görünüyor ... Daha derin bir bakacağım. Çok teşekkürler! – Joerg