2017-05-02 26 views
13

के लिए गिटलाब README.md में गिटलैब वैरिएबल का उपयोग करना मैं गिटलाब और सोनारक्वे और Sonarqube Plugin SVG Badges का उपयोग कर रहा हूं।
मेरी README.md फ़ाइल में gitlab मैं इस तरह कुछ है पर Sonarqube राज्य का प्रतिनिधित्व करने के लिए:सोनारक्यूब बैज

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

मैंने स्थायी गीटलैब वैरिएबल 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 में चर केवल सीआई पर्यावरण (यानी नौकरी) में मौजूद हैं, इसलिए आप फ़ाइल को प्रदर्शित करते समय मार्कडाउन व्यूअर में उनका उपयोग नहीं कर सकते हैं। - हालांकि, एक फीचर प्रस्ताव के लिए यह एक अच्छा विचार है। मैंने एक - 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:$ {THIS } और मीट्रिक = कवरेज)] (https://sonar.domain.com/component_measures/metric/coverage/list?id=com.mydomain:$ {THIS}) ' और आपकी स्क्रिप्ट – Joerg

+0

एक 'बिल्ली README.md' सही संस्करण अब दिखा रहा है (निश्चित रूप से) गिटलाब – Joerg

+0

में नहीं दिख रहा है मैंने प्रश्न को सही के रूप में चिह्नित किया है और आपको बक्षीस दिया है, क्योंकि मुझे लगता है कि यह समाधान के लिए एक तरीका हो सकता है। लेकिन फिर भी: 'README.md' निश्चित रूप से gitlab में प्रतिस्थापित नहीं है। और अगर मैं इसे स्वचालित रूप से प्रतिबद्ध करता हूं, मूल की तुलना में चला गया है ... तो एक अच्छा विचार नहीं है। सामान्य रीडमे और टेम्पलेट फ़ाइल के साथ, यह अभी भी डेवलपर्स के लिए कुछ भ्रम पैदा करेगा, जिसे रीडेमे संपादित किया जाना चाहिए ... कोई विचार @Rex? – Joerg

2

महत्वपूर्ण!

आप अनंत लूप में .gitlab-ci.yml ट्रिगर क्योंकि आप सीआई ही

0 से भंडार फ़ाइल को अद्यतन करने के लिए कह रहे हैं से बचने के लिए एक शाखा/तर्क को लागू करना चाहिए

दृष्टिकोण है:

  1. README.md विशेष परिसीमक के साथ बिल्ला आसपास payload द्वारा
  2. स्थानापन्न वर्ष/प्रारंभिक बिल्ला तैयार (आप इसे बनाने चाहिए, यहाँ नहीं दिखाया गया है) भंडार भरा हुआ README.md
  3. urlencode में प्रतिस्थापित सामग्री
  4. गिटलाब एपीआई
के साथ भंडार अद्यतन करें

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 स्थानापन्न (यदि आप इसे बनाने चाहिए, यहां नहीं दिखाए)

  • समाधान Update existing file in repository API
  • का उपयोग कर README.md लिखना है README.md चाहिए विशेष स्ट्रिंग डिलीमीटर का उपयोग करें जो प्रस्तुत नहीं होते हैं (वे छिपी टिप्पणियों की तरह हैं)। ये delimiters हमेशा फ़ाइल में हैं, वे प्रतिस्थापित नहीं मिलता है। केवल उनके बीच क्या है उपशीर्षक प्राप्त करें। इस तरह आप बिल्ला हर बार अपडेट कर सकते हैं आप चलाना .gitlab-ci.yml (केवल बिल्ला अद्यतन)
  • प्रतिस्थापन sed आदेश द्वारा किया जाता है, ताकि आप README.md
  • के लिए पथ जोड़ने की जरूरत है अद्यतन एपीआई की जरूरत है content urlencoded जा करने के लिए (ताकि sed आदेश एक बैश 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 सीआई Secret variable

+0

यह बहुत अच्छा लग रहा है ... मैं इसके लिए एक गहरी नजर रखूंगा। आपका बहुत बहुत धन्यवाद! – Joerg

संबंधित मुद्दे