overlay network 생성
도커 오버레이 네트워크를 생성한다.
docker create network -d overlay jenkins
Master 컨테이너 생성
Jenkins-master.yml
version: "3.8"
services:
jenkins-master:
image: jenkins/jenkins:2.387.1-lts-jdk11
networks:
- jenkins
ports:
- 8080:8080
volumes:
- /jenkins_home_volume/jenkins_home:/var/jenkins_home
- /var/run/docker.sock:/var/run/docker.sock
extra_hosts:
- "gitlab.xxx.com:10.0.0.1"
deploy:
mode: replicated
replicas: 1
placement:
max_replicas_per_node: 1
constraints: [node.labels.jenkins-master == true]
networks:
jenkins:
external: true
마스터를 먼저 올린다.
docker stack deploy -c jenkins-master.yml jkns-master
브라우저 localhost:8080으로 접근하면 비밀번호를 입력하라고 뜬다.
docker container exec -it jenkins-master /bin/bash
cat /var/jenkins_home/secrets/initialAdminPassword
비밀번호를 확인한 후 입력한다.
Suggested plugin을 설치한 후 admin계정을 생성한다.
master 컨테이너로 접근한 후 ssh-keygen 을 실행한다.
docker container exec -it {master_container} /bin/bash
ssh-keygen -t rsa -C ""
.ssh폴더로 id_rsa, id_rsa.pub 파일이동해서 id_rsa, id_rsa.pub 파일이 제대로 생성되었는지 확인한다.
cd ~/.ssh
ls -al
slave 컨테이너 생성
jenkins-slave.yml
version: "3.8"
services:
jenkins-slave-01:
image: jenkins/ssh-agent:jdk11
networks:
- jenkins
volumes:
- /jenkins_slave_volume/jenkins_home:/var/jenkins_home
- /var/run/docker.sock:/var/run/docker.sock
deploy:
mode: replicated
replicas: 1
placement:
max_replicas_per_node: 1
constraints: [node.labels.jenkins-slave-01 == true]
environment:
- JENKINS_SLAVE_SSH_PUBKEY=ssh-rsa AAAA****
extra_hosts:
- "gitlab.***.com:10.0.0.1"
networks:
jenkins:
external: true
JENKINS_SLAVE_SSH_PUBKEY에 master의 id_rsa.pub값을 넣어준다.
docker container exec -it {master_container} /bin/bash
cat ~/.ssh/id_rsa.pub
slave를 실행한다.
docker stack deploy -c jenkins-slave
master 의 ssh-copy-id를 이용해서 공용키를 원격호스트에 복사한다.
docker container exec -it {master_conatiner} /bin/bash
ssh-copy-id jenkins@jenkins-slave-01
jenkins는 추후에 노드 추가할 때 name으로 쓸 id값이고 @뒷 부분에 jenkins-slave-01은 slave의 서비스명이다.
slave노드 추가
Jenkins관리 -> Credentials -> System -> Global credentials
Kind : SSH Username with private key
Scope : Global(Jenkins, nodes, ...)
ID : ssh-copy-id에 들어간 이름 -> jenkins
Private Key -> Enter directly 아래에서 얻은 값을 넣는다.
docker exec -it {master_container} bash
cat ~/.ssh/id_rsa
Jenkins 관리 -> 노드 관리 -> 노드 추가
Permanent Agent를 체크한다.
Remote root directory : /var/jenkins_home(마운트된 볼륨의 경로)
Launch method : Launch agents via SSH
Host : slave의 서비스명
Credentials : 위에서 생성한 Credentials 선택
Host Key Verification Strategy : Known host file Verification Strategy
고급 선택 후 Java Path 작성
(Slave컨테이너에 접속해서 which java)
'CICD(BUILD tool)' 카테고리의 다른 글
No Known Hosts file was found at /var/jenkins_home/.ssh/known_hosts. (0) | 2023.03.17 |
---|---|
Jenkinsfile에서 gradle 빌드하기 ( docker 이미지로 ) (0) | 2022.10.28 |
docker-swarm 이용해서 jenkins / jenkins slave 설치 (0) | 2022.07.29 |
gitlab-runner docker 내부 git연결 시 설정 (0) | 2021.07.26 |
docker gitlab ssl(https) 적용 (0) | 2021.07.20 |