ec2 서버에 직접 jenkins를 설치하는 방법도 있지만 필자는 docker를 이용해 이미지를 pull하여 jenkins를 설치해보고 싶었다. 그 방법을 정리해봤다.
Docker는 컨테이너 기반의 오픈 소스 플랫폼으로, 소프트웨어를 패키지로 만들어서 실행하는데 사용됩니다. 이렇게 패키지화된 소프트웨어를 컨테이너라고 부르며, 각 컨테이너는 코드, 런타임, 시스템 도구 등 해당 소프트웨어를 실행하는데 필요한 모든 것을 포함합니다. 이런 방식은 개발자가 작성한 코드가 어떤 환경에서도 같은 방식으로 동작할 수 있도록 보장해줍니다.
jenkins는 지속적인 통합(Continuous Integration) 및 지속적인 배포(Continuous Deployment)을 가능하게 하는 오픈소스 자동화 서버입니다. Jenkins를 사용하면 개발 중에 발생할 수 있는 다양한 타입의 스크립트를 실행하여 새로운 코드 변경사항들에 대해 자동으로 빌드와 테스트 과정을 거칠 수 있습니다.
sudo yum update # yum 패키지 업데이트
sudo yum install docker # docker 설치
sudo docker -v # 설치된 docker 버전 확인
sudo service docker start # docker 서비스 실행
systemctl status docker.service #docker 서비스 실행 확인
sudo usermod -a -G docker ec2-user #ec2-user 권한 설정
sudo usermod -a -G docker root
sudo service docker restart # 도커 서비스 재실행
docker 허브에 접속 후 jenkins를 검색한다.
sudo docker pull jenkins/jenkins:lts # docker jenkins 이미지 pull
sudo docker images # 로컬에 존재하는 docker images 확인
sudo docker run -d -p 8000:8080 -v /jenkins:/var/jenkins_home -v /var/run/docker.sock:/var/run/docker.sock --name jenkins -u root jenkins/jenkins:lts
sudo
: 이 명령어는 'superuser do'의 줄임말로, 리눅스에서 root 사용자 권한으로 명령을 실행하도록 합니다. Docker를 실행하는데 필요한 권한을 부여받기 위해 사용합니다.
docker run
: Docker 컨테이너를 시작하는 명령어입니다.
-d
: 이 옵션은 'detached mode' 또는 'background mode'라고 불리며, 컨테이너를 백그라운드에서 실행하고 컨테이너 ID를 출력합니다.
-p 8000:8080
: 호스트 시스템의 포트 8000을 컨테이너의 포트 8080에 바인딩합니다. 이렇게 하면 호스트 시스템에서 접근 가능한 서비스를 제공할 수 있습니다.
-v /jenkins:/var/jenkins_home
: 호스트 시스템의 /jenkins
디렉터리와 컨테이너 내부의 /var/jenkins_home
디렉터리를 연결(volumes)합니다. 즉, 데이터가 호스트와 컨테이너 사이에 공유됩니다.
-v /var/run/docker.sock:/var/run/docker.sock
: 도커 소켓 파일인 /var/run/docker.sock
을 컨테이너 내부와 연결합니다. 이는 Jenkins가 도커 CLI 명령어에 액세스하여 다른 도커 이미지나 컨테이너 등을 관리할 수 있게 해줍니다.
--name jenkins
: 생성되는 Docker 컨테이너 이름을 "jenkins"로 설정합니다.
-u root
: Jenkins 프로세스가 root 사용자로 실행되도록 합니다.
jenkins/jenkins:lts
: Docker Hub에서 가져올 이미지 이름입니다. 여기서는 LTS(Long Term Support) 버전의 Jenkins 이미지를 가져오게 됩니다.
따라서 전체적으로 본다면, 위의 명령은 "root 권한으로 Jenkins LTS 버전 이미지를 기반으로 한 Docker 컨테이너를 백그라운드에서 실행하며, 호스트의 8000 포트와 컨테이너의 8080 포트를 연결하고, /jenkins
디렉터리와 Docker 소켓을 컨테이너에 마운트하며, 컨테이너 이름을 'jenkins'로 설정한다"라는 의미이다.
docker ps # 실행되고 있는 컨테이너 목록
docker ps -a # 실행되고 있지 않는 컨테이너도 포함한 목록
접속 주소는 AWS 인스턴스 IPv4:jenkins 포트번호(8000) 이다. IPv4:PORT
최초로 접속 시 요구하는 패스워드가 존재한다.
위에서 요구하는 패스워드는 도커 컨테이너 안에 특정파일 안에 존재한다.
# docker의 jenkins 컨테이너로 접속하여 /var/jenkins_home/secrets/initialAdminPassword 읽기
$ docker exec jenkins cat /var/jenkins_home/secrets/initialAdminPassword
Install suggested plugins
선택하여 플러그인을 설치한다.
Admin
계정을 생성한다. (까먹지 않도록 유의 !!)
Jenkins URL
이 ec2 인스턴스의 퍼블릭 IPv4:PORT
와 동일한지 확인 한 뒤 Save and Finish를 선택한다.
위와 같은 화면이 나왔다면 성공한 것이다.
docker start [컨테이너ID or 컨테이너Name] # 컨테이너 실행
docker stop [컨테이너ID or 컨테이너Name] # 컨테이너 중지
docker rm [컨테이너ID or 컨테이너Name] # 컨테이너 삭제
다음엔
GitHub Webhook
을 이용하여Repository
와Jenkins
와 연결 후 push가 감지되면 자동으로build
될 수 있게 설정해 볼 것이다.