본문 바로가기
[AWS-RDP]/CICD_DevOps

[3-Tier 구축성공][우분투] Jenkins Integration with GIT Maven Sonarqube Nexus Tomcat | Continuous

by METAVERSE STORY 2023. 11. 15.
반응형
728x170

 

 

 

 
 
## userdata - 젠킨스 설치 실제 성공 스크립트 (우분투) 
#!/bin/bash
sudo apt-get update -y
sudo hostnamectl set-hostname jenkins

sudo wget -O /usr/share/keyrings/jenkins-keyring.asc \
    https://pkg.jenkins.io/debian-stable/jenkins.io-2023.key

echo deb [signed-by=/usr/share/keyrings/jenkins-keyring.asc] \
    https://pkg.jenkins.io/debian-stable binary/ | sudo tee \
    /etc/apt/sources.list.d/jenkins.list > /dev/null

sudo apt-get update -y
sudo apt-get install openjdk-11-jdk -y

sudo apt-get install jenkins -y
sudo systemctl start jenkins
sudo systemctl status jenkins

sudo systemctl enable jenkins
 
---------------------------------------------------
#!/bin/bash
sudo apt-get update -y
sudo hostnamectl set-hostname jenkins

## 설치 및 업그레이드를 자동화하는 Jenkins의 Debian 패키지 저장소. 이 리포지토리를 사용하려면 먼저 시스템에 키를 추가.
sudo wget -O /usr/share/keyrings/jenkins-keyring.asc \
    https://pkg.jenkins.io/debian-stable/jenkins.io-2023.key

## 그런 다음 Jenkins apt 저장소 항목을 추가합니다.
echo deb [signed-by=/usr/share/keyrings/jenkins-keyring.asc] \
    https://pkg.jenkins.io/debian-stable binary/ | sudo tee \
    /etc/apt/sources.list.d/jenkins.list > /dev/null

## 로컬 패키지 인덱스를 업데이트 한 다음, JAVA11 설치 마지막으로 Jenkins를 설치하십시오.
sudo apt-get update -y
sudo apt-get install openjdk-11-jdk -y

sudo apt-get install jenkins -y
sudo systemctl start jenkins
sudo systemctl status jenkins

sudo systemctl enable jenkins
 
 
 
 
 

[1] 젠킨스 서버 구성 (Git / Maven 설치)

## 젠킨스 다운로드 ( Jenkins download and deployment)
- 우분투 계열 설치

 
sudo wget -O /usr/share/keyrings/jenkins-keyring.asc \
    https://pkg.jenkins.io/debian-stable/jenkins.io-2023.key
 
echo deb [signed-by=/usr/share/keyrings/jenkins-keyring.asc] \
    https://pkg.jenkins.io/debian-stable binary/ | sudo tee \
    /etc/apt/sources.list.d/jenkins.list > /dev/null
 
  sudo apt-get update
  sudo apt-get install fontconfig openjdk-11-jre
  sudo apt-get install jenkins
 

 
sudo systemctl start jenkins
sudo systemctl status jenkins

 
## 서버 재시작시 자동 시작 설정
sudo systemctl enable jenkins

 
 
 
## 젠킨스 화면

 
 
## java -version 확인

 
 
## Git 설치 확인
ubuntu@jenkins:~$ git --version
git version 2.34.1

 
 
 
 
## Maven 설치 
- download apache maven

 
cd /opt
ubuntu@jenkins:/opt$ sudo wget https://dlcdn.apache.org/maven/maven-3/3.9.5/binaries/apache-maven-3.9.5-bin.tar.gz

 
- 압축 풀기
ubuntu@jenkins:/opt$ sudo tar -xvf apache-maven-3.9.5-bin.tar.gz

- 원본파일 삭제
ubuntu@jenkins:/opt$ sudo rm -rf apache-maven-3.9.5-bin.tar.gz

 
- maven 폴더 변경
ubuntu@jenkins:/opt$ sudo mv apache-maven-3.9.5/ maven-3.9.5

 
 
- Maven 경로 설정

root@jenkins:/opt/maven-3.9.5/bin# export PATH=$PATH:/opt/maven-3.9.5/bin

root@jenkins:/opt/maven-3.9.5/bin# mvn --version

 
경로 영구설정을 위해 .bashrc  수정
export PATH=$PATH:/opt/maven-3.9.5/bin

 
root@jenkins:~# source ~/.bashrc
 
 
 
 
 
 

