2017-05-02 12 views
13

저는 Gitlab과 Sonarqube와 Sonarqube Plugin SVG Badges을 사용하고 있습니다.
README.md 파일에 나는 이런 식으로 뭔가를 gitlab에 Sonarqube 상태를 표현하기 위해이 완벽하게 작동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 뷰어에서 사용할 수 없습니다. 그래도 기능 제안서에는 훌륭한 아이디어입니다. 하나 - 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.md의 렌더링에 영향을하지만 실제로보다'README.me'하지 않습니다 내가 봤어야 하나? 왜냐하면 그것은 실제적으로 어떤 내용을 바꾸지 않기 때문입니다 ... 그래서 나는 비슷한 것을 사용했습니다 : '[! [coverage] (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' 올바른 버전의 aber를 보여주고 있습니다. 이것은 Gitlab에 표시되지 않습니다. (물론) Gitlab에 표시되지 않습니다. – Joerg

+0

올바른 것으로 질문을 표시하고 현상금을줍니다. 왜냐하면 이것이 해결책 일 수 있다는 것을 알기 때문입니다. 그러나 여전히 : README.md는 gitlab에서 대체되지 않습니다. 그리고 내가 자동으로 커밋하면 원래보다 더 좋은 생각입니다. 또한 일반적인 README와 템플릿 파일을 사용하면 개발자를위한 혼란이 생길 ​​수 있습니다. 개발자는 Readme를 편집해야합니다. Idea @Rex? – Joerg

2

을!

당신은 당신이 CI 자체

0에서 저장소 파일을 업데이트 요청 때문에 무한 루프에 .gitlab-ci.yml을 트리거 피하기 위해 지점/로직을 구현한다

접근 방식은 다음과 같습니다

  1. README.md
  2. 를 urlencode로드 저장소에 (당신이하지 여기에 표시된, 그것을 구축해야한다) payload하여 배지 주위에 특별한 구분 기호로
  3. 대체 된/초기 배지를 README.md 준비 치환 된 내용
  4. Gitlab API로 저장소 업데이트

README.md

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

.gitlab-ci.sed 명령에서 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' 

, (당신이하지 여기에 표시된, 그것을 구축해야한다) 실제 배지를 payload을 대체

  • 이 솔루션은 Update existing file in repository API
  • 를 사용하여 README.md를 작성하는 것입니다 README.md해야 렌더링되지 않은 특수 문자열 구분 기호를 사용하십시오 (숨겨진 주석과 같습니다). 이러한 구분 기호는 항상 파일에 있으며 대체되지 않습니다. 그들 사이에있는 것만이 보류됩니다. 자동 배지 때마다 업데이트 할 수 있습니다이 방법 당신은 당신이 README.md
  • 의 경로를 추가해야하므로
  • 치환은 sed 명령에 의해 수행된다 (전용 배지를 업데이 트) 업데이트 API가 필요 .gitlab-ci.yml 실행 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 --) 그래서 당신이 Gitlab CI Secret variable

+0

이것은 꽤 멋져 보인다 ... 나는 그것에 대해 더 깊이 볼 것이다. 고마워요! – Joerg