2022.05.27 - [Backend/배포 & 운영 & 모니터링] - CI / CD 파이프라인 (CI/CD 입문 / CI/CD툴 비교분석 / DevOps)
젠킨스로 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 -a -G docker $USER
|
cs |
3. Jenkins 설치
1
2
3
4
5
|
# jenkins 설치
docker pull jenkins/jenkins:lts
# docker run
docker run -d -p 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개나 된다.
6. Build Script 작성
- NodeJS 플러그인 설치
빌드에서 사용되는 NodeJS의 플러그인을 설치해줌
- Global Tool Configuration > NodeJS 추가
NodeJS 설정을 해준다.
2022.06.03 - [Frontend] - Node.js와 Node-Sass 버전 호환 불가 에러 (npm ERR! Code 1)
- 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" -o "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 파이프라인을 구축했다.
'Backend > DevOps' 카테고리의 다른 글
[AWS]AWS 서비스 및 기본 개념 정리 (2) | 2022.06.09 |
---|---|
[Error] Node.js와 Node-Sass 버전 호환 불가 에러 (npm ERR! Code 1) (0) | 2022.06.03 |
[DevOps] CI / CD 파이프라인 (CI/CD 입문 / CI/CD툴 비교분석) (0) | 2022.05.27 |
[AWS]AWS EC2 접속을 위한 pem 파일 ppk 파일로 변환 방법 (puTTygen) (0) | 2022.01.16 |
클라우드 (클라우드 기초 / 클라우드 개념 / AWS / IaaS, PaaS, SaaS) (0) | 2021.10.10 |
댓글