[2] 소나큐브 서버 구성 

https://www.sonarsource.com/products/sonarqube/downloads/

 
## Java 설치 확인

 
 
## 소냐큐브 다운로드
root@jenkins:/opt# wget https://binaries.sonarsource.com/Distribution/sonarqube/sonarqube-9.9.2.77730.zip

root@jenkins:/opt# apt install unzip
root@jenkins:/opt# unzip sonarqube-9.9.2.77730.zip

root@jenkins:/opt# rm -rf sonarqube-9.9.2.77730.zip
 
root@jenkins:/opt# mv sonarqube-9.9.2.77730/ sonarqube-9

 
## 소나큐브 사용자 생성
root@jenkins:/opt# useradd sonar

root@jenkins:/opt# passwd sonar

 
root@jenkins:/opt# chown -R sonar:sonar sonarqube-9/

 
 
## 소나큐브 시작
- Root 계정으로 실행하지 말것!!
  (sonnar 계정으로 실행 / syetemctl 등록 할것)
  (영상은 OLD 버전으로 다름)
https://cloud-allstudy.tistory.com/1886  참고할것!!

 
 
## 토큰 생성
 
 
 
 
 
 
 
 
 
 

[3]  넥서스 (Nexus) 서버 구성  (Nexus 3.48 버전 설치 성공)

## 넥서스는 자바8 버전 필요  
## 최소 사양 t2.medium 해야 (서버 죽음)

 
## download nexus

sudo apt-get update -y
sudo apt-get upgrade -y
sudo apt-get install openjdk-8-jdk -y
 

 
root@ip-10-50-1-91:/opt# wget https://download.sonatype.com/nexus/3/nexus-3.48.0-01-unix.tar.gz
root@ip-10-50-1-91:/opt# tar -xvf nexus-3.48.0-01-unix.tar.gz

 
## Nexus 사용자 생성 필요
root@ip-10-50-1-91:/opt# useradd nexus
root@ip-10-50-1-91:/opt# passwd nexus
New password:
Retype new password:
passwd: password updated successfully

 
 
 
- 소유권 변경
root@ip-10-50-1-91:/opt# chown -R nexus:nexus nexus-3.48.0-01
root@ip-10-50-1-91:/opt# chown -R nexus:nexus sonatype-work/

 
- nexus.rc 파일 수정

 

- Nexus 실행 (기본포트 8081 사용)
-  시스템 서비스 등록
$ vi /etc/systemd/system/nexus.service
[Unit]
Description=nexus service
After=network.target

[Service]
Type=forking
LimitNOFILE=65536
User=nexus
Group=nexus
ExecStart=/opt/nexus-3.48.0-01/bin/nexus start
ExecStop=/opt/nexus-3.48.0-01/bin/nexus stop
User=nexus
Restart=on-abort

[Install]
WantedBy=multi-user.target
 

 
[필요시] Port 변경
$ vi ~nexus/nexus/etc/nexus-default.properties
application-port=40080
 
- 서비스 시작
$ systemctl enable nexus.service
$ systemctl start nexus.service

 
- 암호 재설정

- 익명사용자 비활성화 선택

 
 
 
 
 
 

[4]  아파치 톰캣 (Tomcat)  서버 설치

- Tar 파일 링크 복사

 
sudo apt-get update -y
sudo apt-get upgrade -y
sudo apt-get install openjdk-8-jdk -y

wget https://dlcdn.apache.org/tomcat/tomcat-9/v9.0.82/bin/apache-tomcat-9.0.82.tar.gz

tar -xvf apache-tomcat-9.0.82.tar.gz
rm -rf
apache-tomcat-9.0.82.tar.gz
 
mv apache-tomcat-9.0.82/ tomcat-9

 
## 톰캣 실행 권한 ubuntu 에 부여
root@ip-10-50-0-226:/opt# chown -R ubuntu:ubuntu tomcat-9/

 
## ubuntu 계정으로 톰캣 실행
ubuntu@ip-10-50-0-226:/opt/tomcat-9/bin$ ./startup.sh

 
 
## context.xml 파일 주석 처리
  <!--  <Valve className="org.apache.catalina.valves.RemoteAddrValve"
          allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" />  -->

 
