docker-compose 를 사용하여 jenkins 설정을 한다.
master 인스턴스에서는 관리 기능, 작업 지시를 실행하고 worker(slave) 인스턴스에서는 실제 작업을 진행한다.
이미지는 jenkins 공식 이미지를 사용하며 Master(docker-compose-master.yaml), Worker(docker-compose-worker.yaml) 파일 두개를 이용하여 설정을 한다.
Master Yaml
docker-compose 3버전, volume을 지정, 컨테이너명은 jenkins-master로 설정한 후 docker-compose-master.yaml 로 파일을 생성하였다.
# MASTER PRE-REQS
# Install docker, docker-compose
version: "3"
services:
jenkins-master:
container_name: jenkins-master
image: jenkins/jenkins:lts
ports:
- 8080:8080
- 50000:50000
restart: always
volumes:
- ~/infra/jenkins_master:/var/jenkins_home
environment:
TZ: "Asia/Seoul"
Master 설치 및 실행
Master 컨테이너를 실행한다.
docker-compose -f ./docker-compose-master.yaml up -d
브라우저로 localhost:8080/ 에 접근하게 되면 password를 묻는데 password는 Master 컨테이너의 /var/jenkins_home/secrets/initialAdminPassword 에서 확인을 할수 있다.
docker container exec -it jenkins-master /bin/bash
cat /var/jenkins_home/secrets/initialAdminPassword
위 명령어를 통해 얻은 패스워드 입력한다.
Jenkins Plugins 인스톨을 진행한다. 기본 Plugins 설치를 위해 Install suggested plugins 를 클릭한다.
Plugins 설치가 완료되면 계정 추가를 한다.
Master 인스턴스로 접근 후 ssh-keygen 실행을 해야한다.
docker container exec -it jenkins-master /bin/bash
ssh-keygen -t rsa -C ""
ssh 폴더로 이동 후 id_rsa, id_rsa.pub 파일이 생성되었는지 확인한다.
cd ~/.ssh
ls -al
Worker Yaml
docker-compose-worker.yaml 로 파일 생성한다. worker 더 추가하고 싶다면 컨테이너명을 바꿔서 추가한다.
# MASTER PRE-REQS
# Install docker, docker-compose
version: "3"
services:
jenkins-worker01:
container_name: jenkins-worker01
image: jenkins/ssh-agent
restart: always
volumes:
- ~/infra/jenkins_worker:/var/jenkins_home
environment:
- JENKINS_SLAVE_SSH_PUBKEY=ssh-rsa AAAAB....
Worker 설정
Master 인스턴스에서 worker로 ssh 접근을 위해 docker-compose-worker.yaml 파일의 JENKINS_SLAVE_SSH_PUBKEY 값을 Master 인스턴스의 id_rsa.pub 값을 넣어준다.
docker container exec -it jenkins-master /bin/bash
cat ~/.ssh/id_rsa.pub
worker를 실행한다.
docker-compose -f ./docker-compose-worker.yaml up -d
Master 인스턴스에서 ssh-copy-id 를 사용하여 Master 인스턴스 공용 키를 원격 호스트의 authorized_keys 파일에 복사한다.
docker container exec -it jenkins-master /bin/bash
ssh-copy-id jenkins@jenkins-worker01
Jenkins Master <-> Slave 설정
localhost:8080 로그인을 한다.
Jenkins관리 > 노드관리 > 신규 노드 메뉴에서 노드명 : jenkins-worker01 입력, Permanent Agent 체크 한다.
노드 설정을 한다.
- Remote root directory : /var/jenkins_home (docker-compose-worker.yaml 파일의 volumn 설정한 경로를 넣어준다.)
- Launch method : Launch agents via SSH
- Host : jenkins-worker01 (docker-compose-worker.yaml 파일의 컨테이너명을 넣어주면된다)
- Credentials : ADD 버튼을 클릭한다.
- Kind : SSH Username with private key
- UserName : jenkins (ssh-copy-Id 에 넣은 값이 들어가야한다.)
- Private Key : Enter directly 체크 후 ADD버튼을 클릭한 후 Master 인스턴스에서 ~/.ssh/id_rsa 내용을 넣어준다. 아래 캡쳐 이미지를 참고
- docker container exec -it jenkins-master /bin/bash
- cat ~/.ssh/id_rsa
- Host Key Verification Strategy : Known hosts file Verification Strategy 선택
- 고급 버튼 클릭
- JavaPath : jenkins-worker 컨테이너에 접근 후 java 경로를 찾고 값을 넣어준다.
- docker container exec -it jenkins-worker01 /bin/bash
- which java
- JavaPath : jenkins-worker 컨테이너에 접근 후 java 경로를 찾고 값을 넣어준다.
설정 결과
도커 조회 ( docker ps -a --filter name=jenkins )
Jenkins 노드 화면
'Develop > infra' 카테고리의 다른 글
Nginx 튜닝, 보안 설정 및 Docker-compose 실행 (0) | 2020.12.16 |
---|---|
Docker Compose 이용한 ElasticSearch Cluster, Kibana 구성 (0) | 2020.12.15 |
Kubernetes 개념 (0) | 2020.11.24 |
MacOS Kubernetes 사용하기 (0) | 2020.11.23 |
Docker 명령어 모음 (0) | 2020.11.23 |