Jenkins - 1 ( 초기환경 설정 및 기본 파이프라인 구성 )

HD.Y·2024년 2월 21일
0

한화시스템 BEYOND SW

목록 보기
56/58
post-thumbnail

🦁 Jenkins 설치하기

  • 사전 준비사항 : 가상머신 2대 준비 ( 나의 컴퓨터 사양을 고려해서 설정하였다. )
    Jenkins 서버 : CPU 2, 메모리 4GB
    배포 서버 : CPU 1, 메모리 2GB
    IP 설정 및 방화벽 끄기 ( Systemctl stop firewalld / setenforce 0 )

Jenkins 설치 단계

1. 자바 설치 : dnf install -y java-11-openjdk-devel

2. 레포지토리 추가
 ➡ rpm --import https://pkg.jenkins.io/redhat/jenkins.io-2023.key
 ➡ cd /etc/yum.repos.d/
 ➡ curl -O https://pkg.jenkins.io/redhat-stable/jenkins.repo

3. 젠킨스 설치 : dnf install jenkins

4. 젠킨스 기본 포트 변경 : vi /usr/lib/systemd/system/jenkins.service
 ➡ 줄번호 표시 : : set nu
 ➡ 70번 째 줄의 Environment="JENKINS_PORT=8080" 포트번호를 9090으로 변경
 ➡ 사유 : 보통 스프링 부트 서버의 포트번호로 8080을 많이 사용하기 때문

5. 젠킨스 시작 ( 컴퓨터 사양에 따라 시작되는데 시간이 다소 걸림 )
 ➡ systemctl daemon-reload
 ➡ systemctl restart jenkins

6. 9090번 포트에 대한 VMWare 에서 포트포워딩 설정

7. 젠킨스 대시보드에 접속 : 젠킨스 서버 가상머신 IP:9090

  ➡ 초기 비밀번호 : cat /var/lib/jenkins/secrets/initialAdminPassword 으로 확인

  ➡ " Install Suggested Plugins " 를 클릭


  ➡ 관리자 계정 생성 ( 이메일은 아무거나 입력해도 상관 없음 )

  ➡ 그러면 아래와 같이 대시보드에 접속이 된다.


🐶 GitHub와 Jenkins 연동 설정하기

  • 윈도우 컴퓨터 및 Jenkins 가상머신 컴퓨터 IP에 포트포워딩 설정하기 ( 9090 포트 )

1. Jenkins에 git 설치 : yum install git

2. GitHub에서 토큰 생성하기
 1) GitHub에서 오른쪽 상단 계정 아이콘 클릭 ➡ Settings 클릭
 2) 왼쪽 메뉴탭 제일 아래에서 " Developer settings " 클릭
 3) 왼쪽 메뉴탭에서 " Personal access tokens " 클릭
 4) Tokens(classic) ➡ Generate new token ➡ Generate new token(classic) 순으로 클릭


  5) Note에 토큰 이름 입력 ➡ Expiration 에서 토큰 만료기한 선택 ➡ Select scopes에서
    " repo " 와 " admin:repo_hook " 체크


  6) Generate Token을 클릭하면 토큰이 생성되고, 생성된 토큰은 저장해 둔다.
   ( 잃어버리면 재생성해야됨 )


3. Jenkins에서 API Key 생성하기
 1) Jenkins 대시보드에서 오른쪽 상단 사용자 프로필 클릭
 2) 왼쪽 메뉴탭에서 설정 클릭 ➡ API Token에서 Add new Token 클릭 후 이름 입력
 3) 생성된 토큰 복사 후 Save


4. Jenkins에 GitHub 토큰 등록

  1) Jenkins 대시보드 ➡ Jenkins 관리 ➡ System 클릭


  2) GitHub에서 Add GitHub Server 클릭
    ➡ Name : 원하는 이름으로 적음
    ➡ Add 클릭 후 Jenkins 클릭


    ➡ Kind : Secret text 클릭
    ➡ Secret : GitHub에서 생성한 토큰 입력
    ➡ ID : 원하는대로 입력 후 Add 버튼 클릭


    ➡ Credentials 에서 추가한 것 선택 후 Test Connection 클릭
    ➡ 테스트 연결 결과가 아래와 같이 정상이면 Save 클릭