- 톰캣 재시작

 

- 톰캣 시작/종료 소프트링크 생성
ubuntu@ip-10-50-0-226:/usr/bin$ sudo ln -s /opt/tomcat-9/bin/startup.sh /usr/bin/startTomcat
ubuntu@ip-10-50-0-226:/usr/bin$ sudo ln -s /opt/tomcat-9/bin/shutdown.sh /usr/bin/stopTomcat

 
- 서버상태 확인을 위한 톰캣 사용자 생성
ubuntu@ip-10-50-0-226:/opt/tomcat-9/conf$ vi tomcat-users.xml

 
- 톰캣 재시작후 접속

 
 
 
 
 
 
 

[5] 젠킨스 CICD 연동 작업
## 파이프라인 생성

- 깃허브 -->  젠킨스 /var/lib/jenkins/workspace  소스 복사
pipeline{
    agent any
    stages{
        stage('Git Checkout'){
            steps{
                git url:'https://github.com/bcreddydevops/chinna-app.git',branch:'main'
            }
        }
    }
}

 
- Maven 프로젝트 빌드하기 위해 Global Tool Configuration 이동

 
Maven 경로 확인 후 저장
/opt/maven-3.9.5/bin

 
 
## 파이프라인 추가 생성 (Maven 빌드)
pipeline{
    agent any
    tools{
        maven 'maven-3.9.5'
    }
    
    stages{
        stage('Git Checkout'){
            steps{
                git url:'https://github.com/bcreddydevops/chinna-app.git',branch:'main'
            }
        }
        stage('Build Maven Appication'){
            steps{
                sh 'mvn clean package'
            }
        }
    }
}

 
- Maven 빌드 성공

 
 
 
 
 
## Maven 빌드한 hiring.war 파일 --> 소나큐브 분석 (젠킨스 플러그인 추가 필요)

 
 
- SonarQube Scanner 플러그인 설치

 
 
 
 
## 소나큐브로 이동 (토큰 생성 후 복사 저장)

 
 
 
## 젠킨스관리 Credentials 이동
- global 클릭

 
- Secret text 선택
   : Secret 에 소나큐브의 토큰 입력
   : ID --> jenkins-sonar-token (다르면 안됨)

 
 

 
 
 
## 젠킨스관리 System 이동, 소나큐브 설정 후 저장

 
 
 
 
## 파이프라인 추가 생성 (GIT 다운로드 - Maven 빌드 - 소나큐브 연동)
- Pipeline Syntax 클릭 (양식 복사)

 
pipeline{
    agent any
    tools{
        maven 'maven-3.9.5'
    }
    
    stages{
        stage('Git Checkout'){
            steps{
                git url:'https://github.com/bcreddydevops/chinna-app.git',branch:'main'
            }
        }
        stage('Build Maven Appication'){
            steps{
                sh 'mvn clean package'
            }
        }
        stage('Generate SonarQube-Analysis'){
            steps{
                withSonarQubeEnv(installationName: 'sonarqube-9', credentialsId: 'jenkins-sonar-token') {
                    sh 'mvn sonar:sonar'    
                }
            }
        }
    }
}

 
- 소나큐브에서 분석 완료

 
 
 
 
## 젠킨스와 Nexus 연동을 위해 플러그인 설치 
-
Nexus Artifact Uploader 설치

 
- 젠킨스와 Nexus 연동을 위해 Credentials 이동
   : Nexus 로그인 계정 사용

 
 
 
## Nexus 에서 저장소 생성
- Create Repository 클릭  --> maven2 (hosted) 선택
   : Version policy --> Release
   : Layout policy --> Permissive
   : Content Disposition --> Inline
   : Deployment policy --> Allow redeploy

 
 
 
 
 
## 파이프라인 추가 생성 (GIT 다운로드 - Maven 빌드 - 소나큐브 연동 - Nexus 연동)
Pipeline Syntax 클릭 (양식 복사)

 
- War 파일 --> Nexus 업로드 (성공)

