반응형

CI/CD 란?

CI(Continuous Integration)는 소프트웨어 구축, 테스트 및 게시 프로세스의 자동화를 의미합니다.

CD(Continuous Deployment or Continuous Delivery)는 배포 자동화를 의미합니다.

 

즉, CI/CD는 코드 변경에 대해서 신속하게 코드 품질을 개선하는 데에 도움을 주는 DevOps 방식입니다.

만약 팀에 좋은 CI/CD 프로세스가 구축이 되어 있다면 더 신속하고 정확하게 릴리즈를 할 수 있을 것입니다.

 

옛날에 비해 CI/CD에 대한 중요성과 관심도가 급증함에 따라 도구들도 많아져서 선택에 어려움이 생기는 경우도 종종 발생하고 있습니다.

서비스에 따라 어떤 플랫폼을 선택을 하는 게 좋을지 고민할 텐데 우선 어떤 선택지가 있는지 살펴보겠습니다.

 

출처: 2023년 개발자 생태계 보고서

 

역시 아직까지 Jenkins 사용자가 많은데, 그 뒤를 Github Action이 바짝 따라잡고 있습니다.

 

 

GitHub Actions

Git을 많이 사용하기 때문에 가장 인기있는 도구가 아닐까 싶습니다.

Git과 직접 연동이 되기 때문에 workflow 작성 및 관리가 쉽습니다.

다양한 플러그인을 제공해줍니다.

초기에는 러닝커브가 있을 수 있습니다.

public repository는 무료로 제공되며, private이라면 500MB 2000분이 무료로 제공됩니다.

https://docs.github.com/ko/actions

 

Jenkins

아직까지도 제일 많이 사용하는 도구이며, 커뮤니티가 활발합니다.

오픈소스이고 무료입니다.

서버를 직접 호스팅 하고 관리해야 하기 때문에 서버 비용은 별도입니다.

마찬가지로 다양한 플러그인을 제공해 줍니다.

초기 설정에 시간이 걸릴 수 있으며, 지속적인 관리가 필요합니다.

https://jenkins.io/

 

GitLab CI

GitLab 플랫폼에서 자동화 빌드, 테스트 및 배포 파이프라인을 제공합니다.

사용이 간편하고 배포 설정이 쉽습니다.

다른 플랫폼에 비해 플러그인이 적습니다.

https://about.gitlab.com/

 

반응형
반응형

오늘은 AWS EC2와 Jenkins를 활용한 CI/CD 구성을 해보려고 합니다!

인프라 관련 일을 할 때마다 어렵지만 재밌고 공부하는 재미가 쏠쏠한데 나중에 DevOps도 해보고 싶네요

 

DNS 설정은 아임웹을 사용했고, 깃허브 웹훅을 Jenkins와 연동해서 자동 빌드 테스트까지 해보겠습니다!

 

 

1. 프로젝트 생성 후 웹훅 설정

 

2. AWS 인스턴스 생성

 

3. 아임웹 추가

 

1) 환경설정 > 도메인

 

 

2) 보안그룹 > 인바운드 규칙

 

보안그룹 생성

 

netstat -tulpn

→ 위의 포트가 사용 안 하고 있는 포트인지 확인 필요

 

4. 대상 그룹 생성

로드 밸런싱 > 대상 그룹 > 대상 그룹 생성

5. 로드밸런서 DNS 연동

아임웹에서 만든 ip 주소 등록
방금 만든 대상그룹 등록

 

 

6. Jenkins 설정

1) Jenkins 관리 > 시스템 설정 > SSH Server 추가

Hostname : 인스턴스 프라이빗 IPv4 주소

 

 

 

2) Jenkins 새로운 Item

 

유의할 점 : 깃허브 주소, 폴더 명

 

 

  • GitHub hook으로 develop 자동 빌드로 세팅
  • Execute shell : 빌드 시 실행할 쉘 스크립트 설정
# jenkins workspace로 이동
cd /var/jenkins_home/workspace
# 빌드 후 생성된 코드파일을 tar 파일로 생성
tar -cvf dev-test-server.tar dev-test-server
# tar 파일 위치 이동
mv dev-test-server.tar dev-test-server/dev-test-server.tar

 

 

 

방금 저장한 젠킨스 SSH Server 등록!

# 개발서버로 이동
cd /home/ec2-user/dev-test-server
# tar 파일 풀기
tar -xvf dev-test-server.tar
# start shell 스크립트 실행
./start.sh

 

 

 

  • 빌드 종료 후 실행할 shell 명령 설정
# tar 파일 삭제
rm /var/jenkins_home/workspace/dev-test-server/dev-test-server.tar

 

 

여기서부터는 젠킨스 서버 - 개발 서버 세팅!

 

 

1. 젠킨스 서버 접속

 

cd /jenkins/workspace/
sudo mkdir dev-test-server
# 여기서 폴더명은 아까 젠킨스에서 만들어줬던 폴더명과 동일하게 !!!!

 

2. 개발 서버 접속

# 소스코드 풀 폴더 생성
sudo mkdir dev-test-server && cd dev-test-server
sudo vi ecosystem.config.js

 

ecosystem.config.js 파일 생성

'use strict';

module.exports = {
    apps: [
        {
            name: "dev-test-server-API", // pm2로 실행한 프로세스 목록에서 이 애플리케이션의 이름으로 지정될 문자열
            namespace: "develop",
            script: "dev-test-server/dist/main.js", // pm2로 실행될 파일 경로
            watch: false, // 파일이 변경되면 자동으로 재실행 (true || false)
            ignore_watch : ["logs"],
            env: {
                "NODE_ENV": "development" // 개발환경시 적용될 설정 지정
            },
            env_production: {
                "NODE_ENV": "production" // 배포환경시 적용될 설정 지정
            }
        }
    ]
};

 

start.sh 쉘 스크립트 파일 생성

sudo vi start.sh
#!/bin/bash
cd /home/ec2-user/dev-test-server/dev-test-server
yarn install
npm run build
cd /home/ec2-user/dev-test-server
pm2 restart ecosystem.config.js

 

💡 너무너무 중요한 권한 설정!!!

 

sudo chown -R ec2-user:ec2-user dev-test-server
sudo chmod 775 dev-test-server
sudo chmod 755 start.sh

 

node, pm2, yarn 설치 (버전에 맞게 설치)

cd ~
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.3/install.sh | bash
. ~/.nvm/nvm.sh
nvm install 16
npm -v
npm install pm2 -g
npm install -g yarn

 

3. 빌드 테스트

코드 → develop 자동 빌드 테스트

 

 

pm2가 떠있으면 성공!

 

jenkins 다루면서 오류도 굉장히 많았는데 어떤 오류를 잡았었는지 다음에 하나씩 올리도록 하겠습니다

 

반응형

+ Recent posts