리셋 되지 말자

[Jenkins] Jenkins GitLab 연동(2) Jenkins 설치 및 Jenkins 설정 본문

CI CD

[Jenkins] Jenkins GitLab 연동(2) Jenkins 설치 및 Jenkins 설정

kyeongjun-dev 2021. 2. 24. 18:02

참고 사이트

https://miiingo.tistory.com/170?category=670534 

 

[DevOps] Jenkins를 이용한 자동 빌드 및 배포(1): Jenkins & GitLab 연동

GitLab 컨테이너 실행 GitLab은 서버에 설치해서 사용할 수 있는 git 클라이언트 어플리케이션입니다. 상용버전인 gitlab-EE (Enterprise Edition) 와 무료버전인 gitlab-CE (Community Edition)을 제공하고 있습..

miiingo.tistory.com

감사합니다!

 

Jenkins version : 2.281

 

시스템 구성

CentOS 7 서버의 Docker에 Jenkins를 설치하고 설정한다.

 

포트포워딩

Jenkins : iptime 공유기 -> 23003:8080, Jenkins 컨테이너 -> 8080:8080

 

Jenkins 설치

- jenkins 컨테이너 실행

[root@localhost ~]# docker run -v /var/run/docker.sock:/var/run/docker.sock -v /srv/jenkins/home:/var/jenkins_home -p 8080:8080 --
name=jenkins jenkins/jenkins

jenkins가 설치되는 호스트인 CentOS 7의 docker엔지의 소켓을 열어서 jenkins 컨테이너 내부에서도 도커가 사용 가능하도록 한다.

[error]
Can not write to /var/jenkins_home/copy_reference_file.log. Wrong volume permissions? touch: cannot touch '/var/jenkins_home/copy_reference_file.log': Permission denied

위처럼 Permission 에러가 발생하면, /srv/jenkins/home의 퍼미션을 jenkins 유저가 접근할 수 있도록 권한 설정을 잡아준다.

- /srv/jenkins/home 권한 설정

[root@localhost ~]# sudo chown -R 1000:1000 /srv/jenkins/home/

 

- 기존의 jenkins 컨테이너 삭제 후 재실행

[root@localhost ~]# docker rm jenkins
jenkins
[root@localhost ~]# docker run -v /var/run/docker.sock:/var/run/docker.sock -v /srv/jenkins/home:/var/jenkins_home -p 8080:8080 --name=jenkins jenkins/jenkins

 

젠킨스 설치가 되면 아래그림과 같은 로그가 출력되는 것을 확인할 수 있다.

'904135333e0e46beb885355b7a3c995c'로 확인되는 password를 복사 또는 저장해둔다.

 

- jenkins 페이지 접속

접속하면 위와같은 화면을 확인할 수 있고, 저장해 두었던 password를 입력하고 'Continue'버튼으로 진행한다.

 

좌측의 'Install suggested plugins'를 선택하여 플러그인 설치를 진행한다.

 

플러그인들이 설치되는걸 확인할 수 있다.

 

??? Git은 깔려야 되는데....;; -> 다행히 Retry 후에 다행이 전부 설치 되었음!

설치가 다 되면 Admin User 생성을 할 수 있다. 적당히 안까먹게 적어준다. 이메일 주소는 SMTP로 빌드알림을 메일로 받거나 할게 아니면 이상하게(admin@co.kr) 적어도 상관없다.

 

URL이 맞게 출력되는지 확인한다.

 

젠킨스를 본격적으로 실행한다.

 

젠킨스 대시보드를 확인할 수 있다.

원격 접속 터미널을 끄면, 젠킨스 컨테이너가 꺼질 수 있습니다. 그러면
docker start jenkins 명령어로 컨테이너를 재실행 해줍니다.

 

Jenkins 추가 설정 - 1. docker binary 설치

- jenkins 컨테이너에 root 계정으로 접속

[root@localhost ~]# docker exec -it -u 0 jenkins bash
root@61ad9260759a:/#

젠킨스는 -u 0 옵션 없이 접속하게 되면 기본적으로 생성되는 'jenkins' 계정으로 접속하게 된다.

 

- docker binary 설치

(download.docker.com/linux/static/stable/x86_64/)

위 링크에서 설치 가능한 버전을 확인한 뒤 wget으로 다운로드 한다.(여기서는 18.06.3-ce 버전을 설치

도커 버전 목록

root@61ad9260759a:/# cd ~
root@61ad9260759a:~# wget https://download.docker.com/linux/static/stable/x86_64/docker-18.06.3-ce.tgz

 

- tar로 압축해제

root@61ad9260759a:~# 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/으로 복사 및 컨테이너 접속 종료

root@61ad9260759a:~# cp ./docker/docker /usr/bin/
root@61ad9260759a:~# exit
exit

접속 종료라고 해서 컨테이너 자체가 종료되는게 아니다.

 

- jenkins 계정으로 접속 후 권한 문제 확인

[root@localhost ~]# docker exec -it jenkins bash
jenkins@61ad9260759a:/$ docker --version
Docker version 18.06.3-ce, build d7080c1
jenkins@61ad9260759a:/$ 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가 된다. exit로 컨테이너 접속을 종료한다.

 

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를 확인해보겠습니다.
https://miiingo.tistory.com/170?category=670534
[root@localhost ~]# cat /etc/group | grep docker
docker:x:995:

그룹 아이디인 995를 확인한다.

 

- 그룹 생성 및 추가

# root 계정으로 jenkins 컨테이너에 접속
[root@localhost ~]# docker exec -it -u 0 jenkins bash

# 호스트의 docker 그룹의 아이디로 docker 그룹을 추가
root@61ad9260759a:/# groupadd -g 995 docker

# docker 그룹이 잘 추가되었는지 확인
root@61ad9260759a:/# cat /etc/group | grep docker
docker:x:995:

# docker 그룹에 jenkins 계정을 추가
root@61ad9260759a:/# usermod -aG docker jenkins

# 컨테이너 접속 종료
root@61ad9260759a:/# exit
exit

 

- jenkins 컨테이저 재실행

[root@localhost ~]# docker restart jenkins

 

- jenkins 계정으로 로그인 뒤 docker 명령어 실행 가능여부 확인

[root@localhost ~]# docker exec -it jenkins bash
jenkins@61ad9260759a:/$ docker ps
CONTAINER ID        IMAGE                     COMMAND
      CREATED             STATUS                 PORTS
                                                 NAMES
61ad9260759a        jenkins/jenkins           "/sbin/tini -- /usr/…"   About an hour ago   Up 21 minutes          0.0.0.0:8080->8080/tcp, 50000/tcp                                jenkins
921b45822674        gitlab/gitlab-ce:latest   "/assets/wrapper"        2 hours ago         Up 2 hours (healthy)   0.0.0.0:22->22/tcp, 0.0.0.0:443->443/tcp, 0.0.0.0:9090->80/tcp   gitla

# 컨테이너 접속 종료
jenkins@61ad9260759a:/$ exit
exit

Permission denied가 생기지 않는다.

 

 

Comments