[Jenkins] Install Jenkins on Docker



도커로 Jenkins 설치

준비

설치


docker run --restart=always -d -p 9090:8080 -p 50000:50000 -v /home/jenkins:/var/jenkins_home:z -v /var/run/docker.sock:/var/run/docker.sock --name jenkins -e TZ=Asia/Seoul -u root jenkins/jenkins:2.249.2-lts-jdk11


# 실행 확인
docker ps -a

-v /home/jenkins:/var/jenkins_home:z 의 경우는 일종의 백업 기능으로, 격리된 운영 공간인 컨테이너의 /var/jenkins_home의 젠킨스 운영 공간의 정보를 내 호스트 PC의 /jenkins로 공유하겠다는 의미

해당 설정으로 인해 jenkins 컨테이너를 누군가 갑자기 지우더라도 내 호스트 pc의 /home/jenkins 디렉토리 안에 운영되던 jenkins 데이터가 남아있게 됨

접속확인

ip주소:9090/

//그림1

Admin Passowrd 등록

# jenkins 접속
docker exec -ti jenkins /bin/bash

cat /var/jenkins_home/secrets/initialAdminPassword

cat으로 나온 패스워드를 복사해서 입력

Getting Started

//그림2

//그림3

//그림4

추가 설정

추천 플러그인

  • Build Name and Description Setter
    : 빌드 이름 세팅 플러그인
  • Parameterized Trigger
    : 트리거 시 파라미터값 전달 플러그인

Host docker 소켓을 jenkins 컨테이너와 연동

# 기존 구동중인 Jenkins 컨테이너 중지 및 삭제
docker stop jenkins
docker rm jenkins

#host의 docker.sock과 container의 연동
docker run --restart=always -d -p 9090:8080 -p 50000:50000 -v /home/jenkins:/var/jenkins_home:z -v /var/run/docker.sock:/var/run/docker.sock --name jenkins -e TZ=Asia/Seoul -u root jenkins/jenkins:2.249.2-lts-jdk11

#jenkins 컨테이너에서 docker binary 설치
wget https://get.docker.com/builds/Linux/x86_64/docker-17.05.0-ce.tgz
tar xvfz docker-17.05.0-ce.tgz
cp ./docker/docker /usr/bin/
docker -v

exit

# 권한 설정 (Docker in Docker)
도커 컨테이너 내부에서 Jenkins는 jenkins 유저로 실행됩니다. 이제 jenkins 유저가 docker.sock에 접근할 수 있도록 퍼미션을 잡아줘야 합니다.

cat /etc/group | grep docker

docker exec -it jenkins /bin/bash

groupadd -g 999 docker
cat /etc/group | grep docker
usermod -aG docker jenkins

exit

docker restart jenkins

Jenkins Time 설정

TimeZone 확인방법

jenkins경로/systemInfo에서 user.timezone 확인

cd /var/lib/jenkins
JENKINS_JAVA_OPTIONS="-Dorg.apache.commons.jelly.tags.fmt.timeZone=Asia/Seoul" 입력
http://[jenkins-server]/restart

참고 문서

// docker in docker, docker out docker

https://aidanbae.github.io/code/docker/dinddood/