## 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
댓글