동기의 이것저것
article thumbnail
728x90

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 저장소는 따로 설정이 또 필요하다.

728x90
반응형
profile

동기의 이것저것

@U_motivation

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!