Note:
- 젠킨스(Jenkins)는 소프트웨어 개발 시 지속적 통합(continuous integration) 서비스를 제공하는 툴이다.
- 다수의 개발자들이 하나의 프로그램을 개발할 때 버전 충돌을 방지하기 위해 각자 작업한 내용을 공유 영역에 있는 Git등의 저장소에 빈번히 업로드함으로써 지속적 통합이 가능하도록 해 준다. MIT 라이선스를 따른다.
도커를 이용해서 설치를 하기위해서는 일단 도커허브에 젠킨스 관련 이미지가 있는지
검색을 해봐야 한다.
docker search jenkins
검색 후 에 우리가 사용할 선택을 해준다.
하지만 이번 포스팅에서는 jenkins/jenkins:lts 이미지를 사용하려고 한다.
pull
을 받아보자
docker pull jenkins/jenkins:lts
pull
을 받았으면 한번 확인을 해주어야 된다.
물론 확인을 안해도 무방하다.
docker images
이미지 확인이 끝났다면 다음은 이미지를 컨테이너로 올리려고 한다.
아래의 명령어로 올리면 된다.
포트 설정이나 이름 그리고 볼륨의 경우 입맛에 따라 사용을 하면된다.
docker run -d -p 8181:8080 -v /jenkins:/var/jenkins_home --name jm_jenkins -u root jenkins/jenkins:lts
간단한 도커 옵션에 대한 설명이다.
-d 백그라운드 모드 옵션
-p 포트 연결
xxxx:yyyy 여기서 앞서 사용하는 포트가 우리가 서버에서 사용할 포트이며
뒤에서의 yyyy의 경우 컨테이너에서 나오는 포트이다.
-v 디렉토리 연결
컨테이너와 현재 우리가 사용할 디텍토리를 연결해준다. 컨테이너에서 디렉토리가 변경이되면
연결되어 있는 사용하는 디렉토리에서 변경이되며 반대의 경우도 성립이된다.
-name 컨테이너 이름/알리야스
-u 실행할 사용자 지정
컨테이너에 들어갈시 사용자 지정 root/jenkins 기타.. 가있다.
그 다음으로 이제 브라우저로 가서 진행을 하려고 한다.
우리가 설정을 했던 포트로 브라우저에서 실행을 하면된다.
그러면 아래와 같이 비밀번호를 넣어달라고 하는데
기존에 젠킨스의 경우 폴더에 입력이 되어있다.
하지만 이번 포스트의 경우 도커로 이용을 하기 때문에 컨테이너에 들어가서 폴더에 들어가서 이런 작업을 한는게 아닌 docker logs
을 이용하려고 한다.
docker logs [컨테이너ID]
그러면 아래와 같이 나오는데 로그를 잘 살펴보면 패스워드가 적혀있다.
그것을 넣어주면 된다.
이 후에 아래와 같은 화면이 나오는데 왼쪽 버튼을 눌러주면 된다.
그러면 자동으로 인스톨며 후에 아이디와 패스워드를 설정을 하면 마무리가 된다.
Q1. 도커 이미지로 올릴 시 docker 로 올린 jeknins 의 경우 jeknis 에 도커가 없다면
젠킨스 내에 도커를 사용을 하지 못한다.
A1. 젠킨슨 컨테이너에 도커가 없기 때문에 여러가지 방법을 선택이 가능하다.
일단
기존에 볼륨을 아래와 같이 추가를 해주면 도커가 정상적으로 젠킨스내에 작동이된다.
-v /var/run/docker.sock:/var/run/docker.sock
-v /usr/bin/docker:/usr/bin/docker
Q2. 젠킨슨내에서 도커명령어로 구성을 하였을때 libltdl.so.7 error 가 발생이 된다.
docker: error while loading shared libraries: /usr/lib/x86_64-linux-gnu/libltdl.so.7: cannot read file data: Error 21
A2. 이 경우에 루트 서버에서 dockerfile을 만들어서 해결을 해주었다.
아래와 같이 도커 파일을 만들어서 새로 빌드해서 사용을 했다.
FROM jenkins/jenkins:latest
USER root
RUN apt-get update \
&& apt-get upgrade -y \
&& apt-get install -y sudo libltdl-dev libnss3 \
&& rm -rf /var/lib/apt/lists/*
RUN echo "jenkins ALL=NOPASSWD: ALL" >> /etc/sudoers
USER jenkins
아래와 같은 명령어로 새로 젠킨스 컨테이너를 실행을 해주면 해결이 가능하다.
docker build -t doc_indoc .
docker run --name jenkins -d -p 8080:8080 -p 50000:50000 -v /var/run/docker.sock:/var/run/docker.sock -v $(which docker):$(which docker) doc_indoc