CI/CD란?
CI : 지속적 통합(Continuous Integration)
Build, Test를 실시하는 프로세스. 이러한 프로세스를 상시로 실시해 주는 것.
개발을 하면서 ‘코드에대한 통합’을 ‘지속적’으로 진행함으로써 품질을 유지
CD : 지속적 배포(Continuous Deploy 또는 Delivery)
짧은 주기로 개발중인 소프트웨어를 배포하고 자동화 하는 것.
소프트웨어가 항상 신뢰 가능한 수준에서 배포될 수 있도록 지속적으로 관리
👉 실제로 어떤 흐름으로 적용시키는걸까?
git에 코드를 push하면 트리거가되어 자동으로 테스트와 빌드를 수행하고, 그 결과를 자동으로 알려준다(CI).
그 결과를 통과한 코드는 테스트서버와 운영서버에 곧바로 그 내용을 배포해 반영한다(CD).
코드 품질관리에 있어서 CI/CD 자동화가 ‘왜’ 필요하며, 이러한 시스템을 구축하는 것이 ‘왜’ 중요한지 생각해 봐야한다.
CI/CD 프로세스를 지원하는 다양한 도구중엔 Jenkins와 Github Actions가 있다.
Github Actions란?
소프트웨어 개발 라이프사이클 안에서 Pull Request, Push 등의 이벤트 발생에 따라 자동화된 작업을 진행할 수 있게 해주는 기능
Workflow, Event, Job, Step, Action, Runner로 구성이 되어있다.
Workflow
- CI / CD 같은 자동화된 프로세스를 만들기 위한 Yaml 파일이다. (확장자로 .yml 이나 .yaml를 붙여야 함)
- workflow > job > step > action 순으로 명시를 해서 파일을 작성해야 한다
Jenkins란?
- 소프트웨어 개발 시 지속적으로 통합 서비스를 제공하는 툴
- 운영체제용 자바 & WAR 아카이브와 설치 패키지, 홈브루 패키지, 도커 이미지, 소스코드 형태로 사용할 수 있다. 젠킨스를 실행하면 웹 화면을 생성하며 REST API 호출로 구동 된다.
- git과 같은 버전관리시스템과 연동하여 코드 변경을 감지하고 자동화 테스트를 수행할 수 있다.
평소 코딩 후 git push를 하고 나서 ec2에 접속해서 git clone으로 갖고 오는 수고로움을 개선하고자 자동으로 배포하는 환경을 구축해보았다.
배포 환경은 ec2 / jenkins 서버를 따로 구매를 했다. (iwinv는 사랑)
1. iwinv에서 서버를 구입 할 때 Docker가 포함된 서버를 구매
2. Docker에서 jenkins 설치
3. jenkins 접속 환경 설정(여기서 많이 삽질함)
1) 새로운 item 생성 (본인 프로젝트 이름으로)
2) deploy > 구성 >
- General에 project url 적기
- 소스코드관리 > Git 선택 후 저장소 추가
- 빌드 유발 > GitHub hook trigger for GITScm polling 체크
Private Repository 경우는 어떻게 하나요?
Jenkins가 사용할 수 있는 SSH-key를 만들어 GitHub에 SSH-key에 등록해주어야 함
4. 젠킨스 서버 host로 접근해서 설정 / 모듈설치(git 연동하기 / ec2로 배포하기 위해서 연동하기) 1) github에 들어가서 auth 키 발급 => jenkins 에서 빌드 설정
2) 시스템 설정 > Plugin Manager > Publish Over SSH 설치
3) Configure System > Publish Over SSH > ec2 접속 ip 및 username 을 적어준다
4) aws ec2 pem 키 찾아서 메모장으로 오픈 => Jenkins에서 [고급..] 버튼을 누르고 붙여넣기
5) deploy > 구성 > Build
빌드 시 생성된 파일을 SSH Publisher를 이용하여 SFTP 전송하고, 그후, Exec command로 배포 하도록 설정
5. git에서 webhook 설정하기
대상 repository > setting > Webhooks
Payload URL에 http://젠킨스서버IP/github-webhook/ 을 적어준다
6. 실제로 push해서 반영되는지 확인하기
7. ec2에도 배포되는지 확인 (여기서 삽질 => 디렉토리 확인을 잘하자!!!)
부족한 부분이 많습니다!! 개선중!!
도움을 받은 곳들!!
https://docs.github.com/ja/authentication/connecting-to-github-with-ssh
https://woodcock.tistory.com/20