1. 젠킨스 설치
<bash />
docker run \
--name jenkins_1 \
-p 8081:8080 \
-e TZ=Asia/Seoul \
-v /"내 파일 위치"/var/jenkins_home:/var/jenkins_home \
-v /var/run/docker.sock:/var/run/docker.sock \
-v /"내 파일 위치"/jenkins_1/data:/data \
-u root \
-d \
--restart unless-stopped \
jenkins/jenkins:lts
2. A 레코드 설정 후 Nginx Proxy Manager 통해 젠킨스 접속

저번에 했던 방식과 똑같이 설정해준 후
Nginx Proxy Manager에 들어가서

또 같은 방식으로 add 해준다.
이번에는 A레코드로 설정한 도메인으로 들어오면 8080이 아니라 172.17.0.1:8081로 보낸다.
접속하면 초기 비밀번호를 입력하라고 뜨는데
<bash />
docker exec jenkins_1 cat /var/jenkins_home/secrets/initialAdminPassword
위의 명령어를 통해 비밀번호를 얻은 뒤 입력해준다.
그러면 플러그인 설치가 뜨는데 왼쪽 것을 설치해주었다.
설치 완료 후 사용자 생성을 해주었다.

다 마치고 나면 이런 창이 뜬다.
3. 젠킨스를 통한 배포 자동화
(배포 자동화 전에 jenkins에서 만든 파일에 git clone과 설정을 모두 마쳐놓아야 한다, 이건 Freestyle project를 통해 빌드를 마친 뒤 삭제 후 같은 이름의 pipline을 생성해도 된다 )
- 서버의 도커 안의 젠킨스로 들어가서 몇가지 설정을 해준다.
<bash />
# 들어가기
docker exec -it jenkins_1 bash
apt-get update
# java 17 설치
apt-get install openjdk-17-jdk -y
# JAVA_HOME 환경변수 설정
export JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64
도메인으로 접속한 젠킨스에서도 설정을 해주어야 한다.

global tool configuration에 들어가서

위와 같이 추가해주었다.
다시 돌아와서 bash에서 도커도 설치해준다.
<bash />
apt-get install -y ca-certificates curl gnupg lsb-release
mkdir -p /etc/apt/keyrings
rm /etc/apt/keyrings/docker.gpg
curl -fsSL https://download.docker.com/linux/debian/gpg | gpg --dearmor -o /etc/apt/keyrings/docker.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/debian \
$(lsb_release -cs) stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null
apt-get install -y docker-ce docker-ce-cli docker-compose-plugin
- 내 github에 들어가서 webhook을 걸어준다.

내 git 레포지토리에 settings에 들어가보면 다음과 같이 Webhooks가 있다.
add 를 눌러준 뒤

다음과 같이 url에 내 젠킨스 url을 입력해준다. 뒤에 /github-webhook/을 입력해주어야 한다.
이 url이 맞는지 확인 방법은 직접 들어가보면 된다

위와 같이 뜬다면 된 것이다.
Just the push event를 골라서 설정해주었다.
새로운 Item을 누르면 다음과 같이 뜨는데

name을 입력해준 뒤 골라준다.
freestyle project도 편하지만 Pipeline으로 해볼 것이다.

그러면 이렇게 설정 창이 뜨는데

이걸 체크해준다 (hook trigger, git에서 이벤트 발생시에 전달이 된다)

그리고 여기 script에다가 입력을 해준다.
<bash />
pipeline {
agent any
tools {
jdk 'openjdk-17-jdk'
}
stages {
stage('Prepare') {
steps {
git branch: 'main',
url: '내 git 레포지토리 주소'
}
post {
success {
sh 'echo "Successfully Cloned Repository"'
}
failure {
sh 'echo "Fail Cloned Repository"'
}
}
}
stage('Build Gradle Test') {
steps {
sh (script:'''
echo "Build Gradle Test Start"
''')
dir('.') {
sh """
chmod +x gradlew
"""
}
dir('.') {
sh """
./gradlew clean build
"""
}
}
post {
success {
sh 'echo "Successfully Build Gradle Test"'
}
failure {
sh 'echo "Fail Build Gradle Test"'
}
}
}
stage('Docker Rm') {
steps {
sh 'echo "Docker Run Start"'
sh """
docker stop "이름"
docker rm -f "이름"
docker rmi -f "이미지 이름"
"""
}
post {
success {
sh 'echo "Docker Rm Success"'
}
failure {
sh 'echo "Docker Rm Fail"'
}
}
}
stage('Bulid Docker Image') {
steps {
sh 'echo " Image Bulid Start"'
sh """
docker build -t "이미지 이름" .
"""
}
post {
success {
sh 'echo "Bulid Docker Image Success"'
}
failure {
sh 'echo "Bulid Docker Image Fail"'
}
}
}
stage('Docker Run') {
steps {
sh 'echo "Docker Run Start"'
sh """
docker run \
--name="이름" \
-p 8080:8080 \
-v /"파일 위치"/volumes/gen:/gen \
--restart unless-stopped \
-e TZ=Asia/Seoul \
-d \
"이미지 이름"
"""
}
post {
success {
sh 'echo "Docker Run Success"'
}
failure {
sh 'echo "Docker Run Fail"'
}
}
}
}
}
저장해준 뒤

지금 빌드를 누른 뒤 잘 된다면
내 코드를 git에 push 해보면

위와 같이 자동화가 잘 된 것을 볼 수 있다!!
참고로 public 저장소를 기준으로 하였다. private 저장소는 따로 설정이 또 필요하다.
'▸MAC > Linux' 카테고리의 다른 글
[네이버 클라우드 플랫폼] 활용 후기 (0) | 2023.06.12 |
---|---|
[Git Webhook 에러] 301 Moved Permanently (0) | 2023.05.11 |
[네이버 클라우드 플랫폼에서 배포하기] 4. 도메인 구매 후 내 도메인으로 배포하기 (nginx proxy manager, 가비아, DNSZi) (0) | 2023.05.10 |
[네이버 클라우드 플랫폼에서 배포하기] 3. CentOS에서 빌드 후 배포(Docker, DB, Git, Java) (0) | 2023.05.10 |
[네이버 클라우드 플랫폼에서 배포하기] 2. SSH 접속 (0) | 2023.05.10 |