어떻게 코드의 품질을 강제적으로 통제합니까
3547 단어 jenkins
배경
이전의 글에서 우리는 JENkins와sonarqube가 어떻게 집적되었는지 묘사했다. 오늘 우리는 이 글에서 어떻게gerrit+JENkins+sonar를 사용하여 코드 품질 관리를 하는지를 묘사했다.주로sonarqube에서 코드를 분석하는 능력을 이용하여 통제한다.
일반적인 절차는 개발자가 코드를 제출하기만 하면 자동으로 CI/CD를 터치하여 컴파일 결과에 따라 코드가merge에 들어갈 수 있는지 판단하는 것이다.코드의 질은 통제할 수 없다.그렇다면 우리는 어떻게 통제할 것인가?전체적으로 다음과 같은 절차를 채택한다.gerrit 제출 코드 -->jenkins job--->컴파일한 후sonar 보고서를 업로드한다-->shell 스크립트가sonar의 API를 호출하여 관건적인 품질 데이터를 얻어 조건 충족 여부를 판단한다-->jenkins는 실행 결과를gerrit-->jenkins의 반환 결과에 따라merge 코드 여부를 판단한다.
2. 구체적 실현
이 간단한 절차에서 가장 기본적인 것은gerrit와 Jenkins의 통합과sonarqube 보고서를 어떻게 업로드하는가이다.물론 본고는 어떻게 집적해야 하는지를 설명하는 것이 아니다. 본고는 주로 셸 스크립트를 어떻게 써야 하는지를 설명한다.
전체 셸 스크립트는 다음 세 단계로 나눌 수 있습니다.
뒤에 첫 번째 단계를 빼는 것을 고려한다. 왜냐하면 각 팀들이 주목하는 품질 지표가 다를 수 있지만 각 스크립트는 첫 번째 단계를 수행해야 하기 때문이다.그래서 두 개의 스크립트가 생겼습니다:sonarCheckStatus.sh、sonarCheckQuality.sh;
첫 번째sonarCheckStatus.sh의 구체적인 실현은 다음과 같다.
#!/bin/bash
#set -ox
projectName=$1
url="$SONAR_address"
function getStatus(){
urls=$url'api/ce/component?component='$projectName;
flag=12;
while [ $flag -gt 5 ]
do
result=`curl -k -X GET $urls`;
#if sonar project is private
#result=`curl -k -u $username:$password -X GET $urls`;
analyze=`echo $result | awk -F : '{print $11}' | awk -F '"' '{print $2}' `;
if [ "$analyze" == "SUCCESS" ];then
echo "sonarqube report analyze successfully!!!!! Please execute check script"
break;
fi
echo "report is analyzing!!! sleep 20 seconds and scanning again"
sleep 20;
((flag--));
done
if [ $flag -le 5 ];then
echo "Don't get the analysis result, please adjust the value of flag or check url & projectName"
return 1;
fi
}
getStatus
이 스크립트는 일반적인sonarqube분석 프로젝트를 분석할 때 2분을 넘지 않기 때문에 매번sonar의api를 호출하여 보고서의 업데이트 여부를 판단하고 업데이트되면 0으로 되돌아간다. 만약sonar가 보고서를 분석하고 있다면 20초 동안 수면한 후에 이 API를 계속 호출하고 120초도 성공하지 못하면 스크립트는 -1로 되돌아간다. Jenkinsjob은 실패한다.
2단계sonarCoverageCheck.sh 스크립트도 비슷한 사상이지만 첫 번째 단계에 비해 더욱 복잡하다. 왜냐하면 부동점수의 비교가 있기 때문이다.이 셸 스크립트를 원하시는 분은 댓글이나 사적인 대화를 남겨도 됩니다.
기타
1.python 스크립트가 아닌 셸 스크립트를 사용하는 이유는 무엇입니까?
처음에 모든 linux 시스템은 셸 스크립트를 직접 사용할 수 있기 때문에,python 스크립트는 수동으로python을 설치해야 하기 때문에, 최소한의 영향을 고려하여 셸을 선택해야 한다.그런데 사실 지금의 시스템은 자동으로 파이톤을 설치하는 거예요.7. 모두 자신이 할 수 있는 언어를 선택하면 된다.
2.sonarqube의 보고서가 pending 상태에 있어서 스크립트가 -1로 되돌아오고 코드가merge에 들어갈 수 없습니다
이 문제는sonarqube 자체로 인해sonarqube의 임무 집행은 단일 대기열의 형식으로 임무가 막힐 때 다른 임무를 블로킹한다.코드가merge가 되지 않는 것은 JENkins가gerrit에게 -1을 되돌려주었기 때문이다. 개발 학생들은 -1을 본 후에 코드를 주 지점으로 합병하는 것에 동의하지 않을 것이다.(gerrit에서도 설정할 수 있다. Jenkins가 -1을 되돌려주면 누구도merge 코드를 사용할 수 없다)
3. 스크립트는 어디에 두어야 하는가
스크립트는 Jenkins job에 놓여 있으며, 스크립트가 1 또는 0으로 되돌아와 Jenkins job의 상태를 제어하고gerrit에 대응하는 상태 코드를 되돌려줍니다
4. 프로세스의 장점과 단점은 이 프로세스가 전체적으로 품질 관리와 제어의 수요를 만족시키고 관건적인 품질 데이터에 대해 체크포인트를 할 수 있다는 것이다.그리고 너무 많은 추가 의존이 필요하지 않다는 단점은sonarqube의 능력을 통해 품질을 관리하기 때문에sonarqube의 상태에 의존해야 하기 때문에sonar에 이상이 생기면 이 절차가 정상적으로 작동하지 못한다는 것이다.그리고 셸 스크립트를 완성하고 관리하는 데 추가 비용이 필요합니다
위챗 공식 계정: DevOps 시작 안내서
여러분 위챗 공중번호를 주목해 주세요!또한 devops/ci/cd와 관련된 화제 토론과 문제 해결 방안을 위한 위챗 그룹을 새로 만들었다.관심 있으시면 위챗:crazyboy-smile
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Jenkins-Part 2의 도커 컨테이너 내에서 Selenium 테스트 실행이제 docker에서 Jenkins를 실행한 다음 Jenkins(docker 컨테이너 내부)에서 셀레늄 테스트를 실행하는 방법을 살펴보겠습니다. What is Jenkins? Jenkins can be install...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.