티스토리 뷰
Docker Compose 로 Jenkins 설치하기.
Docker Compose 를 이용하여, 하나의 host 에 여러 Docker Container 를 띄우고, 컨테이너를 함께 동작하도록 할 수 있습니다.
이번에는 mac 에 Docker 를 이용하여 Jenkins 를 설치해 보겠습니다.
Mac 에 Docker 설치하기.
Docker 는 기본적으로 Linux 계열에서 동작합니다. 그러나 Mac 에서 Docker Desktop 을 설치하면 Docker 를 이용할 수 있습니다.
설치는 https://docs.docker.com/docker-for-mac/install/ 에서 설치해 주면 됩니다.
Jenkins master 설치하기.
Jenkins master 를 설치하기 위해서는 docker-compose.yml 을 이용해서 설치 할 수 있습니다.
docker-compose를 이용하는 이유는 jenkins master - slave 구조로 이용 하기 위해서 입니다.
일반적으로 jenkins master 에서는 특정 job 을 트리거링 하고, 이를 slave 가 받아서 job 을 수행하도록 구성해서 이용합니다.
docker-compose.yml 작성하기
master 을 실행하기 위해서 docker-compose.yml 을 작성합니다.
version: "3"
services:
master:
container_name: master
image: jenkins/jenkins:lts
ports:
- 8080:8080
volumes:
- ./jenkins_home:/var/jenkins_home
- version: docker-compose 버젼은 3을 이용합니다.
- services: 는 docker-compose 가 정의할 서비스이며, 이 서비스 하위에 서비스를 등록하여 어떠한 서비스가 수행될지를 지정하는 디렉티브 입니다.
- master: 서비스 이름입니다.
- container_name: 컨테이너 이름을 지정합니다. 이는 docker --name <이름> 에 해당하는 이름입니다.
- image: 도커 이미지를 설정합니다. 우리는 jenkins/jenkins:lts 을 이용합니다.
- ports: 포트 포워딩을 해줄 포트를 이용합니다.
- 포트 포워딩은 '-' 을 통해서 배열로 작성할 수 있습니다.
- 우리는 <호스트포트>:<docker container 포트> 로 나열합니다.
- 이렇게 되면 우리는 외부에서 호스트 포트를 이용하여 http://localhost:8080 을 통해서 접속할 수 있고, 호스트 포트로 접속하면 컨테이너 내부의 8080 포트로 접근됩니다.
- volumes: 볼륨은 컨테이너 내부의 특정 디렉토리와 호스트 디렉토리를 연결하도록 해줍니다.
- <호스트 디렉토리경로>:<docker container 포트> 로 작성합니다.
- 이렇게 되면 docker 컨테이너가 올라오면 컨테이너내부의 /var/jenkins_home 에 작성되는 정보가, 우리가 사용하는 docker-compose를 실행할 디렉토리의 jenkins_home 과 연동됩니다.
실행 확인하기.
이제는 실제 docker-compose 를 실행해 보겠습니다.
우선은 jenkins master 하나만 올립니다.
$ cd <docker-compose.yml이 있는 디렉토리>
$ docker-compose -f docker-compose.yml up
Creating network "jenkins-install_default" with the default driver
Creating master ... done
Attaching to master
master | Running from: /usr/share/jenkins/jenkins.war
master | webroot: EnvVars.masterEnvVars.get("JENKINS_HOME")
master | 2020-04-14 01:05:50.060+0000 [id=1] INFO org.eclipse.jetty.util.log.Log#initialized: Logging initialized @753ms to org.eclipse.jetty.util.log.JavaUtilLog
...
master | *************************************************************
master |
master | Jenkins initial setup is required. An admin user has been created and a password generated.
master | Please use the following password to proceed to installation:
master |
master | 73a7f4bb45a2457d8f576e453422350b
master |
master | This may also be found at: /var/jenkins_home/secrets/initialAdminPassword
master |
master | *************************************************************
...
위에서 나오는 암호를 복사해 둡니다.
jenkins 가 설치되면 localhost:8080 으로 접속하면 id/password 를 입력하라고 나타납니다.
- id: admin
- password: 73a7f4bb45a2457d8f576e453422350b <-- 위에서 복사한 비번입니다.
여기에 암호를 입력해 주고 continue 버튼을 클릭합니다.
Jenkins Plugin 설치하기.
이제 Jenkins Plugin 을 설치합니다.
"Install suggested plugins" 을 클릭합니다.
그럼 다음과 같이 설치가 진행됩니다.
이 작업은 시간이 걸리니 커피한잔 하고 오면 좋습니다.
이후 작업은 다음과 같이 진행하면 됩니다.
SSH 접속 키 생성
jenkins master 는 이벤트가 트리거링 되면 slave 로 잡을 수행하도록 전달합니다.
이때 ssh 키가 있어야 master 가 slave 에 접속하여 통신할 수 있습니다.
% 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:GtG/WuYP9C13EKBT420QQTUFG0WO+oox01ZkYgi/P9k
The key's randomart image is:
+---[RSA 2048]----+
| . .O+==+|
| . o = = * |
| . . = + O .|
| . . + * . |
| . S + . o |
| o . = * . |
| . O O E .|
| = B = . |
| . o.o |
+----[SHA256]-----+
위와 같이 실행합니다.
이렇게 실행하면 /var/jenkins_home/.ssh 디렉토리에 인증키와 퍼블릭키가 저장됩니다.
% docker container exec -it master bash
jenkins@19f48a9c0bbb:/$ cd /var/jenkins_home/.ssh
jenkins@19f48a9c0bbb:~/.ssh$ ls
id_rsa id_rsa.pub
위처럼 해당 파일이 있는 것을 확인했습니다.
이제 PUBLIC 키를 복사해 둡니다.
환경변수 설정하기.
이제는 환경변수를 설정하겠습니다.
docker-compose 은 실행시 .evn 파일에 존재하는 프로퍼티에 접근하여 환경변수를 확인할 수 있습니다.
.env 파일
JENKINS_SLAVE_SSH_PUBKEY=ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAA ...
위와 같이 작성해 둡니다.
Slave 추가하기.
이제 jenkins slave 를 docker-compose.yml 에 작성해 보겠습니다.
ssh 로 접근하는 jenkins slave 이므로 다음 docker 이미지를 이용합니다.
우리는 2개의 slave 를 만들어 줄 것입니다.
docker-compose.yml 파일을 다음과 같이 작성 해줍니다.
version: "3"
services:
master:
container_name: master
image: jenkins/jenkins:lts
ports:
- 8080:8080
volumes:
- ./jenkins_home:/var/jenkins_home
# links 를 통해서 서비스끼리 연동할 수 있습니다.
links:
- slave01
- slave02
# jenkins - slave 를 정의합니다.
# 환경변수를 아래와 같이 JENKINS_SLAVE_SSH_PUBKEY 로 접근 할 수 있습니다.
slave01:
container_name: slave01
image: jenkins/ssh-slave
environment:
- JENKINS_SLAVE_SSH_PUBKEY= "${JENKINS_SLAVE_SSH_PUBKEY}"
slave02:
container_name: slave02
image: jenkins/ssh-slave
environment:
- JENKINS_SLAVE_SSH_PUBKEY= "${JENKINS_SLAVE_SSH_PUBKEY}"
docker-compose 내리고 다시 실행하기.
$ cd <docker-compose.yml이 있는 디렉토리>
$ docker-compose -f docker-compose.yml down
...
$ docker-compose -f docker-compose.yml up
...
컨테이너 확인하기.
성상으로 컨테이너가 실행되었는지 확인해 봅니다.
% docker-compose ps
Name Command State Ports
------------------------------------------------------------------------------------
master /sbin/tini -- /usr/local/b ... Up 50000/tcp, 0.0.0.0:8080->8080/tcp
slave01 setup-sshd Up 22/tcp
slave02 setup-sshd Up 22/tcp
보시는 바와 같이 master 1개, slave 2개가 떴습니다.
jenkins 노드 등록하기.
이제 slave01, slave02 를 마스터 노드와 연결하겠습니다.
우선 키를 복사해야합니다.
% docker container exec -it master bash
jenkins@1d9755ab7ca1:/$ cd /var/jenkins_home/.ssh
jenkins@1d9755ab7ca1:~/.ssh$ ls
id_rsa id_rsa.pub
jenkins@1d9755ab7ca1:~/.ssh$ cat id_rsa
-----BEGIN RSA PRIVATE KEY-----
MIIEowIBAAKCAQEAwjv+W6ThWu5lnAut5mT9ixO8JBZNShfvHoDCa0VA17qtJjI1
ee93NPu3lcKos3UOp6E+UhBOqku/kIC5G6naBqSG3nSVJ3uMZoN+nFPVgGo1lVxk
...
위와 같이 -----BEGIN RSA PRIVATE KEY----- 전문을 복사해 둡니다.
jenkins 에 접속하여 노드 등록하기.
에서 Jenkins 관리를 선택합니다.
"노드 관리" 를 찾아 선택합니다.
에서 "신규 노드" 를 클릭하고, 위 내용과 같이 내용을 입력합니다.
위 내용에서와 같이
- Name: slave01
- Remote root directory: /home/jenkins
- Launch method: Launch agents via SSH
- Host: slave01
그리고 Credentials 에서 Add 버튼을 클릭합니다.
위 창이 열리면 다음과 같이 선택합니다.
- Domain: Global credentials (unrestricted)
- Kind: SSH Username with private key
- Scope: Global (Jenkins, nodes, items, all child items, etc)
- Username: jenkins
- Private Key: Enter directly
- Key: 위에서 복제한 RSA PRIVATE KEY 내용을 붙여넣어 줍니다.
"Add" 버튼을 클릭합니다.
나머지 설정 부분을 지정합니다.
- Credentials: jenkins 를 선택합니다.
- Host Key Verification Strategy: Non verifying Verification Strategy
- Environment variables
- 이름: JAVA_HOME
- 값: /usr/local/openjdk-8
이후에 "Save" 버튼을 클릭합니다.
정상으로 확인되었습니다.
이제 slave02 도 동일한 방식으로 연동해 주면 됩니다.
결론
지금까지 docker-compose 를 통해서 jenkins 를 설치해 보았습니다.
jenkins master/slave 를 서로 연동하기 위해서 docker-compose 를 이용하였고,
links / service 이름을 통해서 상호 연결하였습니다.
그리고 master 가 slave 에 자유롭게 접근하기 위해서 ssh 를 이용하여 연동하는 것도 해 보았습니다.
'알아야할 IT지식' 카테고리의 다른 글
[Brew] MAC Open JDK 설치. (0) | 2022.05.13 |
---|---|
[Docker] 컨테이너 가볍게 작성하기 (0) | 2022.04.12 |
Mac 화면분할 어플 Spectacle (0) | 2022.04.11 |
GitHub SSH 접속 설정하기 (0) | 2022.04.11 |
- Total
- Today
- Yesterday
- jenkins
- Golang
- tfsec
- Gorilla
- MySQL
- NodeSelector
- AWS
- springboot
- gitops
- mongo
- java
- mapping
- declative
- Kafka
- docker
- Terraform
- kubectl
- MongoDB
- argocd
- CD
- deploy
- CI
- kafka-springboot
- jpa
- D3
- Database
- go
- Spring
- docker-compose
- kubernetes
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | |
7 | 8 | 9 | 10 | 11 | 12 | 13 |
14 | 15 | 16 | 17 | 18 | 19 | 20 |
21 | 22 | 23 | 24 | 25 | 26 | 27 |
28 | 29 | 30 |