참고
젠킨스 (소나큐브)
소나큐브 설치 및 실행
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
복사