Continuous Integration (CI): 코드 변경이 발생할 때마다 자동으로 소프트웨어를 빌드하고 테스트하여 개발자들이 통합 오류를 빠르게 발견하고 수정할 수 있는 프로세스입니다.
Continuous Delivery (CD): 소프트웨어를 언제든지 프로덕션 환경으로 배포할 수 있는 상태로 유지하는 프로세스입니다.
Continuous Deployment (CD): 모든 변경 사항이 자동으로 프로덕션 환경으로 배포되는 프로세스입니다.
Apache에 비해 Nginx가 더 경량화 되고, 동적 컨텐츠에 대한 속도는 비슷한 반면 정적 컨텐츠 서빙에 대한 속도가 Nginx가 약 2.5배 더 높다고 한다.
Github를 사용하는 경우, Github Action이 더 쓰기는 편하지만, Private Repository를 사용하는 경우 무료가 아니며, Jenkins 관련 자료를 찾는 것이 더 쉬움.
대략적인 아키텍처는 다음과 같다. 아직 준비 단계이기 때문에 상황과 목적에 따라 추후 변경될 가능성이 크다.



이전 포스팅에서 다뤘으므로 스킵해도 좋다.
apt 패키지 업데이트
sudo apt update
Nginx 설치
sudo apt install nginx
Nginx 서비스 시작
sudo systemctl start nginx
부팅 시 자동으로 시작되도록 설정
sudo systemctl enable nginx
Nginx 상태 확인
sudo systemctl status nginx
이제 conf파일을 수정하여 Nginx에게 역할을 주어야 한다
server{
listen 80;
server_name {내 EC2 서버 도메인};
root /home/ubuntu/jenkins_home/workspace/ProjARJS;
index index.html;
location / {
try_files $uri $uri/ =404;
}
}
server {
listen 8080;
server_name {내 EC2 서버 도메인};
location / {
proxy_pass {리버스프록시할 백엔드 EC2 서버 도메인};
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
Nginx 변경 사항 적용
sudo nginx -s reload
도커가 설치되었다고 가정합니다. 먼저 도커를 설치해주세요. Jenkins는 설치상의 편의를 위해 컨테이너에 올릴 것입니다.
도커 파일 편집
sudo nano /etc/default/docker
이후
DOCKER_OPTS="--restart=always"
해당 줄 수정
도커 재시작
sudo service docker restart
젠킨스 설치 및 자동 시작 설정, 볼륨 할당
docker run -d --restart=always -p 9090:8080 -v jenkins_home:/var/jenkins_home --name jenkins jenkins/jenkins:lts
jenkins_home와 컨테이너의 /var/jenkins_home을 공유하도록 합니다.jenkins로 설정합니다.젠킨스 설정 시작
젠킨스가 설치되었으므로 브라우저에서 설치된 EC2의 도메인의 9090포트에 접속합니다.
잠시 기다리면 위 화면이 나오는데,
sudo docker exec -it jenkins bash
위 명령어를 통해 jenkins container에 bash쉘로 접속합니다.
cat /var/jenkins_home/secrets/initialAdminPassword
위 명령어를 통해 비밀번호를 복사하여 화면에 입력해줍니다.
이후 계정을 만들어도 되고, 그냥 스킵하여 어드민 계정을 써도 됩니다. 계정을 만들어 놓는 것을 추천합니다
젠킨스 구성
Jenkins 관리 -> System으로 들어갑니다.
쭉 내려 Github Server에서 Credentials의 Add버튼을 클릭합니다.
Secret Text를 선택하고 Secret에 Github Personal Access Token을 입력합니다.
이때 해당 토큰은 repo, admin:org, admin:repo_hook 권한이 필요합니다.
그리고 방금 만든 Credential을 적용해줍니다.
새로운 Item
화면 좌측의 "새로운 Item"을 선택하고 아이템 이름을 입력한 뒤, Freestyle project를 선택하고 OK
General -> project url에 깃허브 레포 주소를 적습니다. (.git은 빼고)
Repository URL에 .git을 포함한 레포 경로를 입력하고 Credential을 다시 만듭니다.
저의 경우는 아까 만든 Secret text가 안나와서 다시 만들었으나 문제가 없다면 아까걸 다시 써도 무방합니다.
이번엔 Secret text가 아닌 Username with password를 선택하고 Username에 자신의 github 닉네임을 적고 password에 아까쓴 토큰을 적으면 됩니다. 해당 Credential을 적용하고,
빌드 유발에서 Github hook trigger for GITScm polling에 체크합니다.
Github Repo 설정
이제 마지막으로 Github레포지토리에서 다음 설정을 변경합니다.
CI를 적용할 레포지토리 -> settings -> webhooks -> Add webhook
Payload URL에 서버 도메인과 포트번호, 뒤에는 /github_webhook/을 입력하고 Content type을 application/json으로 변경한뒤 저장합니다.
이후 젠킨스에서 빌드 테스트 하면 된다. 예를 들어, spring boot 프로젝트라면 item의 build steps -> Execute shell에서 ./gradlew build 등의 스크립트를 추가해주면 된다.