티스토리 뷰

젠킨스 설치는 쿠버네티스 위에 할 수도 있고

kops를 설치했던 EC2 서버에서 할 수도 있습니다.

 

둘 다 해봤을 때 대략 

1. 쿠버네티스 내 설치 PV 등 추가로 설정 후, 빌드시 젠킨스 파이프라인에서 podTemplate 사용

2. EC2 리눅스 서버에 설치 - 쿠버네티스에서 Kubernetes Continous Deployment 플러그인 사용해서 배포하는 방법

 

1은 설정 방법이 많이 나와있지만 익숙하지 않아서 패스하고(현재 쿠버네티스 버전에서는 docker를 더이상 쓰지 않고 containerd를 쓰는 이슈도 있습니다)

2의 방법은 해당 플러그인이 현재 suspended 상태라 사용 불가능합니다. 해당 플러그인으로 설정하는 방법은 아래 블로그에 잘 정리되어 있습니다.

https://zunoxi.tistory.com/109

 

저는 EC2에 젠킨스 및 dind(도커 인 도커) 설치해서 스토리지를 공유하고

젠킨스에서 github 소스 빌드 후 도커허브에 도커 이미지를 push,

쿠버네티스 내에 설치한 argoCD에서 자동으로 배포하는 과정으로 진행하였습니다.

 

먼저 EC2 리눅스 서버에 도커 및 젠킨스를 설치합니다. 하단에 설치코드만 모아놓았습니다.

 

도커 설치

https://docs.docker.com/engine/install/ubuntu/

 

젠킨스 설치

https://www.jenkins.io/doc/book/installing/docker/

 

젠킨스 설치 후 접속 방법

https://www.jenkins.io/doc/book/installing/docker/#setup-wizard

 

전체 설치 코드

#도커 설치(v23.0.1)
#기존도커 삭제
sudo apt-get remove docker docker-engine docker.io containerd runc
#리포지토리로 도커 설치
sudo apt-get update
sudo apt-get install \
    ca-certificates \
    curl \
    gnupg \
    lsb-release
sudo mkdir -m 0755 -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
#sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
VERSION_STRING=5:23.0.1-1~ubuntu.22.04~jammy
sudo apt-get install docker-ce=$VERSION_STRING docker-ce-cli=$VERSION_STRING containerd.io docker-buildx-plugin docker-compose-plugin


#젠킨스 설치
docker network create jenkins
docker run \
  --name jenkins-docker \
  --rm \
  --detach \
  --privileged \
  --network jenkins \
  --network-alias docker \
  --env DOCKER_TLS_CERTDIR=/certs \
  --volume jenkins-docker-certs:/certs/client \
  --volume jenkins-data:/var/jenkins_home \
#추후 키젠으로 키 생성시 젠킨스에 들어가지 않고 EC2 내에서 키 생성해도 가능하게 설정
  --volume /home/ubuntu/.ssh:/root/.ssh \ 
  --publish 2376:2376 \
  docker:dind \
  --storage-driver overlay2

sudo vi Dockerfile
#아래 내용 입력
FROM jenkins/jenkins:2.375.3
USER root
RUN apt-get update && apt-get install -y lsb-release
RUN curl -fsSLo /usr/share/keyrings/docker-archive-keyring.asc \
  https://download.docker.com/linux/debian/gpg
RUN echo "deb [arch=$(dpkg --print-architecture) \
  signed-by=/usr/share/keyrings/docker-archive-keyring.asc] \
  https://download.docker.com/linux/debian \
  $(lsb_release -cs) stable" > /etc/apt/sources.list.d/docker.list
RUN apt-get update && apt-get install -y docker-ce-cli
USER jenkins
RUN jenkins-plugin-cli --plugins "blueocean docker-workflow"

#빌드
docker build -t myjenkins-blueocean:2.375.3-1 .

docker run \
  --name jenkins-blueocean \
  --restart=on-failure \
  --detach \
  --network jenkins \
  --env DOCKER_HOST=tcp://docker:2376 \
  --env DOCKER_CERT_PATH=/certs/client \
  --env DOCKER_TLS_VERIFY=1 \
  --publish 8080:8080 \
  --publish 50000:50000 \
  --volume jenkins-data:/var/jenkins_home \
  --volume jenkins-docker-certs:/certs/client:ro \
#추후 키젠으로 키 생성시 젠킨스에 들어가지 않고 EC2 내에서 키 생성해도 가능하게 설정
  --volume /home/ubuntu/.ssh:/root/.ssh \ 
  myjenkins-blueocean:2.375.3-1

sudo cat /var/lib/jenkins/secrets/initialAdminPassword
#초기 비밀번호 확인
docker exec -it jenkins-blueocean cat /var/jenkins_home/secrets/initialAdminPassword

 

http://[EC2주소]:8080 으로 접속하면 비밀번호 입력 창이 뜨는데, 

docker exec -it jenkins-blueocean cat /var/jenkins_home/secrets/initialAdminPassword 에서 나온 비밀번호로 로그인합니다.

jenkins-blueocean은 도커로 실행된 컨테이너 이름입니다.

docker ps로 현재 실행중인 도커 컨테이너 확인 가능합니다.

 

젠킨스 화면에서, Install suggested plugins을 하고 젠킨스 첫화면에 접속합니다.

 

Manage Jenkins > Plugin Manager > Available Plugin에서

관련 플러그인을 설치합니다. (기본적으로 깔려있는것도 있습니다)

 

Gradle Plugin

SSH Agent Plugin

GitHub plugin

Docker, Docker Pipeline

Pipeline

 

Github - Jenkins 연결을 위해 아래 코드로 Jenkins 도커 안에 접속해야 하지만,

docker exec -it jenkins-blueocean /bin/bash

아까 jenkins-docker과 jenkins-blueocean을 설치할 때 젠킨스 내 /root/.ssh 폴더와 젠킨스 밖 EC2의 /home/ubuntu/.ssh 폴더를 연결해놓았기 때문에 

EC2에서 ubuntu 계정으로 다음 코드를 실행시키고 Passphrase 등 인자입력을 전부 엔터를 입력합니다(기본 공백으로 입력됨)

ssh-keygen -t rsa

id_rsa와 id_rsa.pub가 생성됩니다.

공개키는 github deploy_keys에,

private key(pub이 안붙은 파일)은 Manage Jenkins > Manage Credential에 입력합니다.

깃헙 공개키 등록

연동할 리포지토리 > Settings > Deploy keys > Add

cat id_rsa.pub

공개키 파일의 내용 전체를 복사해서 등록합니다.

젠킨스와 제대로 연동되면 녹색으로 표시됩니다.

 

 

젠킨스 private key 등록

Kind - SSH Username with private key

ID - 구분할만한 유니크한 이름(영문)

username - 아무거나 생성

Key - cat id_rsa 해서 전체 내용 복붙

 

 

이제 깃헙 - 젠킨스 간 SSH 연결은 끝났습니다.

 

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
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 31
글 보관함