티스토리 뷰
쿠버네티스로 DevOps 구현 - 3-1. 젠킨스 설치 및 젠킨스 빌드 파이프라인 구축(배포 자동화) 젠킨스 환경 구축하기
개발자 하나 2023. 2. 28. 23:57젠킨스 설치는 쿠버네티스 위에 할 수도 있고
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 연결은 끝났습니다.
'쿠버네티스,AWS,JPA,CICD,MSA사이드프로젝트' 카테고리의 다른 글
쿠버네티스로 DevOps 구현 - 3-3. ArgoCD 설치 및 Github SSH 연결, 쿠버네티스 배포 설정 (0) | 2023.03.01 |
---|---|
쿠버네티스로 DevOps 구현 - 3-2. 젠킨스 설치 및 젠킨스 빌드 파이프라인 구축(배포 자동화) gradle build부터 도커 push까지 (0) | 2023.03.01 |
AWS 클라우드 EC2 서버 탄력적 IP 설정 및 해제 (0) | 2023.02.28 |
쿠버네티스로 DevOps 구현 - 2. AWS 환경에서 kops로 쿠버네티스 클러스터 생성 (0) | 2023.02.10 |
쿠버네티스로 DevOps 구현 - 1. AWS Ubuntu t2.medium 인스턴스 생성, 시큐리티 그룹 설정 (0) | 2023.02.09 |