pipeline{
    agent any
    tools{
        maven 'maven-3.9.5'
    }
    
    stages{
        stage('Git Checkout'){
            steps{
                git url:'https://github.com/bcreddydevops/chinna-app.git',branch:'main'
            }
        }
        stage('Build Maven Appication'){
            steps{
                sh 'mvn clean package'
            }
        }
        stage('Generate SonarQube-Analysis'){
            steps{
                withSonarQubeEnv(installationName: 'sonarqube-9', credentialsId: 'jenkins-sonar-token') {
                    sh 'mvn sonar:sonar'    
                }
            }
        }
        
        stage('Upload War file to Nexus'){
            steps{
                nexusArtifactUploader artifacts: [
                    [
                        artifactId: 'hiring', 
                        classifier: '', 
                        file: 'target/hiring.war', 
                        type: 'war'
                    ]
                ], 
                credentialsId: 'nexus-credentials', 
                groupId: 'in.javahome', 
                nexusUrl: '10.50.0.199:8081',                          (PrivateIP 사용해도 업로드 가능, 보안그룹 오픈 필요)
                nexusVersion: 'nexus3', 
                protocol: 'http', 
                repository: 'chinna-app', 
                version: '0.1'                                                   (SNAPSHOT 들어가면 안됨, 숫자만 입력)
            }
        }
        
        
    }
}

 
- Nexus 에서 War 파일 확인 

 
 
 
 
 
## 젠킨스에서 톰캣 서버로 War 파일 적용 (1:11)
- 젠킨스에 ssh 에이전트 플러그인 설치

 
 

 

 

 

## 젠킨스관리 (Credentials) - 톰캣 서버용 자격증명 생성

- ID/PW 으로 할것

 

 

 

 
## 파이프라인 추가 생성 (GIT 다운로드 - Maven 빌드 - 소나큐브 연동 - Nexus 업로드 연동 - 톰캣서버 War 파일 연동)
Pipeline Syntax 클릭 (양식 복사)

 

- 파이프라인 에러 내용  (ssh 실행시, IP와 쉘경로 콜론없이 띄어야함!!)

+ scp -o StrictHostKeyChecking=no target/hiring.war ubuntu@10.50.0.226:/opt/tomcat-9/webapps
Warning: Permanently added '10.50.0.226' (ED25519) to the list of known hosts.
+ ssh -o StrictHostKeyChecking=no ubuntu@10.50.0.226:/opt/tomcat-9/bin/shutdown.sh
Pseudo-terminal will not be allocated because stdin is not a terminal.
ssh: Could not resolve hostname 10.50.0.226:/opt/tomcat-9/bin/shutdown.sh: Name or service not known

 

- 파이프라인 빌드 성공

pipeline{
    agent any
    tools{
        maven 'maven-3.9.5'
    }
    
    stages{
        stage('Git Checkout'){
            steps{
                git url:'https://github.com/bcreddydevops/chinna-app.git',branch:'main'
            }
        }
        stage('Build Maven Appication'){
            steps{
                sh 'mvn clean package'
            }
        }
        stage('Generate SonarQube-Analysis'){
            steps{
                withSonarQubeEnv(installationName: 'sonarqube-9', credentialsId: 'jenkins-sonar-token') {
                    sh 'mvn sonar:sonar'    
                }
            }
        }
        
        stage('Upload War file to Nexus'){
            steps{
                nexusArtifactUploader artifacts: [
                    [
                        artifactId: 'hiring', 
                        classifier: '', 
                        file: 'target/hiring.war', 
                        type: 'war'
                    ]
                ], 
                credentialsId: 'nexus-credentials', 
                groupId: 'in.javahome', 
                nexusUrl: '10.50.0.199:8081', 
                nexusVersion: 'nexus3', 
                protocol: 'http', 
                repository: 'chinna-app', 
                version: '0.1'
            }
        }
     stage('Deploy War file to Tommcat'){
            steps{
               sshagent(['tomcat-credentials']) {
                  sh """
                    scp -o StrictHostKeyChecking=no target/*.war ubuntu@10.50.0.226:/opt/tomcat-9/webapps
                    ssh -o StrictHostKeyChecking=no ubuntu@10.50.0.226 /opt/tomcat-9/bin/shutdown.sh
                    ssh -o StrictHostKeyChecking=no ubuntu@10.50.0.226 /opt/tomcat-9/bin/startup.sh
                    """
               }
            }
     }
    }
}

 

 

- 깃허브에서 소스업데이트 후 재적용

 

- 톰캣 서버 정상동작 확인

 

 


 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
https://www.youtube.com/watch?v=BT5ZmZmQaIU

 
 
 

반응형
그리드형

댓글