5. GitHub WebHook 설정하기

  1) GitHub에 레포지토리를 생성 ➡ Settings에서 Webhooks ➡ Add webhook 클릭

  2) Payload URL 입력 : http://[내 윈도우 컴퓨터의 공인 IP]:9090/github-webhook/

    ➡ 이때, 반드시 끝에 / 를 붙여줘야 된다.

  3) Secret 부분에 Jenkins에서 생성한 Key 입력 후, "Add webhook" 클릭

  4) 정상적으로 연동이 되면 아래처럼 나온다.


6. Jenkins Pipeline 생성하여 테스트해보기
 1) Jenkins 대시보드에서 새로운 Item 클릭
 2) Pipeline 이름 입력 후 FreeStyle project 클릭 ➡ Ok 버튼 클릭
   ➡ Pipeline 이름은 GitHub 레포지토리 이름과 맞춰주는 것이 좋다.

  3) GitHub Project 체크 후 레포지토리 URL 입력
   ➡ 왼쪽 메뉴탭에 GitHub 아이콘이 생기고, 클릭하면 입력한 URL로 이동하는 단순한
     기능이다.


  4) 소스 코드 관리에서 Git 체크 및 GitHub 레포지토리 주소 입력
   ➡ 입력한 레포지토리에서 소스 코드를 Pull 해오기 때문에 중요한 설정이다.
   ➡ 이때 Branches to build 에는 실제로 코드를 Push 할 브랜치명으로 적는다.


  5) 빌드 유발에서 GitHub hook trigger for GITScm polling 체크


  6) 빌드 스탭에서 Add build step 클릭 후 Execute shell 클릭
  ➡ 빌드 스탭은 실제 빌드할때 처리할 작업들을 설정해주는 단계이다.
  ➡ Execute shell은 빌드하는 서버, 즉 Jenkins 서버에서 실행할 동작들을 여기에 다
    적어줄 수 있다.

   ➡ 테스트하기 위해 echo test 라고 적어보겠다.

  7) VSCode에서 작성한 프론트엔드 서버 코드를 GitHub로 Push해보고 Jenkins로 알림이
   오는지 확인한다.


🐮 SSH로 접속하는 환경 설정하기

1. Jenkins 서버에 플러그인 설치하기
 1) Jenkins 대시보드 ➡ Jenkins 관리 ➡ Plugins 클릭

  2) Available plugins에서 Publish Over SSH 검색 후 Install 클릭

  3) 설치가 끝나고 실행중인 작업이 없으면 Jenkins 재시작 클릭하여 재시작


  • EC2에서 서버를 실행할 경우

1. EC2 생성 시 발급받은 .ppk 파일을 .pem 파일 형식으로 변환 ( 변환은 지난 글 참고 )

2. 생성한 키 파일을 Jenkins 서버로 FileZilla 프로그램 이용 옮기기

3. chmod 400 [옮긴 파일명]

4. 접속 테스트 : ssh ubuntu@[EC2 IP 주소] -i [옮긴 파일명]

5. Jenkins 설정 수정

  1) Jenkins 대시보드 ➡ Jenkins 관리 ➡ System 클릭

  2) Publish Over SSH 에 아래 내용 추가
    ➡ Key : .pem 파일 내용 붙여넣기

  3) SSH Servers 에서 추가 클릭
    ➡ Name : 원하는 이름으로 지정 ( 서버의 이름으로 적는게 좋음 )
    ➡ Hostname : EC2 의 IP 주소
    ➡ Username : ubuntu

    ➡ 이 부분은 SSH로 접속할 서버에 대한 설정 부분이다. 나중에 접속할 서버가
      늘어나면, 여기에 추가해주면 된다.


  • CentOS 8 가상머신에서 서버를 실행할 경우

1. Jenkins 서버에서 SSH Key 설정하기  
 1) ssh-keygen 입력 ➡ 엔터 3번 클릭
 2) ssh-copy-id root@[접속 할 가상머신 IP]
 3) yes 입력 후, 접속할 가상머신의 패스워드 입력
 4) ssh root@[가상머신 IP] 했을때 접속이 되면 성공한 것
 5) 접속해제 : exit


2. Jenkins 설정 수정
 1) 젠킨스 서버에서 키파일 확인 : cat ~/.ssh/id_rsa
   ➡ SSH 접속을 끊은 상태에서 해야된다.

  2) Jenkins 대시보드 ➡ Jenkins 관리 ➡ System 클릭

  3) Publish Over SSH 에 key 파일 내용 붙여넣기

  4) SSH Servers 에서 추가 클릭
    ➡ Name : 원하는 이름으로 지정 ( 서버의 이름으로 적는게 좋음 )
    ➡ Hostname : 가상머신 IP 주소
    ➡ Username : root
    ➡ Remote Directory : /

  5) Test Configuration 클릭 시 Success 라고 뜨면 잘 설정된 것이니 저장한다.


  • 그러면 이제 Pipeline 구성에서 빌드 후 조치를 작성할 수 있다.
    빌드 후 조치에서 Send build artifacts over SSH 클릭
    Name : 위에서 설정한 SSH 서버 이름 선택
    Source files : 옮길 파일명 // SSH 서버로 전송할 파일명을 입력
    Remove prefix : 파일명의 앞부분 제거하고 싶을때 사용
      ex) tartget/test.jar 로 Source files에서 설정했을때,
        Remove prefix로 target/ 이라고 하면 실제로 전송되는 파일명인 test.jar만
        남는다.

    Remove directiory : SSH 서버의 어떤 경로에 파일을 옮길지 지정
    Exec command : 파일을 옮기고 실행할 명령어들을 입력
  • 아래처럼 입력 후 지금 빌드를 클릭해봤을때, SSH 서버의 /abc 경로로 파일이 옮겨진 것을 볼 수 있다.

  • 여기까지 하면, 기본적인 파이프라인 구성에 대해 알아보았고, 실제로 프론트 엔드 서버와 백엔드 서버를 파이프라인으로 구성해보겠다.


🐻 프론트엔드 서버 구성하기

1. Jenkins 서버에 Node.js 설치하기
 ➡ curl -sL https://rpm.nodesource.com/setup_20.x | sudo -E bash -
 ➡ sudo yum install -y nodejs

2. 배포 서버 컴퓨터에 nginx 설치하기 : yum install -y nginx

3. 배포 서버 컴퓨터에서 nginx 설정파일 수정하기 : vi /etc/nginx/nginx.conf
  ➡ 47 ~ 48번째 줄을 아래로 변경

        location / {
                index index.html;
                try_files $uri $uri/ @rewrites;
        }

        location @rewrites {
                rewrite ^(.+)$ /index.html last;
        }


4. 배포 서버 컴퓨터에서 nginx 시작 : systemctl start nginx

5. Jenkins 관리의 System에서 Publish over SSH 설정되어 있는지 확인

6. 파이프라인 구성에서 빌드 스탬에 Execute shell 구성에 아래 내용 추가

npm i
rm -rf /var/lib/jenkins/workspace/[깃허브 레포지토리명]/dist
npm run build
cd /var/lib/jenkins/workspace/[깃허브 레포지토리명]/dist
tar -cvf dist.tar ./*    // dist 폴더를 압축
mv dist.tar ../          // 압축한 파일을 상위 폴더로 이동시킴 
                         // ( 빌드한 폴더라서 파일 전송 시 바로 파일명을 적어주기 위해 )

 ➡ 빌드 후 조치에서 Source files 에 파일명을 적을때 기준 경로는 빌드 위치
   ( var/lib/jenkins/workspace/[깃허브 레포지토리명] ) 이다.

 ➡ 따라서, 해당 경로를 기준으로 파일명을 적어줘야 되는데, Remove prefix 설정을
   안해주기 위해서 위처럼 압축한 폴더를 빌드 위치로 이동시켰다.

 ➡ 만약, 이동을 안시켰다면 source files에 파일명을 dist/dist.tar 로 적어야 할 것이고,
     Remove prefix로 dist/ 를 적어줘야 된다.


7. 빌드 후 조치 작성
  ➡ source files : dist.tar
  ➡ Remote directory : /usr/share/nginx/html/
  ➡ Exec command
     tar -xvf /usr/share/nginx/html/dist.tar -C /usr/share/nginx/html/
     systemctl reload nginx


8. GitHub에 Push해서 코드 수정 한 내용이 서버에 배포되는지 접속(배포서버IP:80)하여 확인
  ➡ 배포 서버 IP의 80 포트에 대해 포트포워딩 설정 필요


🐨 백엔드서버 구성하기

1. 배포 서버에 openjdk 11 버전 설치하기 : dnf install -y java-11-openjdk-devel

2. Jenkins에서 "Maven" 설정하기
 1) Jenkins 관리 ➡ Tools ➡ Maven installations 에서 Add Maven 클릭
 2) Name : 원하는 이름 / Version : 선택 ( 나는 가장 최신 한단계 아래인 3.9.5 로 선택함 )


3. 백엔드 파이프라인 생성 ( Freestyle project )

4. 빌드 유발까지는 프론트엔드 파이프라인 구성과 동일하게 진행한다.

5. 빌드 스탭에서 Invoke top-level Maven targets 클릭 ( 메이븐 빌드 추가 부분 )
  ➡ Maven Version : 위에서 설정한 버전 클릭
  ➡ Goals : clean install 입력 // 기존 빌드 내용을 없애고 새롭게 빌드한다는 내용

6. 빌드 후 조치 작성
  ➡ Source files : target/[ jar파일명 ]
  ➡ Remove prefix : target/
  ➡ Remote directory : /root/
  ➡ Exec command

// 환경 변수 설정하는 부분 
export APP_PASSWORD=
export AWS_S3_ACCESS_KEY=
export AWS_S3_SECRET_KEY=
export BRAND_BUCKET=
export CLIENT_ID=
export EXPIRED_TIME=
export JWT_SECRET_KEY=
export MAIL_SENDER=
export MASTER=
export MASTER_PW=
export MASTER_URL=
export PORTONE_KEY=
export PORTONE_SECRETKEY=
export PRODUCT_BUCKET=
export PRODUCT_INTROD_BUCKET=
export REGION=
export REVIEW_BUCKET=
export SLAVE=
export SLAVE_PW=
export SLAVE_URL=

// 기존에 백그라운드에서 실행중인 프로그램이 있으면 끄고 재시작 시키는 쉘 스크립트
echo "PID Check..." >> /var/log/jenkins_test_spring.log

CURRENT_PID=$(netstat -anlp | grep 8080 | awk '{print $7}' | cut -d '/' -f1)

echo "Running PID: {$CURRENT_PID}" >> /var/log/jenkins_test_spring.log

if [ -z $CURRENT_PID ]; then
   echo "Project is not running" >> /var/log/jenkins_test_spring.log
else
   echo "Project Killing" >> /var/log/jenkins_test_spring.log
   kill -9 $CURRENT_PID
   sleep 3
fi

echo "Deploy Project...." >> /var/log/jenkins_test_spring.log

// 백그라운드에서 jar 파일을 실행시키도록 하는 명령어
nohup java -jar /root/lonua-0.0.1-SNAPSHOT.jar >> /var/log/jenkins_test_spring.log 2>&1 &

7. 배포 서버 컴퓨터에서 8080 포트가 사용중인지 확인

  ➡ 명령어 설치 : yum install -y lsof

  ➡ 확인 : lsof -i tcp:8080

  ➡ 로그 파일 확인 : cat /var/log/jenkins_test_spring.log

  ➡ 종료 : sudo kill -9 {PID번호}

profile
개발자가 되기까지의 과정

0개의 댓글