프로젝트의 규모가 클수록 코드 작성부터 통합까지의 단계를 자동화해주는 CI의 필요가 커집니다.
진행중인 e-commerce 프로젝트는 대용량 서버라는 가정하에 진행되었습니다. 때문에 코드의 변경사항에 대해 테스트, 빌드, 통합하는 과정을 자동화하는 CI를 사용한다면 시간을 많이 단축시킬 수 있습니다.
CI툴로는 Jenkins를 이용하였고, jenkins에 접속하여 깃허브와 연동하여 CI를 구축하는 과정을 정리해보려고 합니다.
참고 ) https://www.ncloud.com/guideCenter/guide/9
isieun@isieun-ui-MacBookPro ~ % ssh [서버 사용자 ID]@[서버 접속 IP]-p [포트번호]
The authenticity of host '~~' can't be established.
ECDSA key fingerprint is SHA256:~~.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes // ssh연결을 위한 key발행 및 연결 계속할지 여부 확인
Warning: Permanently added '~~' (ECDSA) to the list of known hosts.
root@~~'s password: // 패스워드 입력
[root@jenkins-server ~]#
[root@jenkins-server ~]# passwd root
root 사용자의 비밀 번호 변경 중
새 암호:
새 암호 재입력:
passwd: 모든 인증 토큰이 성공적으로 업데이트 되었습니다.
[root@jenkins-server ~]# service jenkins start // Jenkins 프로세스 실행
Starting jenkins (via systemctl): [ OK ]
[root@jenkins-server ~]#
Administrator password
에 초기 패스워드를 입력하시면 됩니다.
초기 패스워드는 jenkins 터미널에서 아래의 명령어를 통해 알 수 있습니다.
cat /var/lib/jenkins/secrets/initialAdminPassword
설정 문제가 생겼을 때, 더 빠른 해결을 위해 Jenkins 커뮤니티에서 해결이 가능한 install suggested plugins를 선택하였습니다.
여기까지 진행하시면 다음 화면과 같이 jenkins에 접속하실 수 있습니다.
jenkins는 기본으로 보안 설정이 되어있지 않아 따로 설정을 해주어야 합니다.
jenkins 관리
클릭 → security
→ configure Global Security
클릭Add user...
클릭 - 계정 생성 - 권한 부여 작업자인 계정만 모든 권한 부여 (필요시 팀원을 추가하여 진행하면 됩니다)save
클릭jenkins 관리
클릭 → 플러그인 관리
클릭설치할 플러그인을 검색하시면 됩니다.
global slack notifier
- 슬랙과 연동하여 알림을 설정할 수 있습니다.embeded build status
- github repository에 빌드 상태바를 생성합니다.jenkins관리
→ 시스템 설정
→ GitHub
Add GitHub Server
클릭Name
, Credentials
설정하기Credentials
은 Add
를 클릭하여 아래와 같이 추가Secret
부분은 아래와 같이 진행하여 입력하면 됩니다.
자신의 github
→settings
→Developer settings
→Personal access tockens
→Generate new tocken
클릭
repo
와admin:repo_hook
체크Generate tocken
클릭- 발행 후에 생성된
secret
을 복사하여 사용하면 됩니다.
github repository 주소 입력
빌드할 branch 설정
jenkins terminal에서 아래처럼 명령어 입력
[root@jenkins-server2 ~]# ssh-keygen -t rsa -f id_rsa
Generating public/private rsa key pair.
Enter passphrase (empty for no passphras e):
Enter same passphrase again:
...
[root@jenkins-server ~]# ls
id_rsa id_rsa.pub
[root@jenkins-server ~]# mkdir .ssh
[root@jenkins-server ~]# ls
id_rsa id_rsa.pub
[root@jenkins-server ~]# mv id_rsa .ssh
[root@jenkins-server ~]# mv id_rsa.pub .ssh
[root@jenkins-server ~]# ls
[root@jenkins-server ~]# cd .ssh
[root@jenkins-server .ssh]# ls
id_rsa id_rsa.pub
[root@jenkins-server .ssh]# cat ~/.ssh/id_rsa // private key 확인
mkdir로 .ssh 디렉토리를 만들어 이동시킨 이유는 ssh키 관리를 위함
마지막 명령어로 확인한 private key 처음부터 끝까지를 복사
Credentials → Add
클릭
Private Key
→ Enter directly
→ Add
클릭[root@jenkins-server .ssh]# cat ~/.ssh/id_rsa.pub //public key 확인
Settings
→ Deploy keys
→ Add
클릭Key
공란에 붙여넣기GitHub hook trigger for GITScm polling
선택Settings
→ Webhooks
→ Add Webhook
클릭Add webhook
클릭기존 코드를 빌드해보면 오른쪽 화면과 같이 빌드가 성공합니다. 또한 push가 일어나면 Jenkins프로젝트에 빌드가 자동으로 이루어집니다.
CI툴로 유명한 Jenkins를 다루어보면서, Jenkins에서 제공하는 기능이 많다는 것을 알게되었습니다. 프로젝트의 크기가 커질수록 CI/CD가 중요해지기 때문에 Jenkins가 제공하는 기능들에 대해 좀 더 알아야 할 필요가있다 생각하였습니다. 특히나 파이프라인 구축이나 slack알림 연동도 추후에 진행해 볼 예정입니다.
https://www.jenkins.io/doc/book/installing/macos/
https://zin0-0.tistory.com/268?category=923002
https://velog.io/@doyuni/Jenkins-NAVER-Cloud-Platform-Docker%EB%A1%9C-CICD-%EB%AC%B4%EC%A4%91%EB%8B%A8-%EB%B0%B0%ED%8F%AC-%ED%99%98%EA%B2%BD-%EA%B5%AC%EC%B6%95%ED%95%98%EA%B8%B0-1%ED%8E%B8-khk4w6hrm0