도커를 이용한 Jenkins 설치

Woody의 기록·2023년 8월 15일
2

Jenkins 이미지 pull

우선 도커에서 Jenkins LTS 버전을 다운로드 한다.

$ docker pull jenkins/jenkins:lts
lts: Pulling from jenkins/jenkins
29279ac7c19f: Pull complete
63ffab5ed024: Pull complete
12b43c34bdce: Pull complete
34dd061580d8: Pull complete
6ab629299c3e: Pull complete
d1dfcf1542f8: Pull complete
38cc7dc6b328: Pull complete
47dacf9c49ac: Pull complete
c1ace3b468a5: Pull complete
5f195f15d9b9: Pull complete
3fc4cd638f13: Pull complete
e30c04944ccd: Pull complete
5116f0e929e9: Pull complete
Digest: sha256:31ae1763024448a78c2225a05b81817bf877e34fce971e7422f9315b36b073c2
Status: Downloaded newer image for jenkins/jenkins:lts
docker.io/jenkins/jenkins:lts

이미지 확인

이미지가 잘 받아졌는지 확인한다.

~  docker images                                                                127 err | 20:23:05
REPOSITORY                 TAG       IMAGE ID       CREATED        SIZE
jenkins/jenkins            lts       f7a9278ee82a   2 weeks ago    461MB

jenkins 이미지가 정상적으로 pull 된 것을 확인할 수 있다.

컨테이너를 생성하고 실행하기

$ docker run -itd \
--name jenkins_container \
-p 8888:8080 \
-v ~/Desktop/jenkins_home:/var/jenkins_home \
-u root \
f7a9278ee82a
74e97ca0db1fa1c336b99994079488b680a7770d40c38d60bdba19e44af080
  1. docker run: Docker 컨테이너를 실행하는 명령어이다.
  2. itd: 다음 세 가지 플래그의 조합이다.
    • i: 컨테이너와 상호작용하기 위해 STDIN을 여는 옵션
    • t: tty(터미널)를 할당하여 컨테이너 내부에서 작업을 수행할 수 있도록 하는 옵션
    • d: 컨테이너를 백그라운드에서 실행할 수 있게 하는 옵션
  3. p 8888:8080: 호스트의 8888 포트를 컨테이너의 8080 포트로 포트 포워딩한다. 따라서 호스트의 8888 포트로 접근하면 컨테이너의 8080 포트로 연결된다.
  4. -v /jenkins:/var/jenkins_home: 호스트의 ~/Desktop/jenkins_home 디렉토리를 컨테이너의 /var/jenkins_home 디렉토리와 마운트한다. 따라서 내부에서 생성되는 Jenkins 설정 파일 및 데이터 등이 호스트의 ~/Desktop/jenkins_home 디렉토리에 저장되게 된다.
  5. -name jenkins_container: 컨테이너의 이름을 jenkins_container로 설정하여 생성한다.
  6. u root: 컨테이너 내부에서 실행되는 프로세스의 사용자를 root로 설정한다. 편의상 준 옵션으로, 추후 설정 과정에서 일부 권한 문제를 우회할 수 있다
  7. f7a9278ee82a: 사용할 도커 이미지의 IMAGE ID로 방금 pull 받은 이미지라고 볼 수 있다.

호스트의 8888 포트를 컨테이너의 8080 포트로 포트 포워딩해주고, 호스트의 ~/Desktop/jenkins_home 디렉토리를 컨테이너의 /var/jenkins_home 디렉토리와 볼륨 마운트하여 Jenkins 컨테이너를 실행해주었다.

컨테이너 실행된 것 확인

$ docker ps                                                                         
CONTAINER ID   IMAGE          COMMAND                  CREATED         STATUS         PORTS                               NAMES
74e97ca0db1f   f7a9278ee82a   "/usr/bin/tini -- /u…"   6 minutes ago   Up 6 minutes   50000/tcp, 0.0.0.0:8888->8080/tcp   jenkins_container

방금 생성한 jenkins_container가 up 상태인 것을 확인해 볼 수 있다.

마운트가 제대로 되었는지 확인

웹으로 젠킨스 설정페이지에 접속 및 설정

현재 호스트 내에 도커 컨테이너에 올라간 젠킨스는 호스트의 8888 포트가 컨테이너에 8080 포트로 포워딩 되도록 설정해준 상태이고, 젠킨스는 기본 포트가 8080에서 동작한다.

젠킨스의 웹페이지는

http:// {젠킨스 서버 주소}:{포트} 로 젠킨스에 접속할 수 있다.

현재는 별도로 분리된 서버거 아니라 나의 mac에서 돌아가는 도커에 올렸기 때문에 루프백 주소에 8888 포트로 접속하면 jenkins 컨테이너에서 돌아가는 jenkins 웹페이지에 접속가능하다.

  • 젠킨스를 별도의 서버에서 돌렸다면, 해당 서버의 public ip로 주소를 설정하여 접속해주면 된다.
  • 클라우드 환경에서 젠킨스 인스턴스를 만들어 구축하고자 하면 inbound rule 설정에서 젠킨스 웹페이지 접속을 위한 포트를 룰에 추가해주어야 한다.

젠킨스 설정페이지 접속

http://localhost:8888 접속

정상적으로 컨테이너를 생성하고 실행해주었다면 위와 같이 젠킨스의 Administrator password 를 입력하라는 창이 나온다.

초기 비밀번호 확인

초기 비밀번호는 젠킨스 서버의 /var/jenkins_home/secrets/initialAdminPassword

에서 확인할 수 있다.

docker exec로 실행중인 젠킨스 컨테이너에 접근하여서 bash를 실행시킨후, 해당 경로로 접근해보자

$ docker exec -it jenkins_container /bin/bash                                                                                                                 ok | 20:56:30
root@74e97ca0db1f:/#
root@74e97ca0db1f:/# cat /var/jenkins_home/secrets/initialAdminPassword
aee3ef389ea3459696e079146db3e03e

cat으로 /var/jenkins_home/secrets/initialAdminPassword 를 출력해보면 초기 비밀번호를 알아낼 수 있다.

비밀번호를 복사해준 후 ctrl+p, ctrl+q를 순차적으로 눌러 빠져나온다.

젠킨스 웹페이지 로그인

다시 젠킨스 웹페이지로 돌아가서 해당 비밀번호를 복사하여 로그인 해준다.

플러그인 설치

로그인에 성공하면 다음과 같이 플러그인 설치하는 부분이 나온다. install suggested plugins를 선택하여 기본적인 것만 설치해주었다.

설치중..

Admin 계정 생성

전부 설치가 완료되면 외부에서 접속할 때 사용할 어드민 계정을 생성하는 페이지가 나온다.

입력폼에 정보를 입력하고 save and continue를 눌러 계정 생성을 완료한다.

접속 URL 설정

다음은 jenkins에 접속할 url를 설정하는 부분이다.

로컬내에서만 사용해볼 것이기 때문에 localhost:8888로 설정해주었다.

마무리

위의 설정들을 모두 마치면 이제 젠킨스를 사용하기 위한 기본적인 설치는 마쳤다고 볼 수 있다.

profile
Github - https://www.github.com/woody35545

0개의 댓글