본문 바로가기
Backend/DevOps

[Jenkins]젠킨스 + AWS ECR 파이프라인 구축(젠킨스 입문 / 설치 / 사용법)

by 비전공자 기록광 2022. 6. 21.
반응형

2022.05.27 - [Backend/배포 & 운영 & 모니터링] - CI / CD 파이프라인 (CI/CD 입문 / CI/CD툴 비교분석 / DevOps)

 

CI / CD 파이프라인 (CI/CD 입문 / CI/CD툴 비교분석 / DevOps)

CI Continous Integration : 지속적 통합 > 빌드, 테스트 자동화 > 개발에서 발생하는 불일치 최소화 > 품질 관리 CD Continuous Deployment : 지속적 배포 > 배포 자동화 CI / CD 사용 목적 : 개발하며 git에 계..

datamoney.tistory.com

 

젠킨스로 CI/CD 파이프라인을 구축해보려 한다.

 

1. AWS EC2 인스턴스 생성

플랫폼 Ubuntu
인스턴스 유형 t2.medium

 


2. Docker 설치

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 패키지 업데이트
sudo apt-get update -y
 
# 기존에 있던 도커 삭제
sudo apt-get remove docker docker-engine docker.io -y
 
# 도커 설치
sudo apt-get install docker.io -y
 
# docker 서비스 실행
sudo service docker start
 
# 권한 에러 발생
ls -al /var/run/docker.sock
 
# 현재 유저 권한 부여
sudo usermod --G docker $USER
cs

 


3. Jenkins 설치

1
2
3
4
5
# jenkins 설치
docker pull jenkins/jenkins:lts
 
# docker run
docker run --9090:8080 --restart always --name jenkins -v jenkins_data -u root jenkins/jenkins:lts
cs
  • EC2 인바운드 규칙 추가 (9090)

내가 임의로 젠킨스 포트를 9090으로 정해줬기 때문에 인바운드 규칙에 9090을 추가했다.

 

 

4. 젠킨스 로그인 및 기본 설정

1
2
# 초기 패스워드 확인 후 로그인
docker exec jenkins cat /var/jenkins_home/secrets/initialAdminPassword
cs

 

  • 기본 Plugin 설치

 

5. Project 설정 

 

  • Github Project url 추가 + 소스코드 추가

Failed to connect to repository : Command "git ls-remote -h -- https://github.com/recordbuffer/TILver2 HEAD" returned status code 128:
stdout:
stderr: remote: Support for password authentication was removed on August 13, 2021. Please use a personal access token instead.
remote: Please see https://github.blog/2020-12-15-token-authentication-requirements-for-git-operations/ for more information.
fatal: Authentication failed for 'https://github.com/recordbuffer/TILver2/

가져올 Git Repo가 Private이라 Authentication failed 이 났다.

이럴때는 레포에 접근할 수 있는 계정의 토큰을 넣어주면 된다.

https://개인토큰@github.com/recordbuffer/TILver2

 

  • Branches to build 

main인지 master인지 확인

 

 

  • Github Repo > Settings > Webhook 생성

URL에 본인의 젠킨스 주소를 넣어주고 뒤에 /github-webhook/ 을 써준다.

content type은 application/json으로 바꿔줬다.

 

http://젠킨스 주소:9090/github-webhook/

체크 표시가 뜨는지까지 확인하면 된다.

 

만약 에러가 난다면

인스턴스의 인바운드 규칙에 github webhook ip를 넣어줘야 한다. 6개나 된다.

https://api.github.com/meta

 

 

6. Build Script 작성

  • NodeJS 플러그인 설치

빌드에서 사용되는 NodeJS의 플러그인을 설치해줌

 

 

  • Global Tool Configuration > NodeJS 추가

NodeJS 설정을 해준다.

 

 

2022.06.03 - [Frontend] - Node.js와 Node-Sass 버전 호환 불가 에러 (npm ERR! Code 1)

 

Node.js와 Node-Sass 버전 호환 불가 에러 (npm ERR! Code 1)

Jenkins로 Node 빌드 설정하는 중에 에러가 발생했다. npm ERR! code 1 npm ERR! path /var/jenkins_home/workspace/*****/node_modules/node-sass npm ERR! command failed 찾아보니 node-sass 버전이 node와 맞..

datamoney.tistory.com

 

  • Build 환경 > Provide Node & npm bin/ folder to PATH

설정한 NodeJS 셀렉

 

 

  • Build

내 소스파일의 pom.xml 경로 적어주면 되는데 

root에서 pom.xml까지의 경로가 맞는지 확인하고 적어주자.

 

 

  • Pre Steps

빌드를 위한 명령어를 Excute shell를 추가해 적어준다.

 

 

1
2
3
4
5
6
7
8
npm install
npm run build
 
-- AWS ECR 접속
aws ecr get-login-password --region ap-northeast-2 | docker login --username AWS --password-stdin (생략).dkr.ecr.ap-northeast-2.amazonaws.com
 
-- jib로 build  
./mvnw compile jib:build
cs

jib로 컨테이너를 묶어줌

 

AWS ECR 접속에 관한 명령어는 푸시 명령 보기로 쉽게 복사할 수 있다.

 

 

7. Deploy Script 작성

  • Publish Over SSH

빌드 후 특정 서버로 배포하기 위해 Publish Over SSH 플러그인을 받았다.

 

 

  • Jenkins 설정 > 시스템 설정  > ssh 설정

배포될 서버와 인증 정보를 같이 저장해 tes configuration 시 success 가 뜨는 걸 확인한다.

 

배포할 서버에 SSH 연결을 위한 설정을 해준다.

1
2
3
4
5
6
7
-- AWS CLI 설치
curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -"awscliv2.zip"
unzip awscliv2.zip
sudo ./aws/install
 
-- AWS Configure
-- Access Key & Secret Access Key & Region & password
cs

 

그리고 빌드 환경에 Send files or execute commands over ssh after build run 을 선택하고

SSH 정보를 미리 설정한 deploy로, 밑에 exec command에 배포 스크립트를 작성하면 된다.

 

ECR같은 경우로는 

위에 했던 대로 aws ecr에 접속하고 도커를 실행해주면 된다.

 

 

초록 체크가 뜨면 성공이다.

자세한 로그는 #16을 누르면 볼 수 있다.

 

Finished: SUCCESS

 

진짜 성공임

 

이로써 깃허브 main에 push 이벤트를 감지해 

webhook으로 젠킨스로 가져와 build script, deploy script대로 진행하는 CI/CD 파이프라인을 구축했다.

반응형

댓글