본문 바로가기

CICD(BUILD tool)

docker swarm jenkins / slave 설치 및 연동

728x90
반응형

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)

728x90
반응형