본 포스팅은 CI/CD와 Jenkins에 대해서 다루기 위해 포스팅을 한다.
CI/CD란?
지속적 통합(Continuous Integration)
어플리케이션의 새로운 코드 변경 사항이 정기적으로 빌드 및 테스트 되어
공유 레포지토리에 통합히는 것을 의미한다.
그렇다면 CI가 필요한 환경에는 어떤 조건들이 있을까?
지속적으로 서비스해야 하는 어플리케이션이나 현재 개발 중인 어플리케이션은
기능 추가 시마다 형상관리 도구에 의해 commit 등을 날려 Repository에 버전 업데이트를 하는데, 이 때
다수의 개발자가 한 팀으로 작업할 경우, 이 공유 레포지토리에 수많은 commit들이 쌓이게 된다.
그럴 때마다, 기능별로 빌드/테스트/병합까지 하려면 상당히 번거롭지 않겠는가?
이런 상황에서, 자동화된 빌드&테스트는 원천 소스코드의 충돌 등을 방어하는 Benefit을 제공할 수 있다.
지속적 제공/배포(Continuous Delivery/Deployment)
지속적인 서비스 제공(Continuous Delivery) 및 지속적인 배포(Continuous Deployment)를 의미한다.
그렇다면 CD가 필요한 환경에는 어떤 조건들이 있을까?
지속적으로 서비스해야 하는 어플리케이션이나 현재 개발 중인 어플리케이션은 앞서 말했듯이 CI에 의해 자동으로 빌드&테스트를 하여 소스코드의 충돌 등을 방어하고, 이후 해당 서비스 및 어플리케이션을 배포를 일반적으로 개발자가 서버에 수동으로 빈번하게 배포를 했던 번거러움을 줄이기 위해 자동으로 배포가 되도록 하는 기능이다. 이러한 기능을 제목에서 부터 알다싶이 Jenkins가 도와 준다.
Jenkins? 어떻게 사용하는데? (feat. Docker)
Jenkins(젠킨스)란 앞써 말했듯이 자동으로 지속적인 통합/배포를 도와주는 도구이다.
그렇다면 이러한것을 어떻게 설치 및 세팅을 할까? 아래 내용에서 알아보자.
일단 도커가 해당 PC에 설치가 되어있다는 가정하에 설명을 한다.
1. Jenkins 이미지를 도커에 설치한다.
$ docker pull jenkins/jenkins:lts
2. 설치한 이미지를 기반으로 컨테이너를 만들고 가동시킨다. (추가: 포트포워딩시 xxxx:8080 이여야만 한다.)
$ docker run --name jenkins-docker -d -p 8080:8080 -p 50000:50000 -v /home/jenkins:/var/jenkins_home -v /var/run/docker.sock:/var/run/docker.sock jenkins/jenkins:lts
여기서 중요한것은 "/var/run/docker.sock:/var/run/docker.sock" 이다. 도커로 만든 Jenkins안에서 도커를 공유 받기 위해서는 이와 같은 볼륨이 추가 되어야 한다. 대략적으로 아래 그림과 같다고 생각하면 될것같다.
추가적으로 해당 컨테이너에 docker.io가 설치되어있어야 함으로 아래 명령어를 수행해야만 한다.
su -
apt-get update
apt-get install -y docker.io
3. Jenkins 접속
접속하게 되면 비밀번호 입력을 요구하는데 해당 비밀번호는 이미지에 빨간색 글자로 표시되어 있듯이 해당 경로의 파일을 읽으면 알수 있다.
$ cat /var/lib/jenkins/secrets/initialAdminPassword
4. 이후 아래 이미지 Install suggested pulgins 클릭
위 그림에 왼쪽 버튼 클릭하면 Jenkins에서 제안하는 플러그인들을 모두 설치하게 되고, 이후 사용이 가능하다.