jenkins doc 참고 https://www.jenkins.io/doc/book/installing/
jenkins 설치
1. jenkins image pull
mkdir jenkins
cd jenkins/
docker pull jenkins/jenkins먼저 이미지를 docker hub에서 받아온다.
2. jenkins compose.yml 생성
jenkins 하위 에서 volume 생성
mkdir volume
vi docker-compose.yamldocker-compose.yaml 내용
version: '3.1'
services:
jenkins:
restart: always
container_name: jenkins
image: jenkins/jenkins
ports:
- "8080:8080"
volumes:
- "$PWD/volume:/var/jenkins_home"
- "/var/run/docker.sock:/var/run/docker.sock" Info
> 컨테이너 내에서 명령어를 실행할 사용자 = root
호스트의 8080 포트를 jenkins의 8080 이랑 매칭
현재 디렉토리의 ‘volume’ 디렉토리를 ‘/var/jenkins_home’에 마운트 ⇒ Jenkins 데이터를 호스트저장하고, 컨테이너 재시작 시에도 데이터 유지 가능
‘/var/run/docker.sock:/var/run/docker.sock’ : 호스트의 Docker 소켓 파일을 컨테이너 내에 마운트!!
Important
Jenkins 컨테이너 내에서 Docker 명령어를 실행할 수 있다.
3. 실행
sudo chown -R 1000:1000 $PWD/volume
docker-compose up -d
docker ps 해도 됌

Info
Jenkins 컨테이너가 생성되면 jenkins 사용자는 UID를 1000을 갖게된다. 따라서 컨테이너가 죽었다가 재실행 하게 되면 mount 시켯어 volume 을 사용하게 되는데 이때 해당 volume 디렉토리는 UID를 1000으로 줬기 때문에 기존 정보를 끌어다가 Jenkins를 사용하게 된다.
4. 비번 확인
root@control:~# docker logs -f jenkins
*************************************************************
Jenkins initial setup is required. An admin user has been created and a password generated.
Please use the following password to proceed to installation:
8f603757277a443e801c98a473e03420
This may also be found at: /var/jenkins_home/secrets/initialAdminPassword
*************************************************************5. 비번 입력 후 행동절차
-
plug-in 설치

-
계정 설정
root 로 만들어봐 -
url

접속완료

6. Jenkins 추가 설정 - 1. docker binary 설치
Info
Docker binary는 Docker를 실행하는 데 필요한 실행 파일들을 의미한다. 실행 파일들은 Docker 데몬과 클라이언트를 포함하며, Docker의 핵심 기능을 제공한다.
-
jenkins 컨테이너에 root 계정으로 접속
root@ubuntu:~# docker exec -it -u 0 jenkins bash root@038095416cc5:/#- docker exec : 실행중인 Docker 컨테이너에서 명령어 실행
- ‘-it’ : -i는 인터랙티브 모드로, 표준 입력을 활성화하여 사용자가 입력할 수 있도록 하고, -t 는 TTY(가상 터미널)를 할당해 사용자가 접속한 터미널에서 명령 할 수 있게 한다.
- ‘-u 0’ : 사용자 ID 인데, 0은 루트사용자(관리자)를 의미한다. 0 없이 접속하면 기본적으로 생성되는 ‘jenkins’ 계정으로 접속하게 됨
-
docker binary 설치
(download.docker.com/linux/static/stable/x86_64/)
위 링크에서 설치 가능한 버전을 확인한 뒤 wget으로 다운로드 한다.(여기서는 18.06.3-ce 버전을 설치
root@038095416cc5:/# cd ~ apt-get update apt-get install -y wget wget https://download.docker.com/linux/static/stable/x86_64/docker-18.06.3-ce.tgz
-
tar로 압축파일 해제
root@038095416cc5:~# tar xvfz docker-18.06.3-ce.tgz docker/ docker/docker-containerd docker/docker-proxy docker/docker docker/docker-runc docker/dockerd docker/docker-containerd-ctr docker/docker-containerd-shim docker/docker-init -
docker 파일을 /usr/bin/으로 복사 및 컨테이너 접속 종료
Info
Docker 자체는 Docker Daemon이라는 백그라운드 서비스를 실행하여 컨테이너를 관리하고, Docker CLI를 통해 사용자가 Docker Daemon과 상호작용할 수 있다.
Jenkins 서버에서 Docker CLI 명령어를 실행할 수 있어야 한다!!
그래서
/usr/bin/과 같은 실행 경로에 Docker CLI 바이너리를 복사하는 것이다.
cp ./docker/docker /usr/bin/
exit-
jenkins 계정으로 접속 후 권한 문제 확인
root@ubuntu:~# docker exec -it jenkins bash jenkins@038095416cc5:/$ docker --version Docker version 18.06.3-ce, build d7080c1 jenkins@6ffa54b72b46:/$ docker ps Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get http://%2Fvar%2Frun%2Fdocker.sock/v1.38/containers/json: dial unix /var/run/docker.sock: connect: permission denied-u 0 옵션 없이 로그인하면 위와 같이 jenkins 계정으로 로그인이 된다. 이 상태에서 ‘docker ps’ 등의 명령어를 사용하면 Permission denied가 된다.
7. Jenkins 추가 설정 - 2. Permission 설정
-
CentOS 7 서버(호스트)의 docker gid 확인
도커 컨테이너 내부에서 Jenkins는 jenkins 유저로 실행됩니다. 이제 jenkins 유저가 docker.sock에 접근할 수 있도록 퍼미션을 잡아줘야 합니다.
먼저 docker.sock파일은 host 에서 root유저와 docker 그룹으로 owner가 설정되어 있습니다. jenkins가 docker.sock파일에 접근하기 위해서는 docker group에 포함시켜 줘야 합니다.
우선 호스트에서 docker group의 gid를 확인해보겠습니다.
root@ubuntu:~# cat /etc/group | grep docker docker:x:998:user1 -
그룹 생성 및 추가
# root 계정으로 jenkins 컨테이너에 접속 root@ubuntu:~# docker exec -it -u 0 jenkins bash # 호스트의 docker 그룹의 아이디로 docker 그룹을 추가 root@038095416cc5:/# groupadd -g 998 docker # docker 그룹이 잘 추가되었는지 확인 root@038095416cc5:/# cat /etc/group | grep docker docker:x:998: # docker 그룹에 jenkins 계정을 추가 root@038095416cc5:/# usermod -aG docker jenkins # 컨테이너 접속 종료 root@038095416cc5:/# exit exit -
jenkins 컨테이저 재실행
root@ubuntu:~# docker restart jenkins jenkins -
jenkins 계정으로 로그인 뒤 docker 명령어 실행 가능여부 확인
-
안된다.
-