드디어 6월 달에 마친 인턴 생활동안 공부한 것 정리를 마친다.
이외에도 Truffle, IPFS, Swarm, Sonarqube 등 다양한 플랫폼들을 공부하긴 했지만 적기에는 내용이 빈약해서... 후에 이 기술들이 더 발전하면 포스팅해도 될 것 같다.
이후에는 아마 비트코인 구조와 그 동안 진행한 졸업프로젝트에서 사용했던 하이퍼레저 패브릭 2.2에 대해서 포스팅할 것 같다.
마지막 내용인 Jenkins에 대한 포스팅이다. 우선 CI/CD 가 무엇인지 알아보자.
해당 포스팅은 Node.js 기반 프로젝트 배포를 위해 실제로 사용했던 방법과 고찰들을 서술한 것임을 고려해야 한다.
지속적인 통합이란 뜻으로, 개발자를 위한 자동화 프로세스 중 하나이며 어플리케이션을 변경할 때 자동으로 빌드 및 테스트 되어 Github 공유 레포지토리에 병합된다.
다수의 개발자들이 하나의 프로그램을 개발할 때 버전 충돌을 방지하기 위해 각자 작업한 내용을 공유영역에 있는 저장소에 빈번히 업로드함으로써 지속적인 통합 가능하게 한다.
CI 툴이 등장 전에는 일정시간마다 빌드 실행 방식이 일반적이었다.
주로 이러한 행동들이 있어야 CI 라 할 수 있다.
소프트웨어가 언제든지 신뢰 가능한 수준으로 출시 될 수 있도록 보증하기 위함이다. 지속적인 배포, 어플리케이션 변경 사항이 공유 레포지토리에서 사용자가 사용 가능한 환경까지 자동으로 배포하는 것이고, 사용자의 피드백 빠르게 반영한다.
소프트웨어를 더 빠르게, 더 주기적으로 빌드하고 테스트하고 출시하는 것을 목표로 하고, 더 많은 증분 업데이트를 업무 애플리케이션에 적용할 수 있게 함으로써 변경사항의 배포에 대한 비용, 시간, 위험을 줄일 수 있게 한다.
짧은 주기로 개발중인 소프트웨어 배포하고 그 과정 자동화 한다.
젠킨스는 서브버전, git 같은 버전관리시스템과 연동해 커밋 감지 시 자동적으로 자동화 테스트가 포함된 빌드 작동되도록 설정한다.
이점
Docker + Jenkins Workflow
ngrok: Secure tunnels to localhost 방화벽 넘어서 외부에서 로컬에 접속 가능하게 하는 터널 프로그램 (로컬 테스트 용)
ngrok http 3000 -- 127.0.0.1:3000
docker pull jenkins/jenkins:lts (일반 jenkins 이미지는 plugin 설치 안되는 에러)
docker run -d -p 8080:8080 -v /home/deploy/jenkins:/var/jenkins_home --name jenkins -u root jenkins/jenkins:lts (-v 옵션 host 디렉토리:container 디렉토리 연결)
(stop 상태에서는) docker start jenkins
(터미널 접속 시) docker exec -it jenkins /bin/bash
젠킨스 서버 8080로 실행 후 추천 Plugin 설치 옵션으로 설치한다.
추가로
ssh-keygen -t rsa
ssh-keyscan -H (NAVER CLOUD 서버)ip >> ~/.ssh/known_hosts
vi ~/.ssh/authorized_keys
chmod 700 ~/.ssh
chmod 600 ~/.ssh/id_rsa
chmod 644 ~/.ssh/id_rsa.pub
chmod 644 ~/.ssh/authorized_keys
chmod 644 ~/.ssh/known_hosts
Path to Key 에 Jenkins 서버 개인키 PathGithub 계정 토큰 설정
계정 Settings > Developer settings > Personal access tokens > Generate new token > repo, admin:repo_hook 체크 후 생성
Github Hook 사용 경우 (push 시 자동 빌드)
Poll SCM 사용 경우 - X
아이템 생성 후 저장소 연결하기 (SSH 이용) 또는 아이템 구성 들어가기.
Github 홈페이지
Github Private Repository Setting: SSH Key 세팅 (Docker Jenkins Server에 접속해
ssh-keygen
cat /.ssh/id_rsa
Option) Webhook 설정: Repo > Settings > Webhook > http://JENKIN'S SERVER/github-webhook/
url로 지정 해주고 Active.
Jenkins
소스 코드 관리 탭에서 Github Credentials - Private Key, ID 로 저장. (Github 저장소에 Publick Key 있어야함.) 이 때 저장소 주소는 ssh 주소로 해주기.
빌드 유발 탭
Github hook trigger for GITScm polling 선택. (Webhook 사용 경우)
Poll SCM: Git 이 바라보는 브랜치에서 커밋같은 변화 감지하면 자동 빌드 후 배포.
15분 간격으로 빌드 작업을 수행: H/15 * * * *
모든 시간의 첫 30분 동안에 10분 간격으로 빌드를 수행: H(0-29)/10 * * * *
주말을 제외한 주중에 9시부터 16시 사이에 2시간에 한번씩 빌드를 수행: H 9-16/2 * * 1-5
12월 달은 제외하고 매달 1일과 15일에 한번씩 빌드를 수행: H H 1,15 1-11 *
Build: Execute managed script 사용: 현재 스크립트 - Restart API