안내

이어지는 글

이해를 돕기 위하여 앞서[Jenkins] 설치 및 구성을 작성하였습니다. 먼저 읽고 오시면 설치 및 구성을 할 때 도움이 됩니다.

목적

Kubernetes 공유 볼륨을 활용하여 Jenkins 설치/구성 파일을 일관되게 유지합니다.

Dockerfile, Shared Storage, Kubernetes Yaml 파일을 관리하여 일관된 구성을 유지합니다.

Ubuntu 20.04 설치

Docker Desktop for Windows에서 Kubernetes 기능 활성화

Powershell 열기(Windows Terminal)

Windows Terminal은 Microsoft Store에서 설치할 수 있습니다.

Docker

이미지 생성

Ubuntu 이미지 위에 Jenkins 레이어를 쌓아 Jenkins 이미지를 생성합니다.

Dockerfile 작성

# Dockerfile

FROM ubuntu:latest

RUN apt-get update && apt-get -y install sudo wget gnupg2 vim openjdk-11-jdk

RUN wget -q -O - https://pkg.jenkins.io/debian-stable/jenkins.io.key | sudo apt-key add -

RUN echo "deb https://pkg.jenkins.io/debian-stable binary/" >> /etc/apt/sources.list

RUN apt-get update && apt-get install jenkins git zip unzip curl -y

RUN echo 'jenkins ALL=(ALL) NOPASSWD:ALL' >> /etc/sudoers

# 21.07.20 추가 - Ngrok 설정
RUN wget -q https://bin.equinox.io/c/4VmDzA7iaHb/ngrok-stable-linux-amd64.zip && unzip ./ngrok-stable-linux-amd64.zip && rm ./ngrok-stable-linux-amd64.zip

Dockerfile 빌드

# 현재 위치에 있는 Dockerfile을 빌드
docker build -t laminar:0.1 .

# Expected output
#[+] Building 0.2s (10/10) FINISHED
# => [internal] load build definition from Dockerfile                                                               0.0s
# => => transferring dockerfile: 32B                                                                                0.0s
# => [internal] load .dockerignore                                                                                  0.0s
# => => transferring context: 2B                                                                                    0.0s
# => [internal] load metadata for docker.io/library/ubuntu:latest                                                   0.0s
# => [1/6] FROM docker.io/library/ubuntu:latest                                                                     0.0s
# => CACHED [2/6] RUN apt-get update && apt-get -y install sudo wget gnupg2 vim openjdk-11-jdk                      0.0s

Kubernetes

Ngrok

로컬 컴퓨터 내의 Kubernetes 환경에 접속할 수 있도록 도와주는 서버입니다. 회원가입을 진행하여 AuthToken을 획득합니다.

회원가입 (https://dashboard.ngrok.com/signup)

Your Authtoken 선택

Command Line 명령어 복사

리소스 배포

폴더 C:\Users\Comtec\Kubernetes\Volumes\Jenkins 를 Container에 붙여 Jenkins 설정 파일을 공유합니다.

YAML 파일 작성

앞서 복사한 Authtoke 붙여넣기

apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: ubuntu
  name: ubuntu
spec:
  replicas: 1
  selector:
    matchLabels:
      app: ubuntu
  template:
    metadata:
      labels:
        app: ubuntu
    spec:
      containers:
      - command: ["/bin/sh","-c"]
        args: 
          - service jenkins start;
            # Change this line to your authtoken
            ./ngrok authtoken 1vZKY;
            ./ngrok http 8080;                
        image: laminar:0.1
        name: ubuntu
        volumeMounts:
        - mountPath: /var/lib/jenkins
          name: jenkins
      volumes:
      - name: jenkins
        hostPath:
          # directory location on host
          path: /run/desktop/mnt/host/c/Users/Comtec/Kubernetes/Volumes/Jenkins/
          # this field is optional
          type: DirectoryOrCreate

--- 

apiVersion: v1
kind: Service
metadata:
  labels:
    app: ubuntu
  name: ubuntu
spec:
  ports:
  - port: 8080
    protocol: TCP
    targetPort: 8080
  selector:
    app: ubuntu
  type: NodePort

Kubernetes 리소스 배포 (Deployment, Services)

kubectl apply -f ubuntu.yaml

# Expected output
# deployment.apps/ubuntu created
# service/ubuntu created

리소스 확인

kubectl get all

# Expected Output
#NAME                         READY   STATUS    RESTARTS   AGE
#pod/ubuntu-66ffd9566-vnspw   1/1     Running   0          4s

#NAME                 TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)          AGE
#service/kubernetes   ClusterIP   10.96.0.1       <none>        443/TCP          3d19h
#service/ubuntu       NodePort    10.96.128.223   <none>        8080:31614/TCP   4s

#NAME                     READY   UP-TO-DATE   AVAILABLE   AGE
#deployment.apps/ubuntu   1/1     1            1           4s

#NAME                               DESIRED   CURRENT   READY   AGE
#replicaset.apps/ubuntu-66ffd9566   1         1         1       4s
jq

JSON 구문을 분석하는데 사용하는 프로그램입니다. 설치하지 않은 경우, 다운로드 페이지로 이동 또는 링크를 클릭하여 설치할 수 있습니다.

jq 설치

저장 폴더 변경(선택사항)

폴더 주소 복사

windows + q 입력

시스템 환경 변수 편집 입력

시스템 환경 변수 편집 선택

환경 변수 선택

시스템 변수 중 Path 변수 선택

편집 선택

새로 만들기 선택

복사한 폴더 경로 붙여넣기

확인 선택

URL 확인

URL 주소 확인

$POD_NAME=kubectl get po -o json | jq '.items[0].metadata.name'
kubectl exec -it $POD_NAME -- curl http://127.0.0.1:4040/api/tunnels | jq '.tunnels[0].public_url'

# Expected Output
#"https://f69aaa692ee9.ngrok.io"

Jenkins

로그인

바로 위에서 확인한 URL을 입력하여 Jenkins 설정 페이지에 들어갈 수 있습니다.

https://f69aaa692ee9.ngrok.io로 접속 후 로그인

주소는 사용자마다 다르니, 반드시 확인 후 접속하세요.

URL 변경

현재는 컴퓨터 종료 후 부팅 시 POD가 재시작하면서 Ngrok 서버가 새롭게 올라갑니다. 즉 접속 가능한 URL이 변경되어, Jenkins URL 설정도 같이 변경을 합니다.

Manage Jenkins 선택

Configure System 선택