본문 바로가기
ETC

젠킨스로 CI/CD구축

by brilliant-growth 2023. 8. 21.

AWS에 들어와서

 

$whoami

 

$sudo apt update

 

$sudo apt upgrade



sudo apt install build-essential

sudo apt update

sudo apt install apt-transport-https ca-certificates curl software-properties-common

 

sudo wget -qO- https://get.docker.com/ | sh

//도커를 깔고 버전 확인

docker -v

 

sudo systemctl start docker

sudo systemctl enable docker



sudo usermod -aG docker ${USER}

sudo systemctl restart docker



//AWS 프리티어 버전은 메모리가 낮아 하드에서 끌어다가 씀

sudo dd if=/dev/zero of=/swapfile bs=128M count=16

sudo chmod 600 /swapfile

sudo mkswap /swapfile

sudo swapon /swapfile

sudo swapon -s

sudo vi /etc/fstab



/swapfile swap swap defaults 0 0

 

mkdir data

 

pwd

 

docker run -d -v /home/ubuntu/data:/var/jenkins_home -v /var/run/docker.sock:/var/run/docker.sock -e JENKINS_HOME=/var/jenkins_home -p 8080:8080 -p 50000:50000 --name jenkins -u root jenkins/jenkins

를하여도 메모리가 부족하다고 뜬다면

 

docker run -d -v /home/ubuntu/data:/var/jenkins_home -v /var/run/docker.sock:/var/run/docker.sock -e JENKINS_HOME=/var/jenkins_home -e MAVEN_OPTS="-Xmx2g" -p 8080:8080 -p 8081:8081 -p 50000:50000 --name jenkins -u root jenkins/jenkins

 

이렇게 바꿔서 한번 해보자

 

젠킨스에 메이븐 깔기

 

메이븐을 젠킨스에 등록

 

젠킨스에 실행중인 상태로 들어가는방법

docker exec -it jenkins /bin/bash

 

도커 및 파이프라인

도커로 젠킨스를 들어간후

도커를 설치후 도커허브에 연동 시켜야함 아이디와 비밀번호는 도커허브임(틀려도 특별한말이 없으니 주의)
젠킨스에 가져올 프로젝트를 깃에 연동

 

깃허브에있는 프로젝트를 훅함
빌드시에 할 명령어
깃에도 URL을 연동

 

cd /var/jenkins_home/workspace/pony/target/

위에서 젠킨스홈/워크스페이스/안에 만든다고 하였고 pony는젠킨스폴더  이름임

java -jar pony-0.0.1-SNAPSHOT.war

nohup java -jar ./target/pony-0.0.1-SNAPSHOT.war & 

 

깃에있는 프로젝트를 젠킨스가 가져와 빌드를 진행함

 

와르로 하는이유는 스프링부트 버전이 업데이트 되면서 jsp를 jar로 할시에 오류가 나타나서 war로 변경하여 빌드를 진행

 

java -jar ./target/pony-0.0.1-SNAPSHOT.war

타켓 내부에 war파일이 있는지를 확인하고 다음으로 진행

 

있으면 컨터네이너 내부에 도커를 설치 

 

apt update

apt upgrade

 

apt install wget

 

wget -qO- https://get.docker.com/ | sh

 

docker -v

 

파이프라인 설정
파이프라인에 스크립트를 작성

 

pipeline {
    environment {
        repository = "kdh111112/pony"  //docker hub id와 repository 이름
        DOCKERHUB_CREDENTIALS = credentials('docker-jenkins') // jenkins에 등록해 놓은 docker hub credentials 이름
        dockerImage = ''
  }
  agent any
  stages {
      stage('Building our image') {
          steps {
              script {
                  sh "cp /var/jenkins_home/workspace/pony/target/pony-0.0.1-SNAPSHOT.war /var/jenkins_home/workspace/pony-pipeline" // war 파일을 현재 위치로 복사
                  dockerImage = docker.build repository + ":latest"
              }
          }
      }
      stage('Login'){
          steps{
              sh 'echo $DOCKERHUB_CREDENTIALS_PSW | docker login -u $DOCKERHUB_CREDENTIALS_USR --password-stdin' // docker hub 로그인
          }
      }
      stage('Deploy our image') {
          steps {
              script {
                sh 'docker push $repository:latest' //docker push
              }
          }
      }
      stage('Cleaning up') {
  steps {
              sh "docker rmi $repository:latest" // docker image 제거
          }
      }
  }
    }

주석을 잘보고 변경사항을 변경하자

 

cd /var/jenkins_home/workspace/pony-pipeline

 

ls

 

war 파일이 존재하는것을 확인 !!! 

있으면

 

apt-get install vim 

 

vi Dockerfile 

 

Dockerfile 내부에

 

FROM adoptopenjdk/openjdk11

 

WORKDIR /app

 

COPY ./pony-0.0.1-SNAPSHOT.war .

 

ENTRYPOINT ["java", "-jar", "-Dserver.port=8081", "pony-0.0.1-SNAPSHOT.war"]

 

를 내 프로젝트에 맞게 변경하여 적용하자

포트번호가 내 프로젝트와 맞아야함 

포트를 안보이게 하려면 보통 80번 포트를 사용함

 

파이프라인과 빌드와 연동
빌드 스크립트를 작성

pipeline {
 
  agent any
  stages {
      stage('cmd') {
          steps {
              script {
                  sh "/var/jenkins_home/workspace/pony-deploy/deploy.sh"
              }
          }
      }
  }
}

내 프로젝트에 맞게 수정

 

 

cd /var/jenkins_home/workspace/pony-deploy

 

ls

 

vi deploy.sh

 

docker stop spring && docker rm spring | true

 

docker rmi  도커허브아이디/저장소이름

 

docker pull 도커허브아이디/저장소이름

 

docker run -d -p 8081:8081 --name spring 도커허브아이디/저장소명 

# 사용하지 않는 불필요한 이미지 삭제  , 현재 쓰고 있는 이미지는 삭제되지 않음 

docker rmi -f $(docker images -f “dangling=true” -q) || true 


포트를 안보이게 하려면 80:80으로 변경함 8081은 기본포트

 

 

root@3733d3e14e12:/var/jenkins_home/workspace/pony-deploy# chmod 777 deploy.sh 

구축이 완료된 상태

'ETC' 카테고리의 다른 글

아파치,톰캣,메이븐,폼  (0) 2023.11.13
HTTP 응답상태 코드 정리  (0) 2023.11.13
젠킨스 구축방법  (0) 2023.08.09
MSA를 구축하는 간단한 방법  (0) 2023.08.02
oracle,mysql 타입 차이  (0) 2023.07.14