젠킨스를 Master/Slave로 보통 구성한다고 한다. (사실 실무에서는 사용해본적이 없지만, 많은 블로그나 책에서 이렇게 사용한다고 한다.)
도커 컴포즈를 연습해볼겸 젠킨스를 Master/Slave로 구축을 해보자,
- Master : 관리 기능 및 작업 실행 지시
- Slave : 실제 작업 진행
Master 젠킨스 컨테이너 실행하기
1.docker-compose.yml 작성
version: "3"
services:
master:
container_name: master
image: jenkins/jenkins:lts
ports:
- 9900:8080
volumes:
- ./master_jenkins_home:/var/jenkins_home
volumes 항목은 호스트와 컨테이너 사이에 파일을 공유할 수 있는 메커니즘이다. (파일 복사 x)
젠킨스 컨테이너를 호스트 쪽에서 편리하게 다룰 수 있도록 docker-compose.yml 파일에 volume을 정의해 호스트 쪽 현재 작업 디렉터리 바로 아래에 jenkins_home 디렉터리를 ./master_jenkins_home에 마운트한다.
2. jenkins master 실행 및 설정
$ docker-compose up
젠킨스 컨테이너를 실행시키자. 젠킨스를 실행시키면 초기 설정에서 패스워드가 생성되게되는데 잘 복사해 놓자
http://localhost:9900 으로 접근하게 되면, 앞에 복사해둔 초기 패스워드를 입력받는 페이지가 나온다. 초기 패스워드를 입력하고 설명을 따라 설정을 진행한다.
Install suggested plugins을 선택하여 기본 플그인을 설치를 진행하면, 젠킨스 홈 화면이 나타난다.
젠킨스 공식 이미지에서는 /var/jenkins_home에 젠킨스 데이터들이 저정된다. 그러므로 컴포즈를 실행한 컨테이너를 재시작해도 초기 설정이 유지된다.
Slave 젠킨스 컨테이너 실행하기
1. 마스터 젠킨스 용 SSH 키 생성
Master-Slave 젠킨스 구조를 사용하기 위해서는, 마스터가 슬레이브에 접속할 수 있도록 마스터 컨테이너에서 SSH키를 생성해야 한다. (Master-Slave 의 소통을 위해서 필수)
마스터 컨테이너에 접속하여 SSH키를 생성하자.
$ docker container exec -it master ssh-keygen -t rsa -C ""
Generating public/private rsa key pair.
Enter file in which to save the key (/var/jenkins_home/.ssh/id_rsa):
Created directory '/var/jenkins_home/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /var/jenkins_home/.ssh/id_rsa.
Your public key has been saved in /var/jenkins_home/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:ygSD36TAkljxJ6A1SkJjnOtOqXVVcEzL0kN70QPhOzg
The key's randomart image is:
+---[RSA 2048]----+
|+=B. .++ ++ |
|=X.= =o+ .o |
|* = = +.* o . |
| o o O.. + . |
|. . o.o E o |
| +. .o . . . |
|+. . o |
|.. |
| |
+----[SHA256]-----+
2. docker-compose.yml 수정(젠킨스 컨테이너 추가)
슬레이브 인스턴스 역할을 할 젠킨스 컨테이너를 추가한다.
version: "3"
services:
master:
container_name: master
image: jenkins/jenkins:lts
ports:
- 9900:8080
volumes:
- ./master_jenkins_home:/var/jenkins_home
links:
- slave01
slave01:
container_name: slave01
image: jenkins/ssh-agent
environment:
- JENKINS_AGENT_SSH_PUBKEY=ssh-rsa AAAA...
SSH 접속 허용 설정
- SSH로 접속하는 슬레이브 용도로 구성된 도커 이미지(jenkins/ssh-slave) 사용
- JENKINS_AGENT_SSH_PUBKEY 환경 변수를 사용하여, 마스터 젠킨스를 식별할 수 있게 한다. (https://hub.docker.com/r/jenkins/ssh-slave)
SSH 접속 대상 설정
- 컴포즈 links 요소를 사용하여, 다른 services 그룹에 해당하는 다른 컨테이너와 통신을 할 수 있게 한다.
- master에 slave01에 대한 link를 추가하여, master에서 slave01이라는 이름으로 슬레이브 컨테이너를 찾아갈 수 있게 한다.
$ docker-compose up -d
$ docker-compose ps
Name Command State Ports
------------------------------------------------------------------------------------
master /sbin/tini -- /usr/local/b ... Up 50000/tcp, 0.0.0.0:9900->8080/tcp
slave01 setup-sshd Up 22/tcp
3. 마지막 젠킨스 설정
마스터 젠킨스가 슬레이브 젠킨스를 인식하게 하려면, 마지막 설정이 필요하다.
Jenkins 관리 > 노드 관리 페이지에서 신규 노드를 생성한다.
Host 입력란에 ip를 적어도 되지만, slave01로 컨테이너를 찾을 수 있다.
밑에 캡쳐본을 참고해서 slave01 컨테이너관련 SSH 설정을 완료한다.
위와 같이 JavaPath도 설정을 해줘야 한다. 처음에 JavaPath설정을 안해줬더니 slave jenkins에서 java를 찾지 못하는 오류가 계속 발생하였다.해당 오류는 (https://chati.tistory.com/129 을 참고하였다.)
위의 그림처럼 뜬다면, master/slave 설정이 완료된 것이다.
참고) 도커/쿠버네티스를 활용한 컨테이너 개발 실전 입문
'프로그래밍 노트 > 인프라' 카테고리의 다른 글
[kafka] 카프카 특징 (데이터 모델, 디자인 특징) (0) | 2021.04.30 |
---|---|
[Kafka] 주키퍼(zookeeper)란 무엇인가? (2) | 2021.04.30 |
ScaleOut, ScaleUp (스케일아웃, 스케일업) (0) | 2021.01.24 |
[nginx] Proxy 환경에서 client IP 얻기 (정확한 ip 얻기) (1) | 2020.09.02 |
[nginx] HTTP관련 환경 설정_2 (0) | 2020.06.02 |