Search
Duplicate
📒

[Jenkins] 04-2. 소나큐브, 멀티노드

상태
완료
수업
Jenkins
주제
기본개념
4 more properties
참고

젠킨스 (소나큐브)

NOTE
소나큐브는 코드 품질 관리를 위한 오픈 소스 플랫폼으로, 지속적인 검사를 통해 코드 스멜, 보안 취약성을 식별하고 개선 방안을 제시해준다!

소나큐브 설치 및 실행

NOTE
docker run -d --rm -p 9000:9000 --name sonarqube sonarqube
Bash
복사
token값을 사용한다.
커뮤니티 버전을 사용해서 무료로 사용한다.(기본 id/pw : admin/admin)
git clone https://github.com/scofe97/cicd-web-project.git sudo apt install maven -y mvn sonar:sonar \ -Dsonar.host.url=http://localhost:9000 \ -Dsonar.login=[token]
Bash
복사
소나큐브 빌드확인
빌드 결과를 확인할 수 있다.
mvn clean compile package -DskipTests=true # 코드수정(좋지 않은코드 작성) @GetMapping("/") public String index(Model model) { // logger.debug("Welcome to njonecompany.com..."); System.out.println("index is called by Get /"); mvn sonar:sonar \ -Dsonar.host.url=http://localhost:9000 \ -Dsonar.login=[token]
Bash
복사
문제있는 코드 추가
Failed 발생
logger를 사용하지 않거나, 문제있는 코드에 대해 경고

젠킨스 + 소나큐브 사용

NOTE
소나큐브 키값을 Credential에 등록해줘야함
pipeline { agent any tools { maven 'Maven3.8.5' } stages { stage('github clone') { steps { git branch: 'main', url: 'https://github.com/scofe97/cicd-web-project' } } stage('build') { steps { sh ''' echo build start mvn clean compile package -DskipTests=true ''' } } stage('SonarQube analysis') { steps { withSonarQubeEnv('Sonarqube-server') { sh 'mvn sonar:sonar' } } } } }
Bash
복사

젠킨스 (멀티노드)

NOTE
젠킨스는 다수개의 Agent로 빌드를 분산하는 Master/Slvaer모드를 제공한다!
Vagrant_API_Version="2" Vagrant.configure(Vagrant_API_Version) do |config| # Jenkins 마스터 노드 설정 config.vm.define "jenkins-master" do |master| master.vm.box = "generic/ubuntu2004" master.vm.provider :virtualbox do |vb| vb.name = "jenkins-master" vb.cpus = 2 vb.memory = 4096 end master.vm.hostname = "jenkins-master" master.vm.synced_folder ".", "/vagrant" master.vm.network "private_network", ip: "192.168.32.14" # 마스터 노드 포트 포워딩: 지정된 포트만 설정 master.vm.network "forwarded_port", guest: 80, host: 40080, auto_correct: true master.vm.network "forwarded_port", guest: 8080, host: 48080, auto_correct: true master.vm.network "forwarded_port", guest: 8088, host: 48088, auto_correct: true master.vm.network "forwarded_port", guest: 3000, host: 43000, auto_correct: true master.vm.network "forwarded_port", guest: 9000, host: 49000, auto_correct: true master.vm.provision "shell", path: "sshd_config.sh" end # Jenkins 슬레이브 노드 설정 config.vm.define "jenkins-slave" do |slave| slave.vm.box = "generic/ubuntu2004" slave.vm.provider :virtualbox do |vb| vb.name = "jenkins-slave" vb.cpus = 1 vb.memory = 2048 end slave.vm.hostname = "jenkins-slave" slave.vm.synced_folder ".", "/vagrant" slave.vm.network "private_network", ip: "192.168.32.15" # 슬레이브 노드 포트 포워딩: 지정된 포트만 설정 slave.vm.network "forwarded_port", guest: 80, host: 50080, auto_correct: true slave.vm.network "forwarded_port", guest: 8080, host: 58080, auto_correct: true slave.vm.network "forwarded_port", guest: 8088, host: 58088, auto_correct: true slave.vm.network "forwarded_port", guest: 3000, host: 53000, auto_correct: true slave.vm.network "forwarded_port", guest: 9000, host: 59000, auto_correct: true slave.vm.provision "shell", path: "sshd_config.sh" end end
Bash
복사
마스터(1) - 슬레이브(1) 환경으로 실습한다.
빌드 부하 분산(속도 개선) 및 빌드 리소스 비용을 절약할 수 있다.
특정 OS 및 개발 환경 사용에 제약이 없어진다.
Java가 동작하는 어떠한 서버라도 Agent로 활용이 가능해진다.

멀티노드 설정 및 사용

NOTE
slave node 라벨설정
node 설정(접속 IP, 계정, 실행 수 ..)
pipeline { agent { // 슬레이브 지정 label 'slave1' } tools { maven 'Maven3.8.5' } stages { stage('github clone') { steps { git branch: 'main', url: 'https://github.com/joneconsulting/cicd-web-project.git'; } } stage('build') { steps { sh ''' echo build start mvn clean compile package -DskipTests=true ''' } } } }
Groovy